• 0
Sign in to follow this  
hanndre

Ajuda Para Entender Estrutura De Dados (pilhas, Filas E Listas)

Question

Este tópico é destinado a ajuda sobre Estrutura de Dados (Pilhas, Filas e Listas), contamos com a colaboração de todos e que possão compatilhar seu conhecimento deste tópico aqui.

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Ei!

alguém pode mi ajudar a fazer uma função clonar fila?!?

Meu script é esse:

#include <stdlib.h>

#include <stdio.h>

#include <iostream>

#include <conio.h>

using namespace std;

#define MAX 100

typedef struct CelulaFila * Apontador;

/*Registro para armazenar os dados da fila*/

struct Dados

{

int CHAVE;

/* outros dados */

};

//Todo elemento da fila é um TipoCelula

struct CelulaFila

{

Dados REG;

Apontador PROX;

}TipoCelula;

//Uma fila é composta de um apontador para a frente da fila

//um tras para o final da fila e uma variável para armazenar seu tamanho.

struct Fila

{

Apontador FRENTE;

Apontador TRAS;

int TAMANHO;

};

/*Usado quando for criar ou destruir uma Fila*/

void FFvazia (Fila *p,Fila *c)

{

p->FRENTE = NULL;

p->TRAS = p->FRENTE;

p->TAMANHO = 0;

}

/*Verifica se a Fila esta vazia

poderia ser implementada perguntando se tamanho é igual a zero

*/

int vazia (Fila p)

{

return (p.FRENTE == NULL);

}

/*

Retorna o numero de elementos da Fila

*/

int tamanho (Fila p)

{

return (p.TAMANHO);

}

/*

Metodo que enfileira os dados em uma Fila

*/

void enfileirar (Dados reg, Fila *p)

{

Apontador aux; //apontador auxiliar

/*Criando a nova celula*/

aux = (Apontador) malloc (sizeof(TipoCelula));

//se não conseguiu alocar memória para o elemento da Fila

if(aux == NULL)

cout<<"Erro, sem memoria para enfileirar";

//aloca os dados na Fila

aux->REG = reg;

aux->PROX = NULL;

if(vazia(*p))

{

p->TRAS = aux;

p->FRENTE = p->TRAS;

}

else

{

p->TRAS->PROX = aux; //ligando a nova celula a fila

//Atualiza o TRAS

p->TRAS = aux;

}

//incrementa o numero de elementos da Fila

p->TAMANHO = p->TAMANHO + 1;

}

/*Desenfileira um elemento da Fila*/

void desenfileirar(Fila *p)

{

Apontador aux;

if (vazia (*p)) //se a Fila estiver vazia

cout<<"Erro! Fila Vazia!";

else

{

aux = p->FRENTE; //aux recebe o item a ser retirado da Fila

p->FRENTE = aux->PROX; //atualizamos o FRENTE

aux->PROX = NULL; //desliga a celula a ser removida

if(p->FRENTE==NULL)//colocar FRENTE e TRAS apontando para o mesmo lugar

p->TRAS = p->FRENTE;

free (aux); //liberamos o espaco de memória

p->TAMANHO = p->TAMANHO - 1; //diminuimos um elemento

}

}

/*Metodo para mostrar os elementos da Fila*/

void mostrar(Fila *p){

Apontador aux;

aux = p->FRENTE;

while(aux!=NULL){

cout<<aux->REG.CHAVE<<"\n";

aux = aux->PROX;

}

}

/*Metodo para clonar uma fila*/

void clonar(Dados reg, Fila *c, Fila *p){

Apontador aux;

Dados e;

if (vazia (*p)) //se a Fila estiver vazia

cout<<"Erro! Fila Vazia!";

else

{

aux = (Apontador) malloc (sizeof(TipoCelula));

aux = p->FRENTE; //aux recebe o item a ser retirado da Fila

e.CHAVE=aux;

//se não conseguiu alocar memória para o elemento da Fila

if(aux == NULL){

cout<<"Erro, sem memoria para enfileirar";

}

else{

//aloca os dados na Fila

aux->REG = e;

aux->PROX = NULL;

if(vazia(*c))

{

c->TRAS = aux;

c->FRENTE = c->TRAS;

}

else

{

c->TRAS->PROX = aux; //ligando a nova celula a fila

//Atualiza o TRAS

c->TRAS = aux;

}

//incrementa o numero de elementos da Fila

c->TAMANHO = c->TAMANHO + 1;

}

}

}

//Desempilha toda a fila!

void desenfileirartodos(Fila *p)

{

Apontador aux;

if (vazia (*p)) //se a Fila estiver vazia

cout<<"Erro! Fila Vazia!";

else

{

do{

aux = p->FRENTE; //aux recebe o item a ser retirado da Fila

p->FRENTE = aux->PROX; //atualizamos o FRENTE

aux->PROX = NULL; //desliga a celula a ser removida

if(p->FRENTE==NULL)//colocar FRENTE e TRAS apontando para o mesmo lugar

p->TRAS = p->FRENTE;

free (aux); //liberamos o espaco de memória

p->TAMANHO = p->TAMANHO - 1; //diminuimos um elemento

}while(!vazia (*p));

}

}

//-----------------------------------------------------------PROGRAMA PRINCIPAL

int main()

{

int op;

Dados d;

Fila p,c;

//criando a Fila

FFvazia(&p);

FFvazia(&c);

do{

system("cls");

cout<<"\n1-Enfileirar";

cout<<"\n2-Desenfileirar";

cout<<"\n3-Vazia";

cout<<"\n4-Fazer Vazia";

cout<<"\n5-Tamanho";

cout<<"\n6-Mostrar";

cout<<"\n7-Clonar";

cout<<"\n8-Desenfileirar Todos";

cout<<"\n9-Sair";

cout<<"\nDigite a sua opcao:" ;

cin>>op;

switch(op){

case 1:

cout<<"\nDigite uma chave: ";

cin>>d.CHAVE;

enfileirar(d,&p);

break;

case 2:

desenfileirar(&p);

cout<<"\nDesenfileirado!";

getch();

break;

case 3:

if(vazia(p))

cout<<"\nVazia!";

else

cout<<"\nExistem elementos!";

getch();

break;

case 4:

FFvazia(&p);

cout<<"Destruida!";

getch();

break;

case 5:

cout<<"\nTamanho: "<<tamanho(p);

getch();

break;

case 6:

mostrar(&p);

getch();

break;

case 7:

clonar(&p, &c);

cout<<"\nClonada!";

getch();

break;

case 8:

desenfileirartodos(&p);

cout<<"\nDesenfileirado Todos!";

getch();

break;

case 9:

cout<<"\n\t\t\t\tAdios Mutchatcho!\n\n\n\t\t";

system("PAUSE");

return EXIT_SUCCESS;

break;

default:

cout<<"opcao invalida!";

break;

}

}while(op!=7);

return 0;

}

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this