Descrição
(Pra quem já conhece meus scritps, sao todos feitos em windows, mas com algumas alterações roda muito bem em Linux).
Insere elementos, lista os elementos empilhados, exclui elementos (Pilha estática).
[ Download:
Pilha Estática DEMIS CARLOS.cpp ]
[
Enviar nova versão ]
[ Esconder código-fonte ]
/* Pilha estática,
Por Dêmis Carlos Fonseca Gomes
demiscarlos@hotmail.com
Ciencia da Computacao
2º Periodo
Universidade Federal do Tocantins
Palmas-TO.
*/
#include <stdio.h>
#include <conio.h>
#include <conio.c>
#include <stdlib.h>
#include <ctype.h>
#define MAX_ELEMENTOS 5
//*variaveis globais
int pilha[MAX_ELEMENTOS];
int topo=0;
/*prototipos
============*/
void push(int);
int pop(void);
void inserir(void);
void listar(void);
void remover(void);
/* poe um elemento na pilha*/
void push(int i)
{
if(topo>=MAX_ELEMENTOS)
{
printf("\t\t______________________\n");
printf("\n\n\n\t\t\tPILHA CHEIA\n\n");
printf("\t\t______________________\n");
return;
}
pilha[topo]=i;
topo++;
}
/*recupera o elemento do topo da pilha*/
int pop(void)
{
topo--;
if(topo<0)
{
printf("\t\t______________________\n");
printf("\n\n\n\t\t\tPilha vazia\n\n");
printf("\t\t______________________\n");
topo++;
return -1;
}
return pilha[topo];
}
/*insere um elemeto na pilha*/
void inserir(void)
{
int elemento;
printf("\n\nDigite o elemento a ser inserido na pilha -->> ");
scanf("%d",&elemento);
fflush(stdin);
push(elemento);
}
void remover(void)
{
int aux=pop();
if(aux!=-1)
printf("\n\nElemento removido da pilha: %d",aux);
}
void listar(void)
{
int i;
printf("\n topo(%d)\n",topo);
for(i=topo-1;i>=0;i--)
printf("\n%d) %d ",i,pilha[i]);
}
/*principal
============*/
main()
{
textcolor(17+128);
textbackground(6);
system("cls");
int aux;
char opcao;
int i,quant;
float max,min,*p;
clrscr();
for(aux=0;aux<MAX_ELEMENTOS;aux++)
pilha[aux]=0; /*inicializa a matriz com nulos*/
printf("\n\n\n\n\n\n\t\t\t\tBY DEMIS CARLOS\n\n");
printf("\t\t\tTECLE ENTER PARA CONTINUAR\n\n");
getch();
system("cls");
while(1)
{
printf("\n\n\nO que voce deseja: Inserir(i), Listar(l), Remover(r), Sair(s) --->> ");
opcao=getchar();
fflush(stdin);
opcao=toupper(opcao);
switch(opcao)
{
case 'I':inserir();
break;
case 'L':listar();
break;
case 'R':remover();
break;
case 'S':printf("\n Fim do programa!");
getch();
exit(0);
}
}/*while*/
}
Scripts recomendados
Acendedor de leds pela porta paralela
Filas em C
Estrutura de dados em C -> Fila Circular com operador módulo
uso do if
Multiplicação de Matrizes com ponteiros
Comentários
[1] Comentário enviado por
ron_lima em 13/06/2004 - 21:55h:
O seu programa tem dois problemas: o primeiro é a limitação da sua pilha: ela somente aceita no máximo 5 elementos. O segundo problema é a variável global. Isso faz com que o seu código não seja reaproveitável. Uma implementação interessante para uma pilha poderia ser feita utilizando-se uma lista encadeada simples, o que resolveria o problema da limitação. Existe um outro truque: ir crescendo o seu vetor dinamicamente, usando-se realloc para isso. É um truque interessante, porém com o custo de fazer com que a sua pilha sempre necessite de usar memória contígua para ser implementada, o que pode ser uma restrição severa em algumas plataformas.
[2] Comentário enviado por
jllucca em 22/06/2004 - 14:40h:
Ronaldo,
isso nao chega a ser um grande problema, pois o "Demis" disse "Pilha estatica". O conceito de estatico eh que temos um numero X de espaços para aproveitar e depois disso temos que bloquear a inserçao ate algo ser removido, ou seja, temos um tamanho estatico. Mas, a sugestao foi excelente.
[]'s