//algoritmo da Torre de Hanoi //Gustavo Zanatta Bruno #include <stdio.h> #include<conio.h> #include <stdlib.h> #define MAX 3  struct pilha{ float areapilha[MAX]; int topo; }; typedef struct pilha Tpilha;  void init_pilha(Tpilha*elem); void push_pilha(Tpilha*elem,float valor); float pop_pilha(Tpilha*elem); unsigned int is_empty_pilha(Tpilha elem); unsigned int is_full_pilha(Tpilha elem); float top_pilha(Tpilha elem);  void main(void){ 	Tpilha memoria[3]; 	memoria[0].areapilha[0] = 3; 	memoria[0].areapilha[1] = 2; 	memoria[0].areapilha[2] = 1; 	memoria[0].topo = 2; 	init_pilha (&memoria[1]); 	init_pilha (&memoria[2]); 	int op; 	do{ 		printf ("1)Exibe os valores das pilhas.\n"); 		printf ("2)Movimenta os valores das pilhas.\n"); 		printf ("3)Desistir!\n"); 		printf ("Opção escolhida --->"); 		scanf ("%d",&op); 		switch(op){ 			case 1: 				int i,p; 				printf ("Digite o numero de qual pilha que deseja ver os valores (lembrando que existem as pilhas 0, 1, e a 2).\n"); 				scanf ("%d",&p); 				if (is_empty_pilha(memoria[p])==1) 				{ 					printf ("Pilha vazia!\n"); 				} 				else 				{ 					for(i=memoria[p].topo;i>-1;i--){ 							printf("%.2f\n",memoria[p].areapilha); 					}; 				}; 				system ("pause"); 				break; 			case 2: 				int pr, pi; 				float vr; 				printf("Digite o número da pilha que você deseja retirar o elemento (lembrando que existem as pilhas 0, 1, e a 2).\n"); 				scanf ("%d",&pr); 				if (is_empty_pilha(memoria[pr])==1) 				{ 					printf ("Pilha vazia!\n"); 				} 				else 				{ 					printf ("\nDigite o numero da pilha que você deseja incluir o elemento retirado anteriormente.\n"); 					scanf ("%d",π); 					if (is_full_pilha(memoria[pi])==1) 					{ 						printf ("Pilha de inclusão cheia!\n"); 					} 					else 					{ 						if (top_pilha(memoria[pi])>vr) 						{ 							vr = pop_pilha(&memoria[pr]); 							push_pilha(&memoria[pi],vr); 							printf ("Inserção feita com sucesso.\n");							 						} 						else 						{ 						printf ("O elemento no topo da pilha de inserção é menor que o valor inserido.\n"); 						printf ("MOVIMENTO NÃO PERMITIDO!!!!!!!!\n");	 						}; 					}; 				}; 				system ("pause"); 				break; 			case 3: 				system ("pause"); 				break; 			default: 				printf("Opção inválida!!!!(Sabe ler não babaca?!?!?!)\n"); 				system ("pause"); 				break; 		} 		system ("cls"); 	}while(op!=3); }  void init_pilha(Tpilha*elem){ elem->topo=-1; }  unsigned int is_empty_pilha(Tpilha elem){ unsigned int ret; ret=1; if (elem.topo!=-1) ret=0; return ret; }  unsigned int is_full_pilha(Tpilha elem){ unsigned int ret; ret=1; if (elem.topo!=MAX-1) ret=0; return ret; }  float top_pilha (Tpilha elem){ return elem.areapilha[elem.topo]; }  float pop_pilha(Tpilha*elem){ float ret; ret=-1; if(!is_empty_pilha(*elem)){ ret=elem->areapilha[elem->topo]; elem->topo--; }else{ printf("Pilha vazia"); } return ret; }  void push_pilha(Tpilha*elem, float valor){ if (!is_full_pilha(*elem)){ elem->topo++; elem->areapilha[elem->topo]=valor; }else{ printf("Pilha cheia"); } }  Só movimenta os elementos 1 vez....