Ir para conteúdo
Fórum Script Brasil

Tucaozao

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre Tucaozao

Tucaozao's Achievements

0

Reputação

  1. 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; }
×
×
  • Criar Novo...