Advertisement
Manyu99

Untitled

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