Pilhas em C
Publicado por Ivan Rocha 18/07/2007
[ Hits: 6.778 ]
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;
}
De quantas maneiras pode-se preencher um tabuleiro de xadrez com dominós
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 quebrar senha usando john the ripper
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
queria saber como posso alterar a frequencia do meu ryzen 2300u pro (3)
Não consigo instalar distro antiga no virtualbox nem direto no hd (22)









