Pilhas (dinâmicas)
Pilhas são estruturas de dados, que podem ser alocadas dinâmica ou sequencialmente. Têm uma disciplina de acesso rígida, que deve sempre ser observada (LIFO: last in, first out; o último a entrar é o primeiro a sair).
As pilhas são úteis na construção de programas como sistemas operacionais e quaisquer outros que disciplinem acessos concorrentes, nos quais exista espera (ver sosim).
temp{|____| -> armazenar dados (int, float,...)
*temp{|____| -> referência, ligação (ponteiro)
|3|} temp
---
|_|
|2|
---
|_|
|1|
---
|_|
NULL -> "chão"
pilha.exe
||
SO
||
processo
(código + dados + refs)
1º passo: criar 1 unidade da pilha, na forma de estrutura (em C, struct).
struct é um dado heterogêneo, misto, ou seja, comporta vários tipos de dados, inclusive outros struct's.
/*criar 1 tipo personalizado, cujo nome*/FILA (FIFO)
timedef struct temp //repete daqui
{
int dado; // declarar todos os
float num; // dados que precisar, qq tipo.
struct temp *prox; //declarar 1 ponteiro do mesmo tipo do struct
//repete aqui (obrigatoriamente)
}pilha; /* é pilha*/
//<- FIM
inicio -> |_| -> |_| -> |_| -> NULL //INSERIR NO FIM
//remover do começo
3 comentários:
#include <stdio.h>
#include <malloc.h>
typedef struct temp
{
int dado;
struct temp *prox;
}pilha;
pilha *topo, *novo;
// colocar aqui funções de manipulação
void inserir()
{
novo=(pilha*) malloc (sizeof(pilha));
printf("\n\tDigite o dado p/ armazenar= ");
scanf("%d", &novo->dado); //armazenar 1 valor em um dado
if (topo==NULL) //testa se a primeira está vazia
novo->prox=NULL;
else
novo->prox=topo;
topo=novo;
}
void retirar()
{
if(topo==NULL)
{
printf("\n\tPilha vazia!");
return;
}
novo = topo;
topo = topo->prox;
free(novo); //"desalocar", liberar memória
}
void mostrar()
{
if(topo==NULL)
{
printf("\n\tPilha vazia!");
return;
}
novo = topo; //começa do topo
while (novo!=NULL)
{
printf("\n%d", novo->dado);
novo = novo->prox; //vá p/ o próximo!
}
}
main()
{
topo=novo=NULL; //pilha vazia!
int op;
do
{
printf("\n\nDigite uma opcao: ");
printf("\n\t1-Inserir\n\t2-Retirar");
printf("\n\t3-Mostrar\n\t4-Fim\n\n->");
scanf("%d", &op);
switch(op)
{
case 1: inserir(); break;
case 2: retirar(); break;
case 3: mostrar(); break;
case 4: break;
default: printf("\n\t***Erro!");
}
}while (op!=4);
}
Até que enfim alguem tomou uma boa atitude!!!!!!!!!!!!!
òtima iniciativa Sñr. Seu material tem me ajudado nesta matéria...............
Postar um comentário