Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

viciado

[Resolvido] Pilha

Recommended Posts

Achei um algoritmo na internet e consegui passar para C. Mais tem funções que não entendi.

 

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

typedef struct nodo{
        int n;
        struct nodo *prox;
        }PILHA;

void push(PILHA **P, int n){
     PILHA *aux;
     aux = (PILHA*) malloc(sizeof(PILHA));
     aux->n = n;
     aux->prox = *P;  //Coloco sempre o primeiro no topo é isso ?
     *P = aux;     //Pilha P recebe as atribuições q eu fiz anteriormente com aux ?
}

int top(PILHA **P){
    int v;
    if(*P != NULL){ v = (*P)->n;
                    return v;
                    }
    else{ printf("Erro: Pilha vazia \n"); 
         return 0;   
         }
}

void pop(PILHA **P){
     PILHA *aux;
     if(*P != NULL){
           aux = *P;
           *P = (*P)->prox;  //*P passa a ser (*P)->prox ?
           free(aux);    //Desaloca aux, pq ?
                     }
     else printf("Erro: Pilha vazia \n");           
}

int top_pop(PILHA **P){ //Retira um valor da pilha e o retorna
    PILHA *aux;
    int v;
    if(*P != NULL){
          v = (*P)->n;
          aux = *P;
          *P = (*P)->prox;
          free(aux);
          return v;
                 }
    else{ printf("Erro: Pilha vazia \n");
          return 0;
          }
}

int main()
{
  PILHA *p;
  puts("Insere 5");
  push(&p,5);
  puts("Insere 2");
  push(&p,2);
  puts("Insere 8");
  push(&p,8);
  printf("Topo: %d \n",top(&p));
  puts("Retira");
  pop(&p);
  puts("Exibe e Retira");
  printf("Topo: %d \n",top_pop(&p));
  printf("Novo Topo: %d \n",top(&p));
  system("PAUSE");	
  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei as resposta embaixo de suas perguntas, espero ter ajudado.

 

Achei um algoritmo na internet e consegui passar para C. Mais tem funções que não entendi.

 

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

typedef struct nodo{
        int n;
        struct nodo *prox;
        }PILHA;

void push(PILHA **P, int n){
     PILHA *aux;
     aux = (PILHA*) malloc(sizeof(PILHA));
     aux->n = n;
     aux->prox = *P;  //Coloco sempre o primeiro no topo é isso ?
                      // Exatamente
     *P = aux;     //Pilha P recebe as atribuições q eu fiz anteriormente com aux ?
                   // Sim! Você acaba de colocar um elemento no "topo" da pilha, logo você terá acesso apenas à ele.
}

int top(PILHA **P){
    int v;
    if(*P != NULL){ v = (*P)->n;
                    return v;
                    }
    else{ printf("Erro: Pilha vazia \n"); 
         return 0;   
         }
}

void pop(PILHA **P){
     PILHA *aux;
     if(*P != NULL){
           aux = *P;
           *P = (*P)->prox;  //*P passa a ser (*P)->prox ?
                             // Ao remover um elemento da pilha, qual elemento ocupará o topo? o proximo! XD
           free(aux);    //Desaloca aux, pq ?
                         // Boa prática de programação, já que você não vai mais usar esta PILHA, limpe ela da memória
                     }
     else printf("Erro: Pilha vazia \n");           
}

int top_pop(PILHA **P){ //Retira um valor da pilha e o retorna
    PILHA *aux;
    int v;
    if(*P != NULL){
          v = (*P)->n;
          aux = *P;
          *P = (*P)->prox;
          free(aux);
          return v;
                 }
    else{ printf("Erro: Pilha vazia \n");
          return 0;
          }
}

int main()
{
  PILHA *p;
  puts("Insere 5");
  push(&p,5);
  puts("Insere 2");
  push(&p,2);
  puts("Insere 8");
  push(&p,8);
  printf("Topo: %d \n",top(&p));
  puts("Retira");
  pop(&p);
  puts("Exibe e Retira");
  printf("Topo: %d \n",top_pop(&p));
  printf("Novo Topo: %d \n",top(&p));
  system("PAUSE");	
  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.