Pilha com alocação estática

Publicado por Thiago 14/06/2007

[ Hits: 8.473 ]

Download pilha2.c




Todos comentários estão embutidos no código.
(=

  



Esconder código-fonte

/******************************************************************************************
 * Programa: pilha2.c
 * Autor: thiagoamm (thyeigur)
 * e-mail: harakiri190@yahoo.com.br
 * Data: 07/09/2006
 * Alteracao:  
 *
 * OBS: Este programa foi baseado em um pdf que encontrei na net sobre Estruturas de Dados
 * da PUC - RIO.
 * Estava estudando PILHA COM ALOCACAO ESTATICA.
 * Fiz algumas modificacoes na tentativa de facilitar a vida de quem esta comecando
 * assim como eu.
 * Espero ter agregado algum valor (=
 * 
 *******************************************************************************************/
 

/********************************
 * Diretivas de pre-processador
 *******************************/

/* Inclusao de bibliotecas */
#include <stdio.h>
#include <stdlib.h>

/* Definindo macro */
#define TOP 5 /* Topo da pilha */
#define BASE -1 /* Base da pilha */

/*********************************
 * Definindo Registro (Estrutura)
 *********************************
 
 /* Definindo a estrutura da pilha como um novo tipo de dados (abstrato) */ 

typedef struct
{
  int pos; /* Indexa a posicao da pilha */
  float vet[TOP]; /* Vetor onde sao armazenados os elementos */
} Stack;



/****************************
 *  Prototipos de funcoes 
 ****************************/

Stack *create(void); 
float pop(Stack *p); 
int stack_void(Stack *p);




/****************************
 * Prototipos de sub-rotinas
 ****************************/

void push(Stack *p, int e);



/************************************
 * Funcao principal (execucao
 ************************************/

int main(void)
{  
  Stack *pilha;
  int elem, op;
  char sair = 'n';
  
  /* Criando a pilha */
  pilha = create();  
  
  do
  {
    system("clear");
    printf("\n\t\t\t\t_________________________________________________");
    printf("\n\t\t\t\t|                    M E N U                    |");
    printf("\n\t\t\t\t|_______________________________________________|");    
    printf("\n\t\t\t\t|                                               |");
    printf("\n\t\t\t\t| 1 - Empilhar                                  |");
    printf("\n\t\t\t\t| 2 - Desempilhar                               |");
    printf("\n\t\t\t\t| 3 - Sair                                      |");
    printf("\n\t\t\t\t|                                               |");
    printf("\n\t\t\t\t|_______________________________________________|"); 
    
    printf("\n\nOpcao: ");    
    scanf("%d",&op);
    
    switch (op)
    {
      case 1:        
        printf("\nElemento: ");
        scanf("%d",&elem);
        push(pilha, elem);        
      break;
      
      case 2:
        pop(pilha);
      break;
      
      case 3:
        sair = 's';
      break;  
      
      default:
        printf("\nOpcao invalida!");     
    }
  } while (sair != 's');  
  
  system("clear"); /* No Windows e system("cls"); */
  puts("...................................................................................");
  puts(". Autor: thyeigur (thiagoamm)                                                     .");
  puts(". e-mail: harakiri190@yahoo.com.br                                                .");
  puts(". Seu comentario ou sugestao sendo construtivos sao muito importantes para mim.   .");
  puts("...................................................................................");
  getchar();
  getchar();  
  system("clear");
  
  return(0);
}



/********************************
 * Definicoes de funcoes
 ********************************/ 
 
/* Esta funcao e um ponteiro.
   Sua tarefa e criar uma referencia (apontar) para
   uma estrutura do tipo Pilha e retornar essa referencia
   atraves de seu nome. */   

Stack *create(void)
{
  Stack *p = (Stack*) malloc( sizeof(Stack) );
  p->pos = BASE; /* pilha vazia, posicao igual a base, 0 elementos. */
  return p;
}


/* Funcao que verifica se a pilha esta vazia */

int stack_void(Stack *p)
{
  return(p->pos == BASE); /* retorna 1 se VERDADEIRO */
}

/* Funcao que desempilha elementos */

float pop(Stack *p)
{
  int e;
  
  if (stack_void(p))
  {
    system("clear");
    printf("\n\n\t\t\t\tPILHA VAZIA!\n\n");
    exit(1);
  }
  
  /* Retira elemento do topo */
  e = p->vet[p->pos - 1];
  /* Muda o topo */
  p->pos--;
  
  return(e);
}



/***********************************
 * Definicao de sub-rotinas 
 ***********************************/


/* Sub-rotina que empilha elementos */ 

void push(Stack *p, int e)
{  
  p->pos++; /* Muda a base */
  
  if (p->pos == TOP)
  {
    system("clear");
    printf("\n\n\t\t\t\tESTOURO DE PILHA!\n\n\n\n");    
    exit(1); /* aborta execucao do programa */   
  }
  
  /* Armazena elemento na pilha */
  p->vet[p->pos] = e;
      
  return;
}

Scripts recomendados

Conversão do número de dias em anos (meu segundo programa em C)

Dado três valores, informar o maior e menor número

Calculo de média nota

Seu quinto programa em C

Histograma - C++


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts