Guest User

Untitled

a guest
Mar 17th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.08 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct lista
  4. {
  5. int valor;
  6. struct lista *prox;
  7. } Lista;
  8.  
  9. typedef struct pilha
  10. {
  11. Lista *topo;
  12. }Pilha;
  13.  
  14.  
  15. Pilha*Criar ()
  16. {
  17. Pilha* p = (Pilha*) malloc(sizeof(Pilha));
  18. p->topo = NULL;
  19. return p;
  20. }
  21.  
  22. void Preencher(Pilha* p, int*vetor,int i)
  23. {
  24. Lista* novo = (Lista*) malloc(sizeof(Lista));
  25. if(novo==NULL)
  26. {
  27. printf("Erro na alocacao\n");
  28. exit(1);
  29. }
  30. novo->valor = vetor[i];
  31. novo->prox = p->topo;
  32. p->topo = novo;
  33. }
  34. void pilha_imprime (Pilha* p,FILE*saida)
  35. {
  36. Lista* q;
  37. for (q=p->topo; q!= NULL; q = q->prox)
  38. {
  39. printf("%d ",q->valor);
  40. }
  41. printf("\n");
  42. }
  43. int pilha_vazia (Pilha* p)
  44. {
  45. return (p->topo == NULL);
  46. }
  47. float pilha_pop (Pilha* pino1,Pilha* pino2,Pilha* pino3,char aux)
  48. {
  49. Lista* t;
  50. float v;
  51. if(aux=='A')
  52. {
  53. if (pilha_vazia(pino1))
  54. {
  55. printf("Pilha vazia\n");
  56. exit(1);
  57. }
  58. t = pino1->topo;
  59. v = t->valor;
  60. pino1->topo = t->prox;
  61. free(t);
  62. }
  63. else if(aux=='B')
  64. {
  65. if (pilha_vazia(pino2))
  66. {
  67. printf("Pilha vazia\n");
  68. exit(1);
  69. }
  70. t = pino2->topo;
  71. v = t->valor;
  72. pino2->topo = t->prox;
  73. free(t);
  74. }
  75. else if(aux=='C')
  76. {
  77. if (pilha_vazia(pino3))
  78. {
  79. printf("Pilha vazia\n");
  80. exit(1);
  81. }
  82. t = pino3->topo;
  83. v = t->valor;
  84. pino3->topo = t->prox;
  85. free(t);
  86. }
  87. return v;
  88. }
  89. void pilha_push (Pilha* pino1,Pilha* pino2,Pilha* pino3,char aux, float v)
  90. {
  91. Lista* novo = (Lista*) malloc(sizeof(Lista));
  92. if(aux=='A')
  93. {
  94. novo->valor = v;
  95. novo->prox = pino1->topo;
  96. pino1->topo = novo;
  97. }
  98. else if(aux=='B')
  99. {
  100. novo->valor = v;
  101. novo->prox = pino2->topo;
  102. pino2->topo = novo;
  103. }
  104. else if(aux=='C')
  105. {
  106. novo->valor = v;
  107. novo->prox = pino3->topo;
  108. pino3->topo = novo;
  109. }
  110. }
  111. void imprimir(Pilha*Pino1,Pilha*Pino2, Pilha*Pino3,int*movimento,FILE*saida)
  112. {
  113. printf("movimento eh %d \n",*movimento);
  114. printf("Torre A:");
  115. pilha_imprime (Pino1,saida);
  116. printf("Torre B:");
  117. pilha_imprime (Pino2,saida);
  118. printf("Torre C:");
  119. pilha_imprime (Pino3,saida);
  120. printf("\n");
  121. }
  122. void mover(int tamanho, Pilha*pino1,Pilha*pino2,Pilha*pino3,int *movimento,FILE*saida,char origem,char temp,char destino)
  123. {
  124. *movimento += 1;
  125. // printf("movimento eh %d\n",*movimento);
  126. int aux;
  127. if (tamanho == 1)
  128. {
  129. aux=pilha_pop(pino1,pino2,pino3,origem);
  130. pilha_push(pino1,pino2,pino3,destino,aux);
  131. imprimir(pino1,pino2,pino3,movimento,saida);
  132. }
  133. else
  134. {
  135. mover (tamanho-1,pino1,pino2,pino3,movimento,saida,origem,destino,temp);
  136. aux=pilha_pop(pino1,pino2,pino3,origem);
  137. pilha_push(pino1,pino2,pino3,destino,aux);
  138. imprimir(pino1,pino2,pino3,movimento,saida);
  139. mover (tamanho-1,pino1,pino2,pino3,movimento,saida,temp,origem,destino);
  140. }
  141. }
  142.  
  143.  
  144. int main()
  145. {
  146. Pilha *Pino1=Criar();
  147. Pilha *Pino2=Criar();
  148. Pilha *Pino3=Criar();
  149. int total,i,movimento=0;
  150. int*vetor;
  151. FILE*entrada=fopen("L6Q2.in","r");
  152. if (entrada==NULL)
  153. {
  154. printf("Erro ao abrir arquivo\n");
  155. exit(1);
  156. }
  157. FILE*saida=fopen("L6Q1.out","w");
  158. if (saida==NULL)
  159. {
  160. printf("Erro ao abrir arquivo\n");
  161. exit(1);
  162. }
  163. fscanf(entrada,"%d",&total);
  164. printf("total eh %d\n",total);
  165. vetor=(int*)malloc(total*sizeof(int));
  166. if(vetor==NULL)
  167. {
  168. printf("erro de alocacao\n");
  169. exit(1);
  170. }
  171. for(i=0;i<total;i++)
  172. {
  173. fscanf(entrada,"%d",&vetor[i]);
  174. }
  175.  
  176. for(i=total-1;i!=-1;i--)
  177. {
  178. Preencher(Pino1,vetor,i);
  179. }
  180. char origem='A';
  181. char temp='B';
  182. char destino='C';
  183. mover(total,Pino1,Pino2,Pino3,&movimento,saida,origem,temp,destino);
  184. return 0;
  185. }
Add Comment
Please, Sign In to add comment