Enviado em 16/03/2016 - 17:54h
Pessoal estou com dificuldade na última função, para trocar o topo pela base e vice versa.
#include<stdio.h>
#include<stdlib.h>
#define TAM_MAX 100
struct x {
int *itens; // Modificado itens[TAM_MAX];
int topo;
};
int empty(struct x *);
void push(int valor, struct x *);
int pop(struct x *);
int stackpop(struct x *);
int size(struct x *);
void trocatopobase(struct x *);
int main(){
struct x p, inv;
int n=0, k=4,op,w;
p.topo = 0;
char rep;
p.itens = (int *) malloc((k)*sizeof(int));
push(1,&p);
push(5,&p);
push(9,&p);
push(3,&p);
printf("\n<<< PROGRAMA PILHA >>\n\n");
printf("\n0: Sair \n");
printf("\n1: Inserir itens \n");
printf("\n2: Remover itens \n");
printf("\n3: Imprimir tamanho \n");
printf("\n4: Imprimir item topo \n");
do{
printf("\nEntre com a opcao desejada: \n");
scanf("%d",&op);
switch(op){
case 0 :
break;
case 1 :
printf("\ninserindo número a pilha: ");
scanf("%d",&w);
push(w,&p);
break;
case 2 :
if(pop(&p) == 0)
printf("\n>>> ATENCAO PILHA vazia! <<<\n");
else
printf("\nRemovendo da pilha e ficou no topo: %3d\n",pop(&p));
break;
case 3 :
printf("\nImprimir tamanho da pilha: %3d\n",size(&p));
break;
case 4 :
if(stackpop(&p) == 0)
printf("\n>>> ATENCAO PILHA vazia! <<<\n");
else
printf("\nImprimir item no topo da pilha: %3d\n", stackpop(&p));
break;
default :
printf("\nInfelizmente, opção incorreta\n");
break;
}
printf("Quer continuar a alterar pilha?\n Digite 's' para Sim\n Ou tecle qualquer tecla para sair:\n");
scanf("%s",&rep);
fflush(stdin) || __fpurge(stdin);
__fpurge(stdin);
}while((rep == 's') || (rep == 'S' ));
trocatopobase(&p); // função troca base topo
return 0;
}
int empty(struct x *pilha){
if(pilha->topo == 0)
return 1;
else
return 0;
}
void push(int valor, struct x *pilha){
pilha->itens[pilha->topo] = valor;
pilha->topo = pilha->topo + 1;
}
int pop(struct x *pilha){
if(empty(pilha) == 1){
printf("\n>>> ATENCAO PILHA vazia! <<<\n");
return 0;
}
else{
pilha->topo = pilha->topo - 1;
return pilha->itens[pilha->topo];
}
}
int stackpop(struct x *pilha){
if(empty(pilha) == 1){
printf("\n>>> ATENCAO PILHA vazia! <<<\n");
return 0;
}
else
return pilha->itens[pilha->topo - 1];
}
int size(struct x *pilha){
return pilha->topo;
}
void trocatopobase(struct x *pilha){// função troca base topo
int aux1, aux2, i;
aux1 = pilha ->itens[pilha->topo];
aux2 = pilha ->itens[pilha->topo-3];
printf("topo = %3d \n", pilha ->itens[pilha->topo]);
printf("aux1 = %3d\n", aux1);
printf("aux2 = %3d\n", aux2);
printf("\nItens sem trocar\n");
for(i=0; i<= 3; i++)
printf("%3d\n", pilha ->itens[pilha->topo - i]);
printf("\n\nTrocando Topo com Base\n");
pilha ->itens[pilha->topo] = aux2;
pilha ->itens[pilha->topo-3] = aux1;
for(i=0; i<= 3; i++)
printf("%3d\n", pilha ->itens[pilha->topo - i]);
}