Advertisement
pseudocreator

SPA1 lista(obrni osnovna + naprednija)

Apr 8th, 2014
359
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MODULE liste;
  2. FROM InOut IMPORT WriteString, WriteLn, ReadInt, WriteInt;
  3. FROM Storage IMPORT ALLOCATE, DEALLOCATE;
  4.  
  5. TYPE
  6.     pok = POINTER TO Slog;
  7.     Slog = RECORD
  8.               kinf : INTEGER;
  9.               veza : pok
  10.            END;
  11.  
  12.     ProcTip = PROCEDURE (VAR pok,INTEGER);
  13.     Obrtanje = PROCEDURE (VAR pok);
  14.  
  15. VAR
  16.    lista: pok;
  17.    odabir : INTEGER;
  18.  
  19. PROCEDURE stampaj(VAR lista: pok); FORWARD;
  20. PROCEDURE unisti(VAR lista: pok); FORWARD;
  21.  
  22. PROCEDURE obrnibasic(VAR lista: pok); FORWARD;
  23. PROCEDURE obrniadvanced(VAR lista: pok); FORWARD;
  24.  
  25. PROCEDURE dodajpocetak(VAR lista: pok;int: INTEGER);
  26. VAR
  27.    temp : pok;
  28. BEGIN
  29.      NEW(temp);
  30.      temp^.kinf := int;
  31.      temp^.veza := lista;
  32.      lista := temp
  33. END dodajpocetak;
  34.  
  35. PROCEDURE dodajkraj(VAR lista: pok;int: INTEGER);
  36. VAR
  37.    temp, tekuci : pok;
  38. BEGIN
  39.      NEW(temp);
  40.      temp^.kinf := int;
  41.      temp^.veza := NIL;
  42.      IF lista = NIL THEN
  43.        lista := temp
  44.      ELSE
  45.          tekuci := lista;
  46.          WHILE tekuci^.veza <> NIL DO
  47.               tekuci := tekuci^.veza
  48.          END;
  49.          tekuci^.veza := temp
  50.      END
  51. END dodajkraj;
  52.  
  53. PROCEDURE ucitaj(VAR lista: pok;p: ProcTip);
  54. VAR
  55.    i, n , int : INTEGER;
  56. BEGIN
  57.      WriteString('Unesite n: ');
  58.      ReadInt(n);
  59.      FOR i := 1 TO n DO
  60.         ReadInt(int);
  61.         p(lista,int);
  62.         WriteLn
  63.      END;
  64.      WriteLn;
  65.      WriteString('Stampanje liste: ');
  66.      WriteLn;
  67.      stampaj(lista);
  68.      WriteLn;
  69. END ucitaj;
  70.  
  71. PROCEDURE stampaj(VAR lista: pok);
  72. VAR
  73.    temp : pok;
  74. BEGIN
  75.      temp := lista;
  76.      WHILE temp <> NIL DO
  77.           WriteInt(temp^.kinf,0);
  78.           WriteLn;
  79.           temp := temp^.veza
  80.      END;
  81. END stampaj;
  82.  
  83. PROCEDURE unisti(VAR lista: pok);
  84. VAR
  85.    temp : pok;
  86. BEGIN
  87.      temp := lista;
  88.      WHILE lista <> NIL DO
  89.           DISPOSE(temp);
  90.           lista := lista^.veza;
  91.           temp := lista
  92.      END
  93. END unisti;
  94.  
  95. PROCEDURE demonstrirajobrni(VAR lista: pok;obrni: Obrtanje);
  96. BEGIN
  97.      WriteString('Pre obrtanja!');
  98.       WriteLn;
  99.        stampaj(lista);
  100.         WriteLn;
  101.      WriteString('Posle obrtanja! ');
  102.       WriteLn;
  103.        obrni(lista);
  104.         stampaj(lista);
  105. END demonstrirajobrni;
  106.  
  107. PROCEDURE obrnibasic(VAR lista:pok);
  108. VAR
  109.  temp,nova,pred:pok;
  110.  
  111. BEGIN
  112.      nova := NIL;
  113.      temp := lista;
  114.      pred := NIL;
  115.      WHILE temp # NIL DO
  116.           dodajpocetak(nova,temp^.kinf);
  117.           pred := temp;
  118.           temp := temp^.veza;
  119.           DISPOSE(pred);
  120.      END;
  121.  lista := nova;
  122. END obrnibasic;
  123.  
  124. PROCEDURE obrniadvanced(VAR lista: pok);
  125. VAR
  126.         temp,tekuci : pok;
  127. BEGIN
  128.         tekuci := lista^.veza;
  129.         lista^.veza := NIL;
  130.         WHILE tekuci # NIL DO
  131.                 temp := tekuci^.veza;
  132.                 tekuci^.veza := lista;
  133.                 lista := tekuci;
  134.                 tekuci := temp
  135.         END
  136. END obrniadvanced;
  137.  
  138.  
  139.  
  140. BEGIN
  141.      lista := NIL;
  142.      WriteString('Dodaj pocetak ili dodaj kraj, 1/2: ');
  143.      ReadInt(odabir); WriteLn;
  144.      IF odabir = 1 THEN
  145.        ucitaj(lista,dodajpocetak);
  146.      ELSIF odabir = 2 THEN
  147.           ucitaj(lista,dodajkraj);
  148.      ELSE
  149.          WriteString('Pogresan unos! ')
  150.      END;
  151.      odabir := 0;
  152.      WriteLn; WriteString('Uosnovna ili unapredjena procedura, 1/2: ');
  153.      ReadInt(odabir); WriteLn;
  154.      IF odabir = 1 THEN
  155.        demonstrirajobrni(lista,obrnibasic)
  156.      ELSIF odabir = 2 THEN
  157.           demonstrirajobrni(lista,obrniadvanced)
  158.      ELSE
  159.          WriteString('Pogresan unos!')
  160.      END;
  161.      unisti(lista)
  162. END liste.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement