Baixe o app para aproveitar ainda mais
Prévia do material em texto
/*PILHA com Lista*/ /*pilha.h*/ #include <stdlib.h> typedef struct elemento Elemento; typedef struct pilha Pilha; Pilha *pi_cria(void); void pi_push(Pilha*pi,int novo); int pi_pop(Pilha*pi); void pi_libera(Pilha *pi); int pi_eh_vazia(Pilha *p); #include <stdio.h> #include <stdlib.h> #include "pilha.h" struct elemento{ int info; struct elemento *prox; }; struct pilha { Elemento *prim;/*Cria uma variavel(Nó) do tipo elemento*/ }; Pilha *pi_cria(void) { Pilha *p; p=(Pilha*)malloc(sizeof(Pilha));/*Criando uma pilha vazia*/ if(p==NULL)/*Não conseguiu alocar*/ exit(1); p->prim=NULL;/*o ENDEREÇO do PRIMEIRO será NULL*/ return p;/*retorno a pilha*/ } void pi_push(Pilha *p,int v)/*insere na pilha*/ { Elemento *novo; novo=(Elemento*)malloc(sizeof(Elemento));/*Cria um novo ELEMENTO e não PILHA*/ if(novo==NULL)/*Não conseguiu alocar*/ exit(1); novo->info=v; novo->prox=p->prim;/*Meu prox será o endereço do primeiro*/ p->prim=novo;/*O primeiro agora será meu endereço(NOVO)*/ } int pi_pop(Pilha *p) { Elemento *t; int v; if(pi_eh_vazia(p))/*Se for VAZIA a func vai retornar 1, e o VS interpreta como sim*/ { printf("Pilha eh vazia\n"); exit(1); } t = p->prim;/*o endereço de t é o PRIMEIRO da pilha*/ v = t->info;/*v tem a informaçao do PRIMEIRO da pilha*/ p->prim = t->prox;/*o PRIMEIRO vira o proximo*/ free(t);/*APAGO o PRIMEIRO DA PILHA*/ return v;/*retorna o valor(info) pra imprimir*/ } void pi_libera(Pilha *p) { Elemento *t, *q; q=p->prim;/*q guarda o endereço do PRIMEIRO da pilha*/ while(q!=NULL) { t=q->prox;/*t guarda o endereço do meu proximo*/ free(p);/*LIBERA CADA ELEMENTO DA PILHA*/ q=t;/*q "vira" o proximo*/ } free(p);/*LIBERA A PILHA*/ } int pi_eh_vazia(Pilha *p) { if(p->prim==NULL) return 1; return 0; } Implementações de Pilha: void retiraImpares (Pilha* p) { int x, resto; Pilha *pic; pic=pi_cria(); while(!pi_eh_vazia(p)) { x=pi_pop(p); if(x%2!=0) pi_push(pic,x); } while(!pi_eh_vazia(pic)) { printf("%d\n", pi_pop(pic)); } pi_libera(pic); } void concatenaPilhas (Pilha* p1 , Pilha *p2) { float x; while(!vazia(p1)) { x=pop(p1); push(p2,x); } while(!vazia(p2)) { printf("%.2f\n", pop(p2)); } }
Compartilhar