Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project2;
- {$APPTYPE CONSOLE}
- type
- Info=record
- name:string;
- surname:string;
- end;
- ptr=^Item;
- Item=record
- inf:info;
- next:ptr;
- end;
- var
- head: ptr; // вершина списку
- newptr: ptr; // покажчик на елемент, що вводиться
- current: ptr; // допоміжний покажчик
- previous: ptr; // попередній покажчик
- ch: char; // код дії над елементом списку
- str: string; // значення елемента, що вводиться
- flag: boolean; // ознака успішності пошуку
- // процедура створення одноелементного списку
- procedure CreateFirstItem;
- begin
- head:=newptr; // переміщення на 1-й елемент
- head^.next:=nil; // на наступний елемент
- end;
- // процедура вставлення елемента на початок списку
- procedure InsertBeginning;
- begin
- newptr^.next:=head; // зв'язка з вершиною
- head:=newptr; // переміщення на вершинку елемента, що додається
- end;
- // search
- procedure SearchPlaceInsert;
- begin
- current:=head; // поточний покажчик
- repeat
- previous:=current; // покажчик на попередній елемент
- current:=current^.next; // покажчик на наступний елемент
- if current=nil // якщо кінець списку
- then flag:=true // то ознака закінчення пошуку
- else flag:=current^.inf.surname>=str; // інакше ознака продовження пошуку
- until flag;
- end;
- // vstavka v middle
- procedure InsertIntoMiddle;
- begin
- previous^.next:=newptr; // зв'язка нового і попереднього елементів
- newptr^.next:=current; // зв'язок нового і наступного
- end;
- // dodavannya do spisku
- procedure Insert;
- begin
- write('input element: '); readln(str); // введення елементу
- new(newptr); // виділити пам'ять
- newptr^.inf.surname:=str; // занести значення в пам'ять
- if head=nil // якщо список порожній
- then CreateFirstItem // інакше створити новий
- else
- if str<=head^.inf.surname // якшо значення нового більше за попередній
- then InsertBeginning // інакше вставити на початок
- else
- begin
- SearchPlaceInsert; // пошук
- InsertIntoMiddle; // вставка в середину
- end;
- end;
- // vidalennya pershogo
- procedure DelFirst;
- begin
- head:=current^.next; // вершину перемістити на наступний
- dispose(current); // звільнити память
- end;
- // poshuk elementa dlya vidalennya
- function SearchPlaceDelete: boolean;
- begin
- repeat
- previous:=current; // переміщення покажчика від попер. до поточного
- current:=current^.next; // не буде знайдено потрібний елем. або кінець списку
- until (current^.inf.surname=str) or (current^.next=nil); //
- SearchPlaceDelete:=current^.inf.surname=str;
- end;
- // vidalennya seredynu
- procedure DelMiddle;
- begin
- previous^.next:=current^.next;
- dispose(current); // звільнити память
- end;
- // procedura vidalenna & massive
- procedure Delete;
- begin
- if head=nil then // якщо список порожній, ввести повідомлення
- begin
- writeln('List is empty. Press ENTER ...');
- readln;
- end
- else
- begin
- write('input value: '); readln(str); // ввести слово, що видаляється
- current:=head; // покажчик на початок списку
- if current^.inf.surname=str // якщо шуканий елемент є першим
- then DelFirst // то видалити перший елемент
- else
- if SearchPlaceDelete //
- then DelMiddle //
- else
- begin
- writeln(str,' not found in list. Press ENTER ...');
- readln;
- end;
- end;
- end;
- procedure OutList;
- begin
- current:=head;
- if current=nil
- then writeln('List is empty')
- else
- begin
- writeln('output list: ');
- writeln;
- repeat
- writeln(current^.inf.surname,' ',current^.inf.name);
- current:=current^.next;
- until current=nil;
- end;
- writeln;
- end;
- begin
- head:=nil;
- repeat
- OutList;
- writeln;
- write('Enter your command: 1-input 2-delete 3-quit ');
- readln(ch);
- case ch of
- '1': Insert;
- '2': Delete;
- end;
- until ch='3';
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement