Pilhas em C
Publicado por Ivan Rocha 18/07/2007
[ Hits: 6.820 ]
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;
}
funcsoma2.c - Soma 2 pontos flutuantes
Nenhum comentário foi encontrado.
Papagaiando o XFCE com temas e recursos
WhatsApp com Chamadas no Linux via Waydroid
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Como cortar as partes de um vídeo com passagens de áudio em branco
Tiling automático no KDE Plasma
SNMP Scan no OCS Inventory só funciona com HTTPS corretamente configurado
Links importantes de usuários do vol (4)
GOG confirma suporte oficial ao sistema Linux: "o trabalho começo... (2)
Para os fãs de DOOM, um vídeo do Romero (com dublagem em pt-br disponí... (2)









