Advertisement
apfel2kuchen

Doppelt Verkettete Liste Sortieren

Feb 12th, 2015
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.54 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. Feldgrosse : integer;
  13. AnfangsZeiger,
  14. pZeiger : tRefliste;
  15.  
  16.  
  17. procedure Sortieren (var ioRefAnfang : tRefliste);
  18. var
  19. Backup,
  20. Zeiger,
  21. Durchlaufen : tRefliste;
  22.  
  23. begin
  24. Zeiger := ioRefAnfang;
  25. while (Zeiger^.Next <> NIL) do
  26. begin
  27. if Zeiger^.Info <= Zeiger^.Next^.info then
  28. begin
  29. Zeiger := Zeiger^.Next;
  30. end {Das nächste Element ist kleiner, somit muss nicht umgehangen werden}
  31. else
  32. begin
  33. if Zeiger^.Info > Zeiger^.Next^.Info then
  34. begin
  35. Backup := Zeiger^.Next;
  36. if Backup^.info < ioRefAnfang^.Info then
  37. begin
  38. Zeiger^.Next := Backup^.Next;
  39. Backup^.Next := ioRefAnfang;
  40. ioRefAnfang := Backup;
  41. ioRefAnfang^.Prev := NIL;
  42. if Zeiger^.Next <> NIL then
  43. Zeiger^.Next^.Prev := Zeiger;
  44. ioRefAnfang^.Next^.Prev := ioRefAnfang;
  45. end {AM Anfang Einfüg}
  46. else
  47. begin
  48. Durchlaufen := ioRefAnfang;
  49. while (Durchlaufen^.Next <> Backup) and (Durchlaufen^.Next^.Info < Backup^.Info) do
  50. begin
  51. Durchlaufen := Durchlaufen^.Next;
  52. end;
  53. Backup^.Prev := Durchlaufen;
  54. Durchlaufen^.Next^.Prev := Backup;
  55. Durchlaufen^.Next^.Next := Backup^.Next;
  56. Backup^.Next := Durchlaufen^.Next;
  57. Durchlaufen^.Next := Backup;
  58. end; {Durchlaufen}
  59. end;
  60. end; {Element muss umgehangen werden }
  61. end; {While\}
  62. end;
  63. begin
  64. Anfangszeiger := NIL;
  65. Write ('Wie Lang soll die Liste sei: ');
  66. readln (Feldgrosse);
  67. for i := 1 to Feldgrosse do
  68. begin
  69. Write ('Info Wert: ');
  70. readln (eWert);
  71. new (pZeiger);
  72. pZeiger^.Info := eWert;
  73. pZeiger^.Next := Anfangszeiger;
  74. pZeiger^.Prev := NIL;
  75. if Anfangszeiger <> NIL then
  76. Anfangszeiger^.prev := pZeiger;
  77. Anfangszeiger := pZeiger;
  78. end;
  79.  
  80. Sortieren (AnfangsZeiger);
  81.  
  82. pZeiger := Anfangszeiger;
  83. while (pZeiger^.Next <> NIl) do
  84. begin
  85. writeln (pZeiger^.Next^.info, ' Hat den Vorgänger -> ', pZeiger^.next^.Prev^.info);
  86. pZeiger := pZeiger^.Next;
  87. end;
  88.  
  89. pZeiger := Anfangszeiger;
  90. while (pZeiger <> NIl) do
  91. begin
  92. writeln (pZeiger^.Info);
  93. pZeiger := pZeiger^.Next;
  94. end;
  95. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement