Advertisement
Guest User

Untitled

a guest
Oct 20th, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.38 KB | None | 0 0
  1. program Project2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. type
  6.     Info=record
  7.     name:string;
  8.     surname:string;
  9. end;
  10.    ptr=^Item;
  11.    Item=record
  12.    inf:info;
  13.    next:ptr;
  14.    end;
  15.  
  16.  
  17.  
  18. var
  19.     head: ptr;      // вершина списку
  20.     newptr: ptr;    // покажчик на елемент, що вводиться
  21.     current: ptr;   // допоміжний покажчик
  22.     previous: ptr;  // попередній покажчик
  23.     ch: char;       // код дії над елементом списку
  24.     str: string;    // значення елемента, що вводиться
  25.     flag: boolean;  // ознака успішності пошуку
  26.  
  27. // процедура створення одноелементного списку
  28. procedure CreateFirstItem;
  29. begin
  30.     head:=newptr;       // переміщення на 1-й елемент
  31.     head^.next:=nil;   // на наступний елемент
  32. end;
  33.  
  34. // процедура вставлення елемента на початок списку
  35. procedure InsertBeginning;
  36. begin
  37.     newptr^.next:=head;    // зв'язка з вершиною
  38.     head:=newptr;        // переміщення на вершинку елемента, що додається
  39. end;
  40.  
  41. // search
  42. procedure SearchPlaceInsert;
  43. begin
  44.     current:=head;        // поточний покажчик
  45.     repeat
  46.         previous:=current;  //  покажчик на попередній елемент
  47.         current:=current^.next;  // покажчик на наступний елемент
  48.         if current=nil                     // якщо кінець списку
  49.           then flag:=true                    // то ознака закінчення пошуку
  50.         else flag:=current^.inf.surname>=str;  // інакше ознака продовження пошуку
  51.     until flag;
  52. end;
  53.  
  54. // vstavka v middle
  55. procedure InsertIntoMiddle;
  56. begin
  57.     previous^.next:=newptr;       //  зв'язка нового і попереднього елементів
  58.     newptr^.next:=current;        //  зв'язок нового і наступного
  59. end;
  60.  
  61. // dodavannya do spisku
  62. procedure Insert;
  63. begin
  64.     write('input element: '); readln(str); //  введення елементу
  65.     new(newptr);                           //  виділити пам'ять
  66.     newptr^.inf.surname:=str;              //  занести значення в пам'ять
  67.     if head=nil                            //  якщо список порожній
  68.         then CreateFirstItem               //  інакше створити новий
  69.     else
  70.     if str<=head^.inf.surname              //  якшо значення нового більше за попередній
  71.         then InsertBeginning               //    інакше вставити на початок
  72.     else
  73.       begin
  74.         SearchPlaceInsert;              //        пошук
  75.         InsertIntoMiddle;                 //       вставка в середину
  76.       end;
  77. end;
  78.  
  79. // vidalennya pershogo
  80. procedure DelFirst;
  81. begin
  82.     head:=current^.next;           //   вершину перемістити на наступний
  83.     dispose(current);              // звільнити память
  84. end;
  85.  
  86. // poshuk elementa dlya vidalennya
  87. function SearchPlaceDelete: boolean;
  88. begin
  89.     repeat
  90.         previous:=current;           // переміщення покажчика від попер. до поточного
  91.         current:=current^.next;      // не буде знайдено потрібний елем. або кінець списку
  92.     until (current^.inf.surname=str) or (current^.next=nil); //
  93.     SearchPlaceDelete:=current^.inf.surname=str;
  94. end;
  95.  
  96. // vidalennya seredynu
  97. procedure DelMiddle;
  98. begin
  99.     previous^.next:=current^.next;
  100.     dispose(current);                     // звільнити память
  101. end;
  102.  
  103. // procedura vidalenna & massive
  104. procedure Delete;
  105. begin
  106.     if head=nil then                 // якщо список порожній, ввести повідомлення
  107.       begin
  108.         writeln('List is empty. Press ENTER ...');
  109.         readln;
  110.       end
  111.     else
  112.     begin
  113.         write('input value: '); readln(str);  // ввести слово, що видаляється
  114.         current:=head;               // покажчик на початок списку
  115.         if current^.inf.surname=str  // якщо шуканий елемент є першим
  116.           then DelFirst         // то видалити перший елемент
  117.         else
  118.           if SearchPlaceDelete    //
  119.             then DelMiddle          //
  120.           else
  121.             begin
  122.               writeln(str,' not found in list. Press ENTER ...');
  123.               readln;
  124.             end;
  125.     end;
  126. end;
  127.  
  128. procedure OutList;
  129. begin
  130.     current:=head;
  131.     if current=nil
  132.       then writeln('List is empty')
  133.     else
  134.     begin
  135.         writeln('output list: ');
  136.         writeln;
  137.         repeat
  138.             writeln(current^.inf.surname,' ',current^.inf.name);
  139.             current:=current^.next;
  140.         until current=nil;
  141.     end;
  142.     writeln;
  143. end;
  144.  
  145.  
  146. begin
  147.     head:=nil;
  148.     repeat
  149.         OutList;
  150.         writeln;
  151.         write('Enter your command: 1-input 2-delete 3-quit ');
  152.         readln(ch);
  153.  
  154.         case ch of
  155.           '1': Insert;
  156.           '2': Delete;
  157.         end;
  158.     until ch='3';
  159. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement