Guest User

Untitled

a guest
Jan 21st, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <time.h>
  4. using namespace std;
  5.  
  6. class No
  7. {
  8. private:
  9. int dado;
  10. No* prox;
  11. friend class Lista;
  12. };
  13.  
  14. class Lista
  15. {
  16. private:
  17. No* inicio;
  18. No* ultimo;
  19. public:
  20. Lista(); //Construtor - equivale à função "criar".
  21. ~Lista(); //Destrutor - equivale à função "eliminar".
  22. void inserir(int elemento);
  23. void inserirOrdenado(int elemento);
  24. void remover(int elemento);
  25. void mostrar();
  26. };
  27.  
  28. Lista :: Lista()
  29. {
  30. inicio = NULL;
  31. ultimo = NULL;
  32. }
  33.  
  34. Lista :: ~Lista()
  35. {
  36. No* aux;
  37. ultimo->prox = NULL;
  38.  
  39. while(inicio != NULL)
  40. {
  41. aux = inicio;
  42. inicio = inicio->prox;
  43. delete aux;
  44. }
  45. }
  46.  
  47. void Lista :: inserir(int elemento)
  48. {
  49. No* novo = new No;
  50. novo->dado = elemento;
  51.  
  52. if(inicio == NULL)
  53. {
  54. novo->prox = novo;
  55. ultimo = novo;
  56. }
  57. else
  58. {
  59. novo->prox = inicio;
  60. ultimo->prox = novo;
  61. }
  62.  
  63. inicio = novo;
  64. }
  65.  
  66. void Lista :: inserirOrdenado(int elemento)
  67. {
  68. No* aux;
  69. No* ant = NULL;
  70. No* novo = new No;
  71. novo->dado = elemento;
  72.  
  73. for(aux = inicio; aux != NULL && novo->dado > aux->dado; aux = aux->prox)
  74. {
  75. if(ant == ultimo)
  76. break;
  77.  
  78. ant = aux;
  79. }
  80.  
  81. if(aux == NULL) //lista vazia
  82. {
  83. novo->prox = novo;
  84. inicio = novo;
  85. ultimo = novo;
  86. return;
  87. }
  88.  
  89. if(ant == NULL) //inserir no começo
  90. {
  91. novo->prox = inicio;
  92. inicio = novo;
  93. ultimo->prox = novo;
  94. return;
  95. }
  96.  
  97. if(ant == ultimo)
  98. ultimo = novo;
  99.  
  100. ant->prox = novo; //inserir no meio ou no final
  101. novo->prox = aux;
  102. }
  103.  
  104. void Lista :: remover(int elemento)
  105. {
  106. No* aux;
  107. No* ant = NULL;
  108.  
  109. for(aux = inicio; aux != NULL && aux->dado != elemento; aux = aux->prox)
  110. {
  111. if(aux == ultimo) //elemento não existente
  112. return;
  113.  
  114. ant = aux;
  115. }
  116.  
  117. if(aux == NULL) //lista vazia
  118. return;
  119.  
  120. if(ant == NULL) //primeiro elemento da lista
  121. {
  122. inicio = aux->prox;
  123. ultimo->prox = inicio;
  124. }
  125. else //elemento do meio ou do final
  126. {
  127. ant->prox = aux->prox;
  128.  
  129. if(aux == ultimo) //se o nó a ser deletado for o último, o nó anterior passará a ser o novo último
  130. ultimo = ant;
  131. }
  132.  
  133. delete aux;
  134. }
  135.  
  136. void Lista :: mostrar()
  137. {
  138. No* aux;
  139.  
  140. for(aux = inicio; aux != NULL; aux = aux->prox)
  141. {
  142. cout << aux->dado << endl;
  143.  
  144. if(aux == ultimo)
  145. return;
  146. }
  147. }
  148.  
  149. int main()
  150. {
  151. Lista teste;
  152.  
  153. teste.inserirOrdenado(4);
  154. teste.inserirOrdenado(0);
  155. teste.inserirOrdenado(2);
  156. teste.inserirOrdenado(1);
  157. teste.inserirOrdenado(3);
  158. teste.inserirOrdenado(5);
  159. teste.inserirOrdenado(10);
  160. teste.inserirOrdenado(8);
  161.  
  162. teste.remover(10);
  163.  
  164. teste.inserirOrdenado(11);
  165.  
  166. teste.mostrar();
  167.  
  168. return 0;
  169. }
Add Comment
Please, Sign In to add comment