Pilhas em C
Publicado por Ivan Rocha 18/07/2007
[ Hits: 6.774 ]
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;
}
Parte 6 (Ordenando Strings) - sessão de estudo sobre MATRIZES.
Parte 8 - Sessão de estudo sobre VETORES
Árvore binária de busca, algoritmos de inserção, caminhamento e busca explicados
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como implementar Raid (0, 1, 5, 6, 10 e 50)
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
Criação de diretórios e aplicação de restrições de acesso no Linux
Como programar um sistema de controle para distribuições linux em c? (1)
Compartilhar ZEBRA ZD220 na rede (2)
Como programar um software que seja utilizado para coleta de dados em ... (1)









