Alguns exemplos em linguagem C++ desse tipo de aplicação.
Joao Andre MArtins Dias
Cara ai tem uma Lista Dupla encadeada em C, Uma aplicação poderia ser simular uma fila de qualquer coisa como padaria pizzaria... Qualquer fila.
Clinetes vão chegando você emfila, enqueue(cliente); Vai saindo deenqueue(); Sai o primeiro a entrar, (primeiro que entra primeiro que sai).
/*
* File: ListaDE.h
* Author: joao
*
* Created on 25 de Jun de 2017, 21:15
*/
#ifndef LISTADE_H
#define LISTADE_H
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#ifdef __cplusplus
extern "C" {
#endif
//--------------------------------------------------------------------------
struct DoubleLL {
char nome[40];
struct DoubleLL *prox, *ant;
};
typedef struct DoubleLL list;
//--------------------------------------------------------------------------
void enqueue(list **l, char info[]);
list deenque(list **l);
void init(list **l);
void exibe(list *l);
list* busca(list *l, char info[]);
void exclui(list **l, char nome[]);
//--------------------------------------------------------------------------
void init(list **l) {
*l = NULL;
}
//--------------------------------------------------------------------------
list deenque(list **l) {
list *aux;
aux = *l;
*l = (*l)->prox;
*l->ant = NULL;
return (aux);
}
void enqueue(list **l, char info[]) {
list *aux, *nova = (list*) malloc(sizeof (list));
strcpy(nova->nome, info);
nova->ant = nova->prox = NULL;
if (*l == NULL)
*l = nova;
else {
aux = *l;
while (aux->prox != NULL) {
aux = aux->prox;
}
nova->ant = aux;
aux->prox = nova;
}
}
//--------------------------------------------------------------------------
void exibe(list *l) {
while (l != NULL) {
printf("[%s]\n", l->nome);
l = l->prox;
}
}
//--------------------------------------------------------------------------
list* busca(list *l, char info[]) {
while (l != NULL && strcmp(info, l->nome) != 0) {
l = l->prox;
}
return l;
}
//--------------------------------------------------------------------------
list* getFim(list *l) {
while (l->prox != NULL)
l = l->prox;
return l;
}
//--------------------------------------------------------------------------
void exclui(list **l, char nome[]) {
list *aux = busca(*l, nome);
if ((*l)->prox == NULL) {
*l = NULL;
free(aux);
} else if (aux->ant == NULL) {
*l = (*l)->prox;
free(aux);
} else if (aux->prox == NULL) {
aux->ant->prox = NULL;
aux->ant = NULL;
free(aux);
} else {
aux->ant->prox = aux->prox;
aux->prox->ant = aux->ant;
free(aux);
}
}
//--------------------------------------------------------------------------
void selecaoDireta(list **l) {
char menor[40];
list *i = *l, *j = NULL;
while (i->prox != NULL) {
strcpy(menor, i->nome);
j = i->prox;
while (j != NULL) {
if (strcmp(j->nome, menor) < 0) {
strcpy(menor, j->nome);
strcpy(j->nome, i->nome);
strcpy(i->nome, menor);
}
j = j->prox;
}
i = i->prox;
}
}
//--------------------------------------------------------------------------
#ifdef __cplusplus
}
Andre Smaira
Para responder essa questão devemos aplicar nosso conhecimento sobre estrutura de dados.
#include <iostream>
#include <deque>
using namespace std;
int main(int argc, char *argv[]){
deque<int> fila;
cout << "Antes de inserir os elementos: ";
if(fila.empty())
cout << "Fila vazia!! ";
else
cout << "Fila NAO vazia!! ";
⁄⁄ inserir elementos ao final da fila
fila.push_back(10);
fila.push_back(20);
⁄⁄ inserir elemento no início da fila
fila.push_front(30);
⁄⁄ fila: 30 10 20
cout << " Depois de inserir os elementos: ";
if(fila.empty())
cout << "Fila vazia!! ";
else
cout << "Fila NAO vazia!! ";
cout << " Mostrando os elementos da fila: ";
deque<int>::iterator it = fila.begin();
while(it != fila.end())
cout << *it++ << " ";
cout << " ";
⁄⁄ limpar toda a fila
fila.clear();
cout << " Depois de limpar (clear) a fila: ";
if(fila.empty())
cout << "Fila vazia!! ";
else
cout << "Fila NAO vazia!! ";
⁄⁄ inserir elementos na frente
fila.push_front(10);
fila.push_front(20);
fila.push_back(30);
⁄⁄ fila: 20 10 30
⁄⁄ removendo o segundo elemento
fila.erase(fila.begin() + 1);
cout << " Mostrando os elementos da fila: ";
it = fila.begin();
while(it != fila.end())
cout << *it++ << " ";
cout << " Elemento da frente: " << fila.front();
cout << " Ultimo elemento: " << fila.back();
it = fila.begin() + 1;
fila.insert(it, 10);
cout << " Mostrando os elementos: ";
it = fila.begin();
while(it != fila.end())
cout << *it++ << " ";
⁄⁄ remover do início
fila.pop_front();
⁄⁄ remover do final
fila.pop_back();
cout << " Tamanho da fila: " << fila.size() << endl;
return 0;
}
Portanto acima se encontra o exemplo clássico do uso de um deque. Nele podemos ver a inserção e remoção dos elementos no inicio e no final. É possível também consultar se a lista está vazia ou cheia.
Andre Smaira
Para responder essa questão devemos aplicar nosso conhecimento sobre estrutura de dados.
#include <iostream>
#include <deque>
using namespace std;
int main(int argc, char *argv[]){
deque<int> fila;
cout << "Antes de inserir os elementos: ";
if(fila.empty())
cout << "Fila vazia!!\n";
else
cout << "Fila NAO vazia!!\n";
// inserir elementos ao final da fila
fila.push_back(10);
fila.push_back(20);
// inserir elemento no início da fila
fila.push_front(30);
// fila: 30 10 20
cout << "\nDepois de inserir os elementos: ";
if(fila.empty())
cout << "Fila vazia!!\n";
else
cout << "Fila NAO vazia!!\n";
cout << "\nMostrando os elementos da fila: ";
deque<int>::iterator it = fila.begin();
while(it != fila.end())
cout << *it++ << " ";
cout << "\n";
// limpar toda a fila
fila.clear();
cout << "\nDepois de limpar (clear) a fila: ";
if(fila.empty())
cout << "Fila vazia!!\n";
else
cout << "Fila NAO vazia!!\n";
// inserir elementos na frente
fila.push_front(10);
fila.push_front(20);
fila.push_back(30);
// fila: 20 10 30
// removendo o segundo elemento
fila.erase(fila.begin() + 1);
cout << "\nMostrando os elementos da fila: ";
it = fila.begin();
while(it != fila.end())
cout << *it++ << " ";
cout << "\n\nElemento da frente: " << fila.front();
cout << "\n\nUltimo elemento: " << fila.back();
it = fila.begin() + 1;
fila.insert(it, 10);
cout << "\n\nMostrando os elementos: ";
it = fila.begin();
while(it != fila.end())
cout << *it++ << " ";
// remover do início
fila.pop_front();
// remover do final
fila.pop_back();
cout << "\n\nTamanho da fila: " << fila.size() << endl;
return 0;
}
Portanto acima se encontra o exemplo clássico do uso de um deque. Nele podemos ver a inserção e remoção dos elementos no início e no final. É possível também consultar se a lista está vazia ou cheia.
Para escrever sua resposta aqui, entre ou crie uma conta.
Estrutura de Dados I
•UNI-FACEF
Murilo Zocca
Compartilhar