viciado 1 Denunciar post Postado Setembro 24, 2009 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
Daniloinf 3 Denunciar post Postado Setembro 24, 2009 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
viciado 1 Denunciar post Postado Setembro 24, 2009 Obrigado Compartilhar este post Link para o post Compartilhar em outros sites