hanndre Postado Maio 2, 2007 Denunciar Share Postado Maio 2, 2007 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tucaozao Postado Novembro 12, 2007 Denunciar Share Postado Novembro 12, 2007 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 100typedef struct CelulaFila * Apontador;/*Registro para armazenar os dados da fila*/struct Dados{ int CHAVE; /* outros dados */};//Todo elemento da fila é um TipoCelulastruct 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 PRINCIPALint 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;} Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
hanndre
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.
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.