Buscar

Exemplo de aplicação utilizando Lista Dupla Deque

Alguns exemplos em linguagem C++ desse tipo de aplicação.

💡 5 Respostas

User badge image

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
}

0
Dislike0
User badge image

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.

0
Dislike0
User badge image

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.

0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais