//arquivo pilha.c #include #include #include "pilha.h" void inicializa(struct PILHA *pilha){ pilha->topo = (struct CELULA*)malloc(sizeof(struct CELULA)); pilha->fundo = pilha->topo; pilha->topo->prox = NULL; } int vazia(struct PILHA *pilha){ return(pilha->topo == pilha->fundo); } void empilha(struct ITEM x, struct PILHA *pilha){ struct CELULA *aux; aux = (struct CELULA*)malloc(sizeof(struct CELULA)); aux->prox = pilha->topo; pilha->topo->item = x; pilha->topo = aux; } void desempilha(struct PILHA *pilha, struct ITEM *x){ struct CELULA *aux; if (vazia(pilha)) printf("Erro: pilha vazia!!!\n"); else { aux = pilha->topo; pilha->topo = pilha->topo->prox; *x = pilha->topo->item; free(aux); } } void ma(struct PILHA *pilha){ struct PILHA p; int i=0, blocoa, blocob; struct ITEM x; for(i=0; i<5;i++){ inicializa(&pilha[i]); } printf("Escolha qual dos 5 blocos deseja mover sua posição: \n"); scanf("%d", &blocoa); blocoa= pilha[blocoa]; printf("Escolha para cima de qual bloco deseja mover o blocoa: \n"); scanf("%d", &blocob); blocob= pilha[blocob]; if(pilha != vazia(pilha)){ desempilha(&pilha, blocoa); } if(pilha != vazia(pilha)){ desempilha(&pilha, blocob); } x.chave= blocoa; empilha(blocoa, pilha); } void mt(struct PILHA *pilha){ struct PILHA p; for(i=0; i<5;i++){ inicializa(&pilha[i]); } int i=0, blocoa, blocob; ITEM x; for(i=0; i<5;i++){ inicializa(struct pilha[i]); } printf("Escolha qual dos 5 blocos deseja mover sua posição: \n"); scanf("%d", blocoa&); blocoa= pilha[blocoa]; printf("Escolha para o topo de qual bloco deseja mover o blocoa: \n"); scanf("%d", &blocob); blocob= pilha[blocob]; if(pilha[blocoa] != 1){ desempilha(&pilha, blocoa); } x.chave= blocoa; empilha(blocoa, pilha); } void ea(struct PILHA *pilha){ int blocoa, blocob; ITEM x; printf("Escolha qual dos 5 blocos deseja mover sua posição: \n"); scanf("%d", blocoa&); blocoa= pilha[blocoa]; printf("Escolha para cima de qual bloco deseja mover o blocoa juntos com outros blocos em cima dele: \n"); scanf("%d", &blocob); blocob= pilha[blocob]; if(pilha[blocob] != 1){ desempilha(&pilha, blocob); } x.chave= blocoa; empilha(blocoa, pilha); } void et(struct PILHA *pilha){ int blocoa, blocob; ITEM x; printf("Escolha qual dos 5 blocos deseja mover sua posição: \n"); scanf("%d", blocoa&); blocoa= pilha[blocoa]; printf("Escolha para o topo de qual bloco deseja mover o blocoa: \n"); scanf("%d", &blocob); blocob= pilha[blocob]; if(pilha[blocob] != 1){ desempilha(&pilha, blocob); } x.chave= blocoa; empilha(blocoa, pilha); }