Pilha estática

Publicado por DEMIS CARLOS FONSECA GOMES 13/06/2004

[ Hits: 10.658 ]

Homepage: www.portonaweb.com

Download Pilha Estática DEMIS CARLOS.cpp




(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).

  



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

Simple GTK# Hello World em C#

CÓDIGO ASCII

Número par ou ímpar (com operado bit a bit)

Mostrando as palavras digitadas ao contrário!

Calcular tempo de download


  

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


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts