Создание двунаправленного динамического списка
Как создать двунаправленный динамический список?
uses crt; type element = record data:real; next,back:pointer; end; var pre,curr,head,temp:^element; n:integer; found:boolean; t:real; label m0,m1,m2,m3,m4; begin head:=nil; m0: clrscr; writeln('1. Добавить элемент'); writeln('2. Удалить элемент'); writeln('3. Вывести все элементы'); writeln('4. Выход'); readln(n); case n of 1:goto m1; 2:goto m2; 3:goto m3; else goto m4; end; {ДОБАВЛЕНИЕ} m1: clrscr; write('Введите число: '); readln(t); new(curr); curr^.data:=t; curr^.next:=head; head^.back:=curr; head:=curr; goto m0; {УДАЛЕНИЕ} m2: clrscr; if head=nil then begin writeln('Список пустой!'); goto m0; end; curr:=head; pre:=nil; found:=false; write('Введите число, которое надо удалить: '); readln(t); while (curr <> nil) and (not found) do begin if curr^.data=t then found:=true else begin pre:=curr; curr:=curr^.next; end; end; if found then begin if pre = nil then begin head:=curr^.next; head^.back:=nil {если удаляемый элемент - головной} end else begin pre^.next:=curr^.next; temp:=curr^.next; temp^.back:=pre; end; dispose(curr); write('Элемент ',t:6:3,' удалён из списка!'); readln; end else begin write('Элемента ',t:6:3,' нет в списке!'); readln; end; goto m0; {ВЫВОД ВСЕГО НА ЭКРАН} m3: clrscr; curr:=head; while curr<>nil do begin writeln(curr^.data:6:3); curr:=curr^.next; end; readln; goto m0; m4: if head<>nil then begin curr:=head; curr:=curr^.next; while curr<>nil do begin head^.next:=curr^.next; dispose(curr); curr:=head^.next; end; dispose(head); end;