fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef struct noLista {
  5. int info;
  6. struct noLista *prox;
  7. } Elemento;
  8.  
  9. Elemento* criarNovo(int Caractere);
  10. Elemento* Push(Elemento *Topo, int Caractere);
  11. Elemento* Pop(Elemento *Topo);
  12. Elemento* Top(Elemento *Topo);
  13. void imprimir(Elemento *Topo);
  14.  
  15. int main () {
  16. int Dados, i, op;
  17. Elemento *Pilha = NULL, *aux, *Pilha2 = NULL;
  18.  
  19. do {
  20. printf("1 - Adicionar elemento\n");
  21. printf("2 - Remover elemento\n");
  22. printf("3 - Mostrar pilha1\n");
  23. printf("4 - Remover pilha1\n");
  24. printf("0 - Encerrar\n\n");
  25.  
  26. printf("Opcao: ");
  27. scanf("%d", &op);
  28.  
  29. switch(op) {
  30. case 1:
  31. printf("Digite um inteiro: ");
  32. scanf("%d", &Dados);
  33.  
  34. Pilha = Push(Pilha, Dados);
  35. printf("Elemento adicionado\n\n");
  36. break;
  37.  
  38. case 2:
  39. if (Top(Pilha2) == NULL){
  40. while (Top(Pilha) != NULL){
  41. int removido = Top(Pilha)->info;
  42. Pilha = Pop(Pilha);
  43. Pilha2 = Push(Pilha2, removido);
  44. }
  45. }
  46.  
  47. if(Top(Pilha2) != NULL) {
  48. int removido = Top(Pilha2)->info;
  49. Pilha2 = Pop(Pilha2);
  50. printf("Elemento %d removido\n\n", removido);
  51. } else {
  52. printf("A pilha esta vazia\n\n");
  53. }
  54. break;
  55.  
  56. case 3:
  57. imprimir(Pilha);
  58. break;
  59. case 4:
  60. Pilha = Pop(Pilha);
  61. break;
  62.  
  63.  
  64. }
  65. } while(op!=0);
  66. return 0;
  67. }
  68.  
  69. Elemento* criarNovo(int Caractere) {
  70. Elemento *novo;
  71.  
  72. novo = (Elemento*) malloc(sizeof(Elemento));
  73. novo->info = Caractere;
  74. novo->prox = NULL;
  75.  
  76. return novo;
  77. }
  78.  
  79. Elemento* Push(Elemento *Topo, int Caractere) {
  80. Elemento *novo;
  81.  
  82. novo = criarNovo(Caractere);
  83.  
  84. novo->prox = Topo;
  85. Topo = novo;
  86. return Topo;
  87. }
  88.  
  89. Elemento* Pop(Elemento *Topo) {
  90. Elemento *aux;
  91.  
  92. aux = Topo;
  93. if(Topo != NULL) {
  94. Topo = Topo->prox;
  95. free(aux);
  96. }
  97. return Topo;
  98. }
  99.  
  100. Elemento* Top(Elemento *Topo) {
  101. return Topo;
  102. }
  103.  
  104. void imprimir(Elemento *Topo){
  105. printf("\nPilha1: ");
  106. Elemento *curr = Topo;
  107. while(curr){
  108. printf("%d -> ", curr->info);
  109. curr = curr->prox;
  110. }
  111. printf("NULL\n");
  112. }
  113.  
Success #stdin #stdout 0s 9424KB
stdin
1
5
3
1
10
1
12
3
4
3
4
3
0
stdout
1 - Adicionar elemento
2 - Remover elemento
3 - Mostrar pilha1
4 - Remover pilha1
0 - Encerrar

Opcao: Digite um inteiro: Elemento adicionado

1 - Adicionar elemento
2 - Remover elemento
3 - Mostrar pilha1
4 - Remover pilha1
0 - Encerrar

Opcao: 
Pilha1: 5 -> NULL
1 - Adicionar elemento
2 - Remover elemento
3 - Mostrar pilha1
4 - Remover pilha1
0 - Encerrar

Opcao: Digite um inteiro: Elemento adicionado

1 - Adicionar elemento
2 - Remover elemento
3 - Mostrar pilha1
4 - Remover pilha1
0 - Encerrar

Opcao: Digite um inteiro: Elemento adicionado

1 - Adicionar elemento
2 - Remover elemento
3 - Mostrar pilha1
4 - Remover pilha1
0 - Encerrar

Opcao: 
Pilha1: 12 -> 10 -> 5 -> NULL
1 - Adicionar elemento
2 - Remover elemento
3 - Mostrar pilha1
4 - Remover pilha1
0 - Encerrar

Opcao: 1 - Adicionar elemento
2 - Remover elemento
3 - Mostrar pilha1
4 - Remover pilha1
0 - Encerrar

Opcao: 
Pilha1: 10 -> 5 -> NULL
1 - Adicionar elemento
2 - Remover elemento
3 - Mostrar pilha1
4 - Remover pilha1
0 - Encerrar

Opcao: 1 - Adicionar elemento
2 - Remover elemento
3 - Mostrar pilha1
4 - Remover pilha1
0 - Encerrar

Opcao: 
Pilha1: 5 -> NULL
1 - Adicionar elemento
2 - Remover elemento
3 - Mostrar pilha1
4 - Remover pilha1
0 - Encerrar

Opcao: