Pilhas em C
Publicado por Ivan Rocha 18/07/2007
[ Hits: 6.803 ]
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.
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Instalando COSMIC no Linux Mint
Turbinando o Linux Mint: o poder das Nemo Actions
Inteligência Artificial no desenvolvimento de software: quando começar a usar?
[Resolvido] Algo deu errado ao abrir seu perfil
Usando o VNSTAT para medir o seu consumo de internet
Habilitando clipboard manager no ambiente COSMIC
Problema com som no laptop (5)
Quando vocês pararam de testar distros? (11)
Não estou conseguindo fazer funcionar meu Postfix na versão 2.4 no Deb... (2)









