sábado, 6 de outubro de 2007

Estrutura de Dados

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*/
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*/
FILA (FIFO)
//<- FIM
inicio -> |_| -> |_| -> |_| -> NULL //INSERIR NO FIM
//remover do começo


3 comentários:

Illuminat disse...

#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);
}

Eu sou maisoumenos Eu disse...

Até que enfim alguem tomou uma boa atitude!!!!!!!!!!!!!

Eu sou maisoumenos Eu disse...

òtima iniciativa Sñr. Seu material tem me ajudado nesta matéria...............