Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1. #include <iostream>
  2. #include<string>
  3. using namespace std;
  4. struct TListenKnoten
  5. {
  6. int data;
  7. TListenKnoten *next;
  8. TListenKnoten *prev;
  9. };
  10. void hinten_anfuegen(TListenKnoten *&anker, const int wert)
  11. {
  12. TListenKnoten *neuer_eintrag = new TListenKnoten;
  13. neuer_eintrag->data = wert;
  14. neuer_eintrag->next = nullptr;
  15. neuer_eintrag->prev = nullptr;
  16. if (anker == nullptr) {
  17. anker = neuer_eintrag;
  18. }
  19. else
  20. {
  21. TListenKnoten *ptr = anker;
  22. while (ptr->next != nullptr)
  23. {
  24. ptr = ptr->next;
  25. }
  26. ptr->next = neuer_eintrag;
  27. ptr->next->prev = ptr;
  28. }
  29. }
  30. string liste_als_string(TListenKnoten * anker)
  31. {
  32. string resultat = "";
  33. if (anker == nullptr)
  34. return "Leere Liste.";
  35. else
  36. {
  37. resultat += "[ ";
  38. TListenKnoten *ptr = anker;
  39. do
  40. {
  41. resultat += std::to_string(ptr->data);
  42. if (ptr->next != nullptr) resultat += " , ";
  43. else resultat += " ";
  44. ptr = ptr->next;
  45. } while (ptr != nullptr);
  46. resultat += "]";
  47. }
  48. return resultat;
  49. }
  50. void liste_ausgeben(TListenKnoten * anker)
  51. {
  52. cout << liste_als_string(anker) << endl;
  53. }
  54. string liste_als_string_rueckwaerts(TListenKnoten * anker)
  55. {
  56. string resultat = "";
  57. if (anker == nullptr)
  58. return "Leere Liste.";
  59. else
  60. {
  61. resultat += "[ ";
  62. TListenKnoten *ptr = anker;
  63. while (ptr->next != nullptr)
  64. {
  65. ptr = ptr->next;
  66. }
  67. do
  68. {
  69. resultat += std::to_string(ptr->data);
  70. if (ptr->prev != nullptr)
  71. {
  72. resultat += " , ";
  73. }
  74. else
  75. {
  76. resultat += " ";
  77. }
  78. ptr = ptr->prev;
  79. } while (ptr != nullptr);
  80. resultat += "]";
  81. }
  82. return resultat;
  83. }
  84. void liste_ausgeben_rueckwaerts(TListenKnoten * anker)
  85. {
  86. cout << liste_als_string_rueckwaerts(anker) << endl;
  87. }
  88. bool existiert_in_der_liste(TListenKnoten* &anker, int gesucht) {
  89. if (anker == nullptr) {
  90. return false;
  91. }
  92. TListenKnoten *ptr = anker;
  93. //while (ptr->next != nullptr)
  94. while (ptr != nullptr)
  95. {
  96. //if (ptr->next->data == gesucht)
  97. if (ptr->data == gesucht)
  98. {
  99. return true;
  100. }
  101. ptr = ptr->next;
  102. }
  103. return false;
  104. }
  105. void in_liste_einfuegen(TListenKnoten* &anker, int wert_neu, int vor_wert)
  106. {
  107. TListenKnoten *neuer_eintrag = new TListenKnoten;
  108. neuer_eintrag->data = wert_neu;
  109. neuer_eintrag->next = nullptr;
  110. neuer_eintrag->prev = nullptr;
  111.  
  112. if (existiert_in_der_liste(anker, vor_wert))
  113. {
  114. // cout << "if ??????" << endl;
  115. if (anker->data == vor_wert)
  116. {
  117. neuer_eintrag->next = anker;
  118. anker->prev = neuer_eintrag;
  119. anker = neuer_eintrag;
  120. }
  121. else
  122. {
  123. TListenKnoten *ptr = anker;
  124. TListenKnoten *parent = anker;
  125. while (ptr->data != vor_wert)
  126. {
  127. parent = ptr;
  128. ptr = ptr->next;
  129. }
  130. parent->next = neuer_eintrag;
  131. neuer_eintrag->next = ptr;
  132. neuer_eintrag->prev = parent;
  133. ptr->prev = neuer_eintrag;
  134. }
  135. }
  136.  
  137. else
  138. {
  139. if (anker == nullptr) {
  140. anker = neuer_eintrag;
  141. }
  142. else
  143. {
  144. TListenKnoten *ptr = anker;
  145. while (ptr->next != nullptr)
  146. {
  147. ptr = ptr->next;
  148. }
  149. ptr->next = neuer_eintrag;
  150. ptr->next->prev = ptr;
  151. }
  152. }
  153. }
  154. void aus_liste_loeschen(TListenKnoten* &anker, int wert)
  155. {
  156. // ersten Knoten mit Wert löschen
  157. // Falls einziges Element, also Liste danach leer, anker auf nullptr setzen
  158. // Bei Duplikaten immer nur den ersten Knoten löschen
  159. // auch bei einer leeren Liste aufrufbar, ergo wenn der Wert nicht vorkommt
  160. // bei letzterem soll dann nix passieren
  161. // Hinweis: Was wenn der erste Knoten gelöscht werden soll?
  162.  
  163. if (anker == nullptr)
  164. {
  165. return;
  166. }
  167. else
  168. {
  169. TListenKnoten *ptr = anker;
  170. TListenKnoten *parent = ptr;
  171. while (ptr->data != wert)
  172. {
  173. parent = ptr;
  174. ptr = ptr->next;
  175. }
  176.  
  177. parent->next = ptr->next;
  178. ptr->next->prev = parent;
  179. delete ptr;
  180. }
  181. }
  182. void liste_loeschen(TListenKnoten* &anker)
  183. {
  184. if (anker == nullptr)
  185. {
  186. return;
  187. }
  188. else
  189. {
  190. TListenKnoten *ptr = anker;
  191. TListenKnoten *parent = ptr;
  192. while (ptr->next != nullptr)
  193. {
  194. parent = ptr;
  195. ptr = ptr->next;
  196. }
  197.  
  198. while (ptr != anker)
  199. {
  200. parent = ptr;
  201. ptr = parent->prev;
  202. delete parent;
  203. parent = ptr;
  204. }
  205. anker = nullptr;
  206. }
  207. }
  208.  
  209. int main()
  210. {
  211. const int laenge = 10;
  212. TListenKnoten *anker = nullptr;
  213. liste_ausgeben(anker);
  214. liste_ausgeben_rueckwaerts(anker);
  215. liste_loeschen(anker);
  216. hinten_anfuegen(anker, 77);
  217. hinten_anfuegen(anker, 88);
  218. hinten_anfuegen(anker, 99);
  219. liste_ausgeben(anker);
  220. liste_ausgeben_rueckwaerts(anker);
  221. liste_loeschen(anker); // war: aus_liste_loeschen(anker, 99);
  222. liste_ausgeben(anker);
  223. liste_ausgeben_rueckwaerts(anker);
  224. for (int i = 0; i < laenge; i++)
  225. in_liste_einfuegen(anker, i*i, 9999);
  226. liste_ausgeben(anker);
  227. liste_ausgeben_rueckwaerts(anker);
  228. in_liste_einfuegen(anker, -1, 0);
  229. in_liste_einfuegen(anker, 24, 25);
  230. in_liste_einfuegen(anker, 80, 81);
  231. in_liste_einfuegen(anker, 99, 9999);
  232. liste_ausgeben(anker);
  233. liste_ausgeben_rueckwaerts(anker);
  234. aus_liste_loeschen(anker, 24);
  235. aus_liste_loeschen(anker, 80);
  236. liste_ausgeben(anker);
  237. liste_ausgeben_rueckwaerts(anker);
  238. liste_loeschen(anker);
  239. liste_ausgeben(anker);
  240. liste_ausgeben_rueckwaerts(anker);
  241. system("PAUSE");
  242. return 0;
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement