Pilha com alocação estática

Publicado por Thiago 14/06/2007

[ Hits: 8.456 ]

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

Ordenação

Gerador de sequência numérica

Codigo anscii

equação de segundo grau

Quadrado de um número


  

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