pilhas em c [RESOLVIDO]

13. Re: pilhas em c [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/03/2013 - 12:32h

danielcrvg escreveu:

humm comecou a dar uma clareada...


o NULL do topo, sempre existira, pq ele realmente nao aponta nada, e sempre fica descolando a medida q elementos forem adicionado, é isso??

EX:

C (* proximo aponta para NULL)

B (* proximo aponta para C)

A (* proximo aponta para B)


Se colocar mais 1 elemento "D" fica:

D (* proximo aponta para NULL)

C (* proximo aponta para D)

B (* proximo aponta para C)

A (* proximo aponta para B)




Pilhas seguem o modelo LIFO: Last IN First Out - Último que entra, Primeiro que sai. Igual a uma pilha de pratos. Exemplo:

[TOPO]->[NULL]

Empilha A

[TOPO]->[A]->[NULL]

Empilha V

[TOPO]->[V]->[A]->[NULL]

Empilha C

[TOPO]->[C]->[V]->[A]->[NULL]

Empilha D

[TOPO]->[D]->[C]->[V]->[A]->[NULL]

...

Retira um, que só pode ser o o topo:

Desempilha

[TOPO]->[C]->[V]->[A]->[NULL]

Novamente:

Desempilha

[TOPO]->[V]->[A]->[NULL]


Empilha E

[TOPO]->[E]->[V]->[A]->[NULL]


*** EDIT ***

Syntax error


  


14. Re: pilhas em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 31/03/2013 - 14:07h

aaaa entao o ponteiro esta apontando para baixo na pilha, e nao para cima, é isto??

tipo o ultimo a entrar(e primeiro a sair) aponta para o penultimo, que aponta para o primeiro, que aponta pra NULL..

eu achava q era ao contrario... o primeiro a entrar, apontava para o do meio, e o do meio apontava para o ultimo, e o ultio apontava pra NULL..


15. Re: pilhas em c [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 31/03/2013 - 14:23h

danielcrvg escreveu:

aaaa entao o ponteiro esta apontando para baixo na pilha, e nao para cima, é isto??

tipo o ultimo a entrar(e primeiro a sair) aponta para o penultimo, que aponta para o primeiro, que aponta pra NULL..

eu achava q era ao contrario... o primeiro a entrar, apontava para o do meio, e o do meio apontava para o ultimo, e o ultio apontava pra NULL..


Igual a uma pilha de pratos. Você tira sempre o que está em cima e nunca um dos que estão no meio.

Colocando um a um, o último sempre é o que está por cima. Que é o único possível de ser retirado.

Mas na pilha de pratos não existe NULL porque a pilha vazia é visível. Aliás, existe apenas o lugar onde havia uma pilha de pratos.


16. Re: pilhas em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 31/03/2013 - 17:43h

massa deu pra deu pra conseguir imaginar agora as coisas.

muito obrigado,






17. Re: pilhas em c [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/04/2013 - 01:41h

danielcrvg escreveu:

massa deu pra deu pra conseguir imaginar agora as coisas.

muito obrigado,





kra, agora q passou, já posso perguntar: estranhei o lance de ninguém mais responder, até reparei na idade e ver uns posts antigos: dei a mínima. e aí? resolveu seu problema?


18. Re: pilhas em c [RESOLVIDO]

Daniel
danielcrvg

(usa Slackware)

Enviado em 13/04/2013 - 01:46h

Resolvi cara...

o codigo ficou assim no final das contas:



#include <stdio.h>
#include <stdlib.h>

struct StructNo {

int elemento;
struct StructNo *proximo;

};

typedef struct StructNo Pilha;


void inicializar(Pilha **p) {
*p = NULL;
}

void push(Pilha **p, int valor) {

Pilha *tmp=NULL;

tmp = (Pilha*)malloc(sizeof(Pilha));

tmp->elemento = valor;

tmp->proximo = *p;

*p = tmp;

printf("\n* * Numero inserido com sucesso!! * *\n");
}


int pop (Pilha **p) {

Pilha *tmp;
int result;

if (!vazia(*p)) {

tmp = *p;

*p = (*p)->proximo;

result = tmp->elemento;

free(tmp);

printf("\n* * Numero retirado com sucesso!! * *\n");

return result;
}
printf("\n# # Impossivel retirar numero que esta no topo # #\n");
printf("\n# ERRO!! Pilha esta vazia!! #\n\n");

return 0;
}

int top(Pilha *p) {

if (!vazia(p)) {
return p->elemento;
}
printf("\n# # Impossivel imprimir numero que esta no topo # #\n");
printf("\n# ERRO!! Pilha esta vazia!! #\n\n");
return 0;
}

int vazia(Pilha *p) {
if (p==NULL)
return 1;
return 0;
}

void listar (Pilha *p) {
Pilha *tmp;
if (!vazia(p)) {
tmp = p;
while (tmp !=NULL) {
printf("%d\n",tmp->elemento);
tmp = tmp->proximo;
}
} else {
printf("\n# # Impossivel imprimir numero que esta no topo # #\n");
printf("\n# ERRO!! Pilha esta vazia!! #\n\n");
}
}


int main() {

Pilha *p1;
inicializar(&p1);

int num;
int x;
int topo;
int del;
int op;


printf("\n* Programa para testar as operacoes envolvendo Pilhas *\n");
printf("* * Valido somente para numeros inteiros * *\n");


do {

printf("\nDigite a OP:\n1-inserir numero\n2-retirar numero\n3-imprimir elemento que esta no topo\n4-lista completa\n9-PARAR\n");
scanf("%d", &op);

switch (op) {

case 1:
printf("\nDigite o numero a ser inserido: \n");
scanf("%d",&num);
push(&p1,num);
break;

case 2:
del = pop(&p1);
break;

case 3:
topo = top(p1);
printf("\nElemento que esta no topo: %d\n",topo);
break;

case 4:
printf("\nLista dos elementos: \n");
listar(p1);
break;

default:
break;
}

} while (op != 9);

return 0;
}




valeu pelo suporte..



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts