Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.85 KB | None | 0 0
  1.  
  2. #include "liste.h"
  3.  
  4.  
  5.  
  6. void hinten_anfuegen(TListenKnoten*& anker, const int wert)
  7. {
  8. TListenKnoten* neuer_eintrag = new TListenKnoten;
  9. neuer_eintrag->data = wert;
  10. neuer_eintrag->next = nullptr;
  11. neuer_eintrag->prev = nullptr;
  12.  
  13. if (anker == nullptr)
  14. anker = neuer_eintrag;
  15. else
  16. {
  17. TListenKnoten* ptr = anker;
  18. while (ptr->next != nullptr)
  19. {
  20. ptr = ptr->next;
  21. }
  22. neuer_eintrag->prev = ptr;
  23. ptr->next = neuer_eintrag;
  24. }
  25. }
  26.  
  27. string liste_als_string(TListenKnoten* anker)
  28. {
  29. string resultat = "";
  30. if (anker == nullptr)
  31. return "Leere Liste.";
  32. else
  33. {
  34. resultat += "[ ";
  35. TListenKnoten* ptr = anker;
  36. do
  37. {
  38. resultat += std::to_string(ptr->data);
  39. if (ptr->next != nullptr) resultat += " , ";
  40. else resultat += " ";
  41. ptr = ptr->next;
  42. } while (ptr != nullptr);
  43. resultat += "]";
  44. }
  45. return resultat;
  46. }
  47.  
  48. void liste_ausgeben(TListenKnoten* anker)
  49. {
  50. cout << liste_als_string(anker) << endl;
  51. }
  52.  
  53. void liste_ausgeben_rueckwaerts(TListenKnoten* anker)
  54. {
  55. if (anker == nullptr)
  56. {
  57. cout << "Leere Liste" << endl;
  58. }
  59. else
  60. {
  61. /// greifen auf das letzte Block
  62. TListenKnoten* ptr = anker;
  63. do
  64. {
  65. if (ptr->next != nullptr)
  66. {
  67. ptr = ptr->next;
  68. }
  69. } while (ptr->next != nullptr);
  70.  
  71. cout << "[ ";
  72. do
  73. {
  74. cout << ptr->data;
  75. if (ptr->prev != nullptr)
  76. {
  77. cout << " , ";
  78. }
  79. else
  80. {
  81. cout << " ";
  82. }
  83. ptr = ptr->prev;
  84. } while (ptr != nullptr);
  85.  
  86. cout << "]" << endl;
  87. }
  88. }
  89.  
  90. void in_liste_einfuegen(TListenKnoten*& anker, int wert_neu, int vor_wert)
  91. {
  92. TListenKnoten* neuerEintrag = new TListenKnoten;
  93. TListenKnoten* zweiDavor = nullptr;
  94.  
  95. neuerEintrag->data = wert_neu;
  96. neuerEintrag->next = nullptr;
  97. neuerEintrag->prev = nullptr;
  98.  
  99. if (anker == nullptr)
  100. {
  101. anker = neuerEintrag;
  102. }
  103. else if (anker->data == vor_wert)
  104. {
  105. anker->prev = neuerEintrag;
  106. neuerEintrag->next = anker;
  107. anker = neuerEintrag;
  108. }
  109. else ///durch die Liste laufen lassen
  110. {
  111. TListenKnoten* ptr = anker;
  112. int schonErsetz = 0;
  113. while (ptr->next != nullptr)
  114. {
  115. if (ptr->data == vor_wert)
  116. {
  117. zweiDavor = ptr->prev;
  118. neuerEintrag->prev = zweiDavor;
  119. neuerEintrag->next = ptr;
  120. ptr->prev = neuerEintrag;
  121. zweiDavor->next = neuerEintrag;
  122. schonErsetz++;
  123. break;
  124. }
  125. ptr = ptr->next;
  126. }
  127.  
  128. if (ptr->next == nullptr && ptr->data == vor_wert) // fuer das letzte Block
  129. {
  130. zweiDavor = ptr->prev;
  131. neuerEintrag->prev = zweiDavor;
  132. neuerEintrag->next = ptr;
  133. ptr->prev = neuerEintrag;
  134. zweiDavor->next = neuerEintrag;
  135. schonErsetz++;
  136. }
  137.  
  138. if (ptr->next == nullptr && schonErsetz == 0)
  139. {
  140. ptr->next = neuerEintrag;
  141. neuerEintrag->prev = ptr;
  142. }
  143. }
  144. }
  145.  
  146. void aus_liste_loeschen(TListenKnoten*& anker, int wert)
  147. {
  148. TListenKnoten* bridge = nullptr;
  149. if (anker == nullptr)
  150. {
  151.  
  152. }
  153. else if (anker->data == wert)
  154. {
  155. bridge = anker;
  156. anker = anker->next;
  157. delete bridge;
  158. }
  159. else
  160. {
  161. TListenKnoten* ptr = anker;
  162. TListenKnoten* davor = nullptr;
  163. TListenKnoten* danach = nullptr;
  164.  
  165. while (ptr->next != nullptr)
  166. {
  167. if (ptr->data == wert)
  168. {
  169. davor = ptr->prev;
  170. danach = ptr->next;
  171. danach->prev = davor;
  172. davor->next = danach;
  173. delete ptr;
  174. ptr = nullptr;
  175. break;
  176. }
  177. ptr = ptr->next;
  178. }
  179. }
  180. }
  181.  
  182. void liste_loeschen(TListenKnoten*& anker)
  183. {
  184. TListenKnoten* ptr = anker;
  185.  
  186. if (anker == nullptr)
  187. {
  188.  
  189. }
  190. else
  191. {
  192. while (ptr->next != nullptr)
  193. {
  194. ptr = ptr->next;
  195. }
  196.  
  197. while (anker != nullptr)
  198. {
  199. if (ptr->prev != nullptr)
  200. {
  201. if (ptr->prev == anker)
  202. {
  203. anker->next = nullptr;
  204. }
  205. TListenKnoten* wirdgeloescht = nullptr;
  206. wirdgeloescht = ptr;
  207. ptr = ptr->prev;
  208. delete wirdgeloescht;
  209. }
  210. else
  211. {
  212. anker = nullptr;
  213. delete ptr;
  214. ptr = nullptr;
  215. }
  216. }
  217. }
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement