Wilian anderson de souza Postado Setembro 5, 2006 Denunciar Share Postado Setembro 5, 2006 O programa esta desta maneiranumeros digitados pelo usuário5230o programa vai mostrar 05391 5391----------------------------------------------tem que ficar assim numeros digitados pelo usuário5230o programa vai mostrar 05391 obs: e para retirar ele vai perguntar quer tirar primeiro ou ultimoresposta primeiromostra 5391quer tirar primeiro ou ultimoresposta ultimomostra 539quer tirar primeiro ou ultimoresposta ultimomostra 53quer tirar primeiro ou ultimoresposta primeiromostra 3quer tirar primeiro ou ultimoresposta ultimomostra FIM-----------------------------------------------programação atual #include<stdio.h>#include<stdlib.h>struct lista{ int info; struct lista* prox;};typedef struct lista Pilha;Pilha* initPilha(){ return NULL;}Pilha* push( Pilha *s, int elem ){ Pilha*no=(Pilha*) malloc (sizeof(Pilha)); no->info=elem; no->prox=s; s=no; return s; }Pilha* pop(Pilha *s, int *elem){Pilha *no;if(s!=NULL){ no=s; s=s->prox; *elem=no->info; free(no); } return s;}int vazia (Pilha *s){ if (s == NULL) return 1; else return 0;}void libera (Pilha *s){ Pilha *p = s; Pilha *aux; while (p != NULL){ aux = p->prox; free (p); p = aux; }}void imprimePilha(Pilha *s){ Pilha *aux; aux = s; while (aux != NULL){ printf("%i ", aux->info); aux = aux->prox; } }void imprimeRecursivo(Pilha *s){ if (s == NULL) return; else { printf("%i ", s->info); imprimeRecursivo(s->prox); } }main(){ Pilha *p; int num; p = initPilha(); while(num!=0){ scanf("%i",&num); p=push(p,num); } imprimePilha(p); p=pop(p,&num); imprimePilha(p); libera (p); system("pause"); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Setembro 5, 2006 Denunciar Share Postado Setembro 5, 2006 O programa esta desta maneiranumeros digitados pelo usuário5230o programa vai mostrar 05391 5391o programa irá mostrar 0325 325ou seja, te mostrará a pilha completa e em seguida a pilha com 1 elemento desempilhado.tem que ficar assimnumeros digitados pelo usuário5230o programa vai mostrar 05391 o programa vai mostrar 0325 e para isso basta tirar a linha que desempilha o elemento e a linha que imprime novamente a pilha. main(){ Pilha *p; int num; p = initPilha(); while(num!=0){ scanf("%i",&num); p=push(p,num); } imprimePilha(p); libera (p); system("pause"); } obs: e para retirar ele vai perguntarquer tirar primeiro ou ultimopara isso primeiro voce tem que fazer um menu dentro da funcão main()para fazer o desempilhamento voce pode usar 2 funcões distintas, uma já está feita: a que retira o último elemento.a outra funcão seria a que retira o primeiro elemento, vou só te passar a dica:o primeiro elemento é o que aponta para o prox=NULL, faca um loop e chegue até ele. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Setembro 6, 2006 Denunciar Share Postado Setembro 6, 2006 obs: e para retirar ele vai perguntarquer tirar primeiro ou ultimoNo caso, perderia o conceito de Pilha, certo? :huh: Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Setembro 6, 2006 Denunciar Share Postado Setembro 6, 2006 No caso, perderia o conceito de Pilha, certo? Certo, perderia sim.O problema é que muitos professores quando ensinam estruturas de dados acabam pegando exercícios já formulados que misturam conceitos de pilha e fila. ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Setembro 8, 2006 Denunciar Share Postado Setembro 8, 2006 Salve!Ah sim, realmente. Beleza então, valeu! ;)Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Wilian anderson de souza
O programa esta desta maneira
numeros digitados pelo usuário
5
2
3
0
o programa vai mostrar 05391 5391
----------------------------------------------
tem que ficar assim
numeros digitados pelo usuário
5
2
3
0
o programa vai mostrar 05391
obs: e para retirar ele vai perguntar
quer tirar primeiro ou ultimo
resposta primeiro
mostra 5391
quer tirar primeiro ou ultimo
resposta ultimo
mostra 539
quer tirar primeiro ou ultimo
resposta ultimo
mostra 53
quer tirar primeiro ou ultimo
resposta primeiro
mostra 3
quer tirar primeiro ou ultimo
resposta ultimo
mostra
FIM
-----------------------------------------------
programação atual
#include<stdio.h>
#include<stdlib.h>
struct lista{
int info;
struct lista* prox;
};
typedef struct lista Pilha;
Pilha* initPilha(){
return NULL;
}
Pilha* push( Pilha *s, int elem ){
Pilha*no=(Pilha*) malloc (sizeof(Pilha));
no->info=elem;
no->prox=s;
s=no;
return s;
}
Pilha* pop(Pilha *s, int *elem){
Pilha *no;
if(s!=NULL)
{
no=s;
s=s->prox;
*elem=no->info;
free(no); }
return s;
}
int vazia (Pilha *s){
if (s == NULL)
return 1;
else
return 0;
}
void libera (Pilha *s){
Pilha *p = s;
Pilha *aux;
while (p != NULL){
aux = p->prox;
free (p);
p = aux;
}
}
void imprimePilha(Pilha *s){
Pilha *aux;
aux = s;
while (aux != NULL){
printf("%i ", aux->info);
aux = aux->prox;
}
}
void imprimeRecursivo(Pilha *s){
if (s == NULL)
return;
else {
printf("%i ", s->info);
imprimeRecursivo(s->prox);
}
}
main(){
Pilha *p;
int num;
p = initPilha();
while(num!=0){
scanf("%i",&num);
p=push(p,num);
}
imprimePilha(p);
p=pop(p,&num);
imprimePilha(p);
libera (p);
system("pause");
}
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.