Advertisement
apfel2kuchen

Doppelt Verkettete Liste Sortieren + Sortiert einfugen

Feb 12th, 2015
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.64 KB | None | 0 0
  1. program ListeSortieren (input,output);
  2. type
  3. tRefliste = ^tliste;
  4. tListe = record
  5. Info : Integer;
  6. Next : tRefliste;
  7. Prev : tRefliste;
  8. end;
  9. var
  10. i,
  11. eWert,
  12. EinfugWert,
  13. Feldgrosse : integer;
  14. AnfangsZeiger,
  15. pZeiger : tRefliste;
  16.  
  17.  
  18. procedure Einfugen (VAR ioRefAnfang : tRefListe; inEingabeWert : integer);
  19. var
  20. Zeiger,
  21. EinfugElement : tRefListe;
  22. begin
  23. Zeiger := ioRefAnfang;
  24. new (EinfugElement);
  25. EinfugElement^.Info := inEingabeWert;
  26.  
  27. if ioRefAnfang^.info > EinfugElement^.Info then
  28. begin
  29. EinfugElement^.Next := ioRefAnfang;
  30. ioRefAnfang^.Prev := EinfugElement;
  31. ioRefAnfang := EinfugElement;
  32. ioRefAnfang^.Prev := NIL;
  33. end
  34. else
  35. begin
  36. While (Zeiger^.Next <> NIL) and (Zeiger^.Next^.Info < EinfugElement^.info) do
  37. begin
  38. Zeiger := Zeiger^.Next;
  39. end; {WHILE}
  40. if Zeiger^.Next = NIL then
  41. begin
  42. Zeiger^.Next := EinfugElement;
  43. EinfugElement^.Prev := Zeiger;
  44. EinfugElement^.Next := NIL;
  45. end
  46. else
  47. begin
  48. EinfugElement^.Next := Zeiger^.Next;
  49. Zeiger^.Next := EinfugElement;
  50. EinfugElement^.Prev := Zeiger;
  51. EinfugElement^.Next^.Prev := EinfugElement;
  52. end;
  53. end;
  54. end;
  55.  
  56. procedure Sortieren (var ioRefAnfang : tRefliste);
  57. var
  58. Backup,
  59. Zeiger,
  60. Durchlaufen : tRefliste;
  61.  
  62. begin
  63. Zeiger := ioRefAnfang;
  64. while (Zeiger^.Next <> NIL) do
  65. begin
  66. if Zeiger^.Info <= Zeiger^.Next^.info then
  67. begin
  68. Zeiger := Zeiger^.Next;
  69. end {Das nächste Element ist kleiner, somit muss nicht umgehangen werden}
  70. else
  71. begin
  72. if Zeiger^.Info > Zeiger^.Next^.Info then
  73. begin
  74. Backup := Zeiger^.Next;
  75. if Backup^.info < ioRefAnfang^.Info then
  76. begin
  77. Zeiger^.Next := Backup^.Next;
  78. Backup^.Next := ioRefAnfang;
  79. ioRefAnfang := Backup;
  80. ioRefAnfang^.Prev := NIL;
  81. if Zeiger^.Next <> NIL then
  82. Zeiger^.Next^.Prev := Zeiger;
  83. ioRefAnfang^.Next^.Prev := ioRefAnfang;
  84. end {AM Anfang Einfüg}
  85. else
  86. begin
  87. Durchlaufen := ioRefAnfang;
  88. while (Durchlaufen^.Next <> Backup) and (Durchlaufen^.Next^.Info < Backup^.Info) do
  89. begin
  90. Durchlaufen := Durchlaufen^.Next;
  91. end;
  92. Backup^.Prev := Durchlaufen;
  93. Durchlaufen^.Next^.Prev := Backup;
  94. Durchlaufen^.Next^.Next := Backup^.Next;
  95. Backup^.Next := Durchlaufen^.Next;
  96. Durchlaufen^.Next := Backup;
  97. end; {Durchlaufen}
  98. end;
  99. end; {Element muss umgehangen werden }
  100. end; {While\}
  101. end;
  102. begin
  103. Anfangszeiger := NIL;
  104. Write ('Wie Lang soll die Liste sei: ');
  105. readln (Feldgrosse);
  106. for i := 1 to Feldgrosse do
  107. begin
  108. Write ('Info Wert: ');
  109. readln (eWert);
  110. new (pZeiger);
  111. pZeiger^.Info := eWert;
  112. pZeiger^.Next := Anfangszeiger;
  113. pZeiger^.Prev := NIL;
  114. if Anfangszeiger <> NIL then
  115. Anfangszeiger^.prev := pZeiger;
  116. Anfangszeiger := pZeiger;
  117. end;
  118.  
  119. Sortieren (AnfangsZeiger);
  120. EinfugWert := 14;
  121. Einfugen (Anfangszeiger, EinfugWert);
  122.  
  123. pZeiger := Anfangszeiger;
  124. while (pZeiger^.Next <> NIl) do
  125. begin
  126. writeln (pZeiger^.Next^.info, ' Hat den Vorgänger -> ', pZeiger^.next^.Prev^.info);
  127. pZeiger := pZeiger^.Next;
  128. end;
  129.  
  130. pZeiger := Anfangszeiger;
  131. while (pZeiger <> NIl) do
  132. begin
  133. writeln (pZeiger^.Info);
  134. pZeiger := pZeiger^.Next;
  135. end;
  136. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement