Advertisement
Akaleaf

ListOfLists

Dec 17th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 6.78 KB | None | 0 0
  1. program ListOfLists2;
  2.  
  3. uses
  4.   crt;
  5.  
  6. type
  7.   pSubListItem = ^TSubListItem;
  8.   TSubListItem = record
  9.     info : integer;
  10.     next : pSubListItem;
  11.   end;
  12.   pSubList = ^TSubList;
  13.   TSubList = record
  14.     pFirst : pSubListItem;
  15.     pNext : pSubList;
  16.     number : integer;
  17.   end;
  18.  
  19. var
  20.   mList, pTempMain : pSubList;
  21.   pTemp : pSubListItem;
  22.   countOfSubLists, i, ii, element : integer;
  23.   answer, answer2, answer3 : byte;
  24.  
  25. procedure whileOutput(pTempL : pSubListItem);
  26. begin
  27.   while (pTempL <> nil) do
  28.   begin
  29.     write(pTempL^.info);
  30.     pTempL := pTempL^.next;
  31.     if (pTempL = nil) then break;
  32.     write(' ');
  33.   end;
  34. end;
  35.  
  36. procedure correctList;
  37. begin
  38.   pTempMain := mList;
  39.   i := 1;
  40.   while (pTempMain <> nil) do
  41.   begin
  42.     pTempMain^.number := i;
  43.     inc(i);
  44.     pTempMain := pTempMain^.pNext;
  45.   end;
  46. end;
  47.  
  48. procedure output;
  49. var
  50.   pTemp : pSubListItem;
  51.   pTempMain : pSubList;
  52. begin
  53.   textBackground(10);
  54.   write('  ');
  55.   normVideo;
  56.   writeln('Current list:');
  57.   pTempMain := mList;
  58.   while (pTempMain <> nil) do
  59.   begin
  60.     pTemp := pTempMain^.pFirst;
  61.     write(pTempMain^.number, ' sublist: [');
  62.     while (pTemp <> nil) do
  63.     begin
  64.       write(pTemp^.info);
  65.       pTemp := pTemp^.next;  
  66.       if (pTemp = nil) then
  67.       begin
  68.         break;
  69.       end;
  70.       write(' ');
  71.     end;
  72.     writeln(']');
  73.     pTempMain := pTempMain^.pNext;
  74.   end;
  75. end;
  76.  
  77. procedure outputSubList(subListNumber : integer);
  78. var
  79.   pTempMain : pSubList;
  80.   pTemp : pSubListItem;
  81. begin                                              // [22 33]
  82.   pTempMain := mList;
  83.   while (pTempMain^.number <> subListNumber) do
  84.   begin
  85.     pTempMain := pTempMain^.pNext;
  86.   end;
  87.   pTemp := pTempMain^.pFirst;
  88.   write(pTempMain^.number, ' sublist: [');
  89.   while (pTemp <> nil) do
  90.   begin
  91.     write(pTemp^.info);
  92.     pTemp := pTemp^.next;
  93.     if (pTemp = nil) then break;
  94.     write(' ');
  95.   end;
  96.   writeln(']');
  97. end;
  98.  
  99. function back(ans : integer) : boolean;
  100. begin
  101.   if (ans = 11) then back := true else back := false;
  102. end;
  103.  
  104. //procedure addAfter(ans, element : integer);
  105. //var
  106. //  pTempPrev : pSubListItem;
  107. //  afterElement : integer;
  108. //begin
  109. //  new(pTemp);
  110. //  pTemp^.info := element;
  111. //  if (mArray[ans]^.pFirst = nil) then
  112. //  begin
  113. //    pTemp^.next := nil;
  114. //    mArray[ans]^.pFirst := pTemp;
  115. //  end else                // ans sublist: [22 33 11 55]
  116. //  begin
  117. //    write('  Enter the element after which add new element: ');
  118. //    readln(afterElement);
  119. //    pTempPrev := mArray[ans]^.pFirst;
  120. //    while (pTempPrev^.info <> afterElement) do
  121. //    begin
  122. //      pTempPrev := pTempPrev^.next;
  123. //    end;
  124. //    if (pTempPrev^.next <> nil) then pTemp^.next := pTempPrev^.next;
  125. //    pTempPrev^.next := pTemp;
  126. //  end;
  127. //end;
  128.  
  129. procedure createSubList;
  130. var
  131.   number : integer;
  132.   pTempMain, pTemp : pSubList;
  133. begin
  134.   new(pTemp);
  135.   pTempMain := mList;
  136.   output;
  137.   write('  After which sublist create new sublist(number of sublist)?: ');
  138.   textColor(10);
  139.   readln(number);
  140.   normVideo;
  141.   pTemp^.number := number;
  142.   pTemp^.number += 1;                                    // 1 2 3 4
  143.   while (pTempMain^.number <> number) do                 // 1
  144.   begin
  145.     pTempMain := pTempMain^.pNext;
  146.   end;
  147.   pTemp^.pNext := pTempMain^.pNext;
  148.   pTempMain^.pNext := pTemp;
  149.   pTemp^.pFirst := nil;
  150.   correctList;
  151. end;
  152.  
  153.  
  154. procedure addElementToSublist(ans : integer);
  155. var
  156.   oldElement : integer;
  157.   pTempMain : pSubList;
  158.   pTemp, pTempHelp : pSubListItem;
  159. begin
  160.   new(pTemp);
  161.   write('  Enter the new element: ');
  162.   textColor(10);
  163.   readln(pTemp^.info);
  164.   normVideo;
  165.   pTempMain := mList;
  166.   while (pTempMain^.number <> ans) do
  167.   begin
  168.     pTempMain := pTempMain^.pNext;
  169.   end;
  170.   if (pTempMain^.pFirst = nil) then pTempMain^.pFirst := pTemp else
  171.   begin
  172.     pTempHelp := pTempMain^.pFirst;
  173.     if (pTempHelp^.next = nil) then
  174.     begin
  175.       pTempHelp^.next := pTemp;
  176.     end else
  177.     begin
  178.       write('  After which element add new element?: ');
  179.       textColor(10);
  180.       readln(oldElement);
  181.       normVideo;
  182.       while (pTempHelp^.info <> oldElement) do
  183.       begin
  184.         pTempHelp := pTempHelp^.next;
  185.       end;
  186.       pTemp^.next := pTempHelp^.next;
  187.       pTempHelp^.next := pTemp;
  188.     end;
  189.   end;
  190. end;
  191.  
  192. procedure disintegration;
  193. var
  194.   pTempMain : pSubList;
  195. begin
  196.   pTempMain := mList;
  197.   while (pTempMain <> nil) do
  198.   begin
  199.     pTempMain^.pFirst := nil;
  200.     pTempMain := pTempMain^.pNext;
  201.   end;
  202. end;
  203.  
  204. procedure remove(ans : integer);
  205. var
  206.   pTemp, pTempHelp : pSubListItem;
  207.   element : integer;
  208.   pTempMain : pSubList;
  209. begin
  210.   write('  Enter the element to remove: ');
  211.   textColor(10);
  212.   readln(element);
  213.   normVideo;
  214.   pTempMain := mList;
  215.   while (pTempMain^.number <> ans) do
  216.   begin
  217.     pTempMain := pTempMain^.pNext;
  218.   end;
  219.   pTemp := pTempMain^.pFirst;
  220.   pTempHelp := pTemp;
  221.   while (pTemp^.info <> element) do
  222.   begin
  223.     pTempHelp := pTemp;
  224.     pTemp := pTemp^.next;                         // [22 33] 55 66 11]
  225.   end;
  226.   pTempHelp^.next := pTemp^.next;
  227.   if (pTemp = pTempMain^.pFirst) then
  228.   begin
  229.     pTempMain^.pFirst := pTempMain^.pFirst^.next;
  230.   end else
  231.   begin
  232.     pTempHelp^.next := pTempHelp^.next^.next;
  233.   end;
  234. end;
  235.  
  236. begin
  237.   new(mList);
  238.   mList^.pFirst := nil;
  239.   mList^.pNext := nil;
  240.   mList^.number := 1;
  241.   repeat
  242.   begin
  243.     writeln('1. Create new sublist');
  244.     writeln('2. Change the exist sublist');
  245.     writeln('3. Disintegration');
  246.     writeln('4. Output');
  247.     writeln('11. Exit');
  248.     textColor(11);
  249.     readln(answer);
  250.     normVideo;
  251.     case answer of
  252.       1:
  253.       begin
  254.         createSubList;
  255.         output;
  256.       end;
  257.       2:
  258.       begin
  259.         repeat
  260.           output;
  261.           write('  Which sublist do you want to change?: ');
  262.           textColor(10);
  263.           readln(answer2);
  264.           normVideo;
  265.           outputSubList(answer2);
  266.           writeln('1. Add elements to sublist');
  267.           writeln('2. Remove elements from sublist');
  268.           writeln('3. Remove sublist');
  269.           writeln('11. Back');
  270.           textColor(11);
  271.           readln(answer3);
  272.           normVideo;
  273.           case answer3 of
  274.             1:
  275.             begin
  276.               addElementToSubList(answer2);
  277.             end;
  278.             2:
  279.             begin
  280.               remove(answer2);
  281.             end;
  282.             3:
  283.             begin
  284.               pTempMain := mList;
  285.               while (pTempMain^.number <> answer2) do
  286.               begin
  287.                 pTempMain := pTempMain^.pNext;
  288.               end;
  289.               pTempMain^.pFirst := nil;
  290.             end;
  291.           end;
  292.         until (back(answer3) or back(answer2));
  293.       end;
  294.       3:
  295.       begin
  296.         disintegration;
  297.       end;
  298.       4:
  299.       begin
  300.         output;
  301.       end;
  302.     end;
  303.   end until back(answer);
  304. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement