Pilha com alocação estática
Publicado por Thiago 14/06/2007
[ Hits: 8.672 ]
Todos comentários estão embutidos no código.
(=
/******************************************************************************************
* 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;
}
Transformação de Matriz em Matriz Transposta
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Programa fora de escala na tela do pc (10)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)
O programa assinador digital (1)









