Ir para conteúdo
Fórum Script Brasil
  • 0

Pilha


Wilian anderson de souza

Pergunta

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

  • 0

O programa esta desta maneira

numeros digitados pelo usuário

5

2

3

0

o programa vai mostrar 05391 5391

o programa irá mostrar 0325 325

ou seja, te mostrará a pilha completa e em seguida a pilha com 1 elemento desempilhado.

tem que ficar assim

numeros digitados pelo usuário

5

2

3

0

o 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 perguntar

quer tirar primeiro ou ultimo

para 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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

;)

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...