Pilha
Publicado por Kleber de Andrade Reis 11/05/2005
[ Hits: 8.445 ]
exemplo de pilha com funcoes como comparacao de pilhas, copia de uma pilha entre outra.....
[code] #include <stdio.h> #include <string.h> struct escola { char nome[50]; int n1,n2,n3,n4; }*m2,*m3; int i=0,y=0; typedef struct escola pilha; void menu1(void); void menu(void); int empilha(pilha *emp, int c); int desempilha(int c); void status(int c); void imptopo(pilha *imp, int c); void lista(pilha *list, int c); int cria(void); int libera(void); pilha * copia_pilha(pilha *p); int pilhas_iguais(pilha *p1, pilha *p2); void show(pilha *p); int main() { pilha aluno[10]; int j=0,op,igual; for(i=0;i<10;i++) { aluno[i].n1=0; aluno[i].n2=0; aluno[i].n3=0; aluno[i].n4=0; aluno[i].nome[0]='{FONTE}'; } i=0; for(;;) { menu(); scanf("%i",&op); system("clear"); switch(op) { case 0: exit(0); break; case 1: cria(); break; case 2: i=empilha(aluno,i); break; case 3: i=desempilha(i); break; case 4: status(i); break; case 5: lista(aluno,i-1); break; case 6: imptopo(aluno,i-1); break; case 7: libera(); break; case 8: m3=copia_pilha(aluno); free(m2); break; case 9: igual=pilhas_iguais(aluno,m3); system("clear"); if(igual==1) printf("As pilhas sao identicas\n"); else printf("As pilhas sao diferentes\n"); sleep(4); break; default: printf("comando (%i) desconhecido\n",op); sleep(4); break; } } }; void menu1(void) { system("clear"); printf("*******************MENU*******************\n\n"); printf("1 - desempilha 1 dado\n"); printf("2 - desempilha 2 dados\n"); printf("3 - desempilha n dados\n"); printf("4 - desempilha todos os dados da pilha\n"); printf("\n*****************************************\n"); printf("Digite sua opcao: "); }; void menu(void) { system("clear"); printf("*******************MENU*********************\n\n"); printf("0 - sai do programa\n"); printf("1 - cria uma pilha\n"); printf("2 - empilha um elemento na pilha\n"); printf("3 - chama menu de desempilhamento\n"); printf("4 - verifica se a pilha esta vazia\n"); printf("5 - lista o conteudo da pilha\n"); printf("6 - imprime o ultimo elemento da pilha\n"); printf("7 - libera espaco de memoria alocado\n"); printf("8 - faz uma copia indentica da pilha aluno\n"); printf("9 - compara pilhas\n"); printf("\n********************************************\n"); printf("Digite sua opcao: "); }; int empilha(pilha *emp, int c) { int a; if(c<=9) { getchar(); //for(a=c;a>=0;a--) //{ //strcpy(emp[a+1].nome,emp[a].nome); //emp[a+1].n1=emp[a].n1; //emp[a+1].n2=emp[a].n2; //emp[a+1].n3=emp[a].n3; //emp[a+1].n4=emp[a].n4; //} printf("Digite o nome do aluno\n"); fgets(emp[c].nome,50,stdin); printf("Digite a nota do 1 bimestre\n"); scanf("%i",&emp[c].n1); printf("Digite a nota do 2 bimestre\n"); scanf("%i",&emp[c].n2); printf("Digite a nota do 3 bimestre\n"); scanf("%i",&emp[c].n3); printf("Digite a nota do 4 bimestre\n"); scanf("%i",&emp[c].n4); c++; } else { printf("A pilha esta cheia!!!\n"); sleep(4); } return c; }; int desempilha(int c) { int k,a; if(c>0) { menu1(); scanf("%i",&k); switch(k) { case 1: c--; return c; case 2: if(c>=2) c=c-2; else { printf("\n\nImpossivel desempilhar!!!\n"); sleep(4); } return c; case 3: system("clear"); printf("Digite a quantidade de elementos a ser desempilhado: "); scanf("%i",&a); if(a>c) { printf("\n\nImpossivel desempilhar!!!\n"); sleep(4); } else c=c-a; return c; case 4: c=0; return c; default: return c; } } else { printf("Verifique se a pilha foi criada ou se ela esta vazia!!\n"); sleep(4); } return c; }; void status(int c) { if(c==0) printf("A pilha esta vazia\n"); else printf("A pilha contem dados\n"); sleep(4); }; void imptopo(pilha *imp, int c) { if(c>=0) { printf("Ultimo dado contido na pilha e:\n\n"); printf("Nome do aluno: %s\n",imp[c].nome); printf("Nota 1 bimestre: %i\n",imp[c].n1); printf("Nota 2 bimestre: %i\n",imp[c].n2); printf("Nota 3 bimestre: %i\n",imp[c].n3); printf("Nota 4 bimestre: %i\n",imp[c].n4); } else printf("Verifique se a pilha foi criada ou se ela esta vazia!!\n"); sleep(4); }; void lista(pilha *list, int c) { int m=0; while(m<=c) { printf("Nome do aluno: %s\n",list[m].nome); printf("Nota 1 bimestre: %i\n",list[m].n1); printf("Nota 2 bimestre: %i\n",list[m].n2); printf("Nota 3 bimestre: %i\n",list[m].n3); printf("Nota 4 bimestre: %i\n\n\n",list[m].n4); m++; } if(c==-1) printf("Verifique se a pilha foi criada ou se ela esta vazia!!\n"); sleep(4); }; int cria(void) { m3=(pilha *) calloc(10,sizeof (pilha)); system("clear"); printf("Foi alocado um espaco em memoria para outra pilha\n"); sleep(4); return 0; }; int libera(void) { free(m3); system("clear"); printf("Foi liberado da memoria o espaco de m1\n"); sleep(4); return 0; }; pilha * copia_pilha(pilha *p) { int c; m2=(pilha *) calloc(10,sizeof (pilha)); for(c=0;c<i;c++) { strcpy(m2->nome,p->nome); m2->n1=p->n1; m2->n2=p->n2; m2->n3=p->n3; m2->n4=p->n4; m2++; p++; } y=i; m2=m2-c; return m2; }; int pilhas_iguais(pilha *p1, pilha *p2) { int c=0,a=0; char f; while(a<10) { if((y==i)&&(p1->n1==p2->n1)&&(p1->n2==p2->n2)&&(p1->n3==p2->n3)&&(p1->n4==p2->n4)&&(strcmp(p1->nome,p2->nome)==0)) ; else { return 0; } p1++; p2++; a++; } return 1; }; void show(pilha *p) { int c; for(c=0;c<i;c++) { printf("%s\n",p->nome); printf("%i\n",p->n1); printf("%i\n",p->n2); printf("%i\n",p->n3); printf("%i\n",p->n4); p++; sleep(4); } }; [/code]
Loop de Várias Váriáveis Em Um Único Laço "For" em C
Calculadora simples de dois valores, soma, subtrai, multiplica e divide
Lista simplesmente encadeada com busca auto-organizada
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta