Pilhas em C
Publicado por Ivan Rocha 18/07/2007
[ Hits: 6.619 ]
Homepage: http://homes.dcc.ufba.br/~ivan062/bahia
Pilhas em C como um cadastro de funcionários, com as funções Empilha, Desempilha e Topo, utilizando apontadores.
# include <stdio.h> # include <stdlib.h> # include <string.h> typedef struct registro{ char nome[20]; int num; float salario; struct registro *embaixo; }Pilha; /*FUNCAO INICIALIZA*/ void inicializa(Pilha **pilha){ *pilha = NULL; } /*FUNCAO PRA A LIMPEZA DO BUFFER DO TECLADO*/ void flush_in() { int ch; while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){} } /*FUNCAO TOPO*/ void topo(Pilha *pilha){ if (pilha != NULL){ printf("\n|TOPO|\n\n"); printf("Nome: %s\n", pilha -> nome); printf("Numero: %d\n", pilha -> num); printf("Salario: %.2f\n", pilha -> salario); getchar(); //flush_in(); } } /*FUNCAO VAZIA*/ int vazia(Pilha *pilha){ if(pilha == NULL){ return (1); }else return (0); } /*FUNCAO EMPILHA*/ void empilha(Pilha **pilha){ Pilha *novoFunc; int numero; printf("\nEmpilha quantos? "); scanf("%d", &numero); for(numero; numero > 0; numero--){ novoFunc = ((Pilha *)malloc(sizeof(Pilha))); printf("\n|Funcionario|\n\n"); printf("Nome: "); scanf("%s", novoFunc -> nome); flush_in(); printf("Codigo: "); scanf("%d", &novoFunc -> num); flush_in(); printf("Salario: "); scanf("%f", &novoFunc -> salario); novoFunc -> embaixo = NULL; if(vazia(*pilha)){ *pilha = novoFunc; }else{ novoFunc -> embaixo = *pilha; *pilha = novoFunc; } } } /*FUNCAO DESEMPILHA*/ void desempilha(Pilha **pilha){ Pilha *pont; int numero; printf("\nDesempilha quantos? "); scanf("%d", &numero); flush_in(); for(numero; numero > 0; numero--){ if(!vazia(*pilha)){ pont = *pilha; *pilha = (*pilha) -> embaixo; free(pont); } } } /*FUNCAO CONSULTA*/ void consulta(Pilha *pilha){ int numero; printf("\nNumero: "); scanf("%d", &numero); if(pilha != NULL){ while(pilha){ if(pilha -> num == numero){ printf("\nNome: %s\n", pilha -> nome); printf("Codigo: %d\n", pilha -> num); printf("Salario: %.2f\n", pilha -> salario); getchar(); flush_in(); break; }else pilha = pilha -> embaixo; } } } /*FUNCAO PRINCIPAL*/ int main(){ char op[1]; Pilha *pilha; inicializa(&pilha); for(;;){ system("clear"); printf("===== Programa PILHA =====\n\n"); printf("Sequencia de Operacoes:\n\n"); printf("a. Empilha; \n"); printf("b. Desempilha; \n"); printf("c. Consulta;\n"); printf("d. Topo;\n"); printf("s. SAIR.\n\n"); printf("OPCAO: "); scanf("%s", op); flush_in(); switch(toupper(op[0])){ case 'A':{ empilha(&pilha); }break; case 'B':{ desempilha(&pilha); }break; case 'C':{ consulta(pilha); }break; case 'D':{ topo(pilha); }break; case 'S':{ printf("\nTem certeza? (S/N) "); scanf("%s", op); flush_in(); if (toupper(op[0]) == 'S'){ system("clear"); exit(0); } }break; } } return 0; }
Escolha o algoritmo de ordenação
Nenhum coment�rio foi encontrado.
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Alguém já usou o framework Avalonia para desenvolver interfaces de usu... (4)
Ajuda Pra Melhoria do NFTABLES. (8)
Sinto uma leve lentidão ao arrastar, miniminizar e restauras as janela... (2)
Pastas da raiz foram para a área de trabalho [RESOLVIDO] (7)