Добавил:
Hist
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Паскаль (I семестр) / K02-172 / 04 / db
.pas program db;
(*
(c) 2005 Dima Zolotukhin aka 'Zlogic' <zlogic@gmail.com>
Redistributable under GNU GPL license
*)
type
str_message = string[70];
node_pointer = ^node;
node = record
data:integer;
next:node_pointer;
end;
function get_int(message:str_message):integer;
var
response:integer;
begin
write(message,'> ');
readln(response);
get_int:=response;
end;
procedure show_menu;
begin
writeln;
writeln('-------------Њ…Ќћ ‘Џ€‘ЉЂ-------------');
writeln(' 1 „®Ў ўЁвм н«Ґ¬Ґв ў з «® бЇЁбЄ ');
writeln(' 2 „®Ў ўЁвм н«Ґ¬Ґв ў Є®Ґж бЇЁбЄ ');
writeln(' 3 „®Ў ўЁвм н«Ґ¬Ґв Ї®б«Ґ гЄ § ®Ј®');
writeln(' 4 „®Ў ўЁвм н«Ґ¬Ґв ЇҐаҐ¤ гЄ § л¬');
writeln(' 5 “¤ «Ёвм н«Ґ¬Ґв Ё§ з « бЇЁбЄ ');
writeln(' 6 “¤ «Ёвм н«Ґ¬Ґв Ё§ Є®ж бЇЁбЄ ');
writeln(' 7 “¤ «Ёвм н«Ґ¬Ґв Ї® § 票о');
writeln(' 8 “¤ «Ёвм н«Ґ¬Ґв Ї®б«Ґ гЄ § ®Ј®');
writeln(' 9 “¤ «Ёвм н«Ґ¬Ґв ЇҐаҐ¤ гЄ § л¬');
writeln('10 ђ бЇҐз в вм бЇЁб®Є');
writeln('11 Ќ ©вЁ н«Ґ¬Ґв Ї® ҐЈ® § 票о');
writeln('12 Ё«Ё «оЎ п ¤агЈ п жЁда ўл室Ёв Ё§ Їа®Ја ¬¬л.');
end;
procedure print_list(_node_pointer:node_pointer);
begin
if(_node_pointer<>NIL)then
begin
writeln('<< ЌЂ—Ђ‹Ћ ‘Џ€‘ЉЂ >>');
while _node_pointer<>NIL do
begin
write(_node_pointer^.data:4);
_node_pointer:=_node_pointer^.next;
end;
writeln;
writeln('<< ЉЋЌ…– ‘Џ€‘ЉЂ >>');
end
else
writeln('<< ‘Џ€‘ЋЉ Џ“‘’ >>');
end;
procedure add_to_end(var _node_pointer:node_pointer;data_to_add:integer);
var
new_node_pointer:node_pointer;
last_node_pointer:node_pointer;
begin
new(new_node_pointer);{ᮧ¤ Ґ¬ ®ўл© н«Ґ¬Ґв бЇЁбЄ }
new_node_pointer^.next:=NIL;
new_node_pointer^.data:=data_to_add;
last_node_pointer:=_node_pointer;
while(last_node_pointer^.next<>NIL) and (last_node_pointer<>NIL)do{ЁйҐ¬ Ї®б«Ґ¤Ё© н«Ґ¬Ґв}
last_node_pointer:=last_node_pointer^.next;
if(_node_pointer<>NIL)then{Ґб«Ё ¤® нв®Ј® Ўл« Їгбв®© бЇЁб®Є}
last_node_pointer^.next:=new_node_pointer{ЇаЁбў Ёў Ґ¬ Ґ¬г ®ў®Ґ § 票Ґ}
else{Ё зҐ}
_node_pointer:=new_node_pointer;{¤®Ў ў«пҐ¬ ®ўл© н«Ґ¬Ґв}
end;
procedure add_to_start(var _node_pointer:node_pointer;data_to_add:integer);
var
new_node_pointer:node_pointer;
last_node_pointer:node_pointer;
begin
new(new_node_pointer);{ᮧ¤ Ґ¬ ®ўл© н«Ґ¬Ґв бЇЁбЄ }
new_node_pointer^.next:=_node_pointer;
new_node_pointer^.data:=data_to_add;
_node_pointer:=new_node_pointer;{¬ҐпҐ¬ гЄ § ⥫м з «® бЇЁбЄ }
end;
function add_after(var _node_pointer:node_pointer;data_before,data_to_add:integer):boolean;
var
current_node_pointer:node_pointer;
begin
add_after:=false;
current_node_pointer:=_node_pointer;
while (current_node_pointer^.data<>data_before) and (current_node_pointer<>NIL)do{Ї®Є ! и«Ё н«Ґ¬Ґв Ё !Є®Ґж бЇЁбЄ }
begin
current_node_pointer:=current_node_pointer^.next;{ЇҐаҐе®¤Ё¬ Є б«Ґ¤го饬г н«Ґ¬Ґвг}
end;
if current_node_pointer<>NIL then{Ґб«Ё н«-в ©¤Ґ}
begin
add_to_start(current_node_pointer^.next,data_to_add);{¤®Ў ў«пҐ¬ н«-в ў з «® ®ў®Ј® бЇЁбЄ }
add_after:=true;
end;
end;
function add_before(var _node_pointer:node_pointer;data_after,data_to_add:integer):boolean;
var
current_node_pointer:node_pointer;
previous_node_pointer:node_pointer;
begin
add_before:=false;
current_node_pointer:=_node_pointer;
previous_node_pointer:=NIL;
while (current_node_pointer^.data<>data_after) and (current_node_pointer<>NIL)do{Ї®Є ! и«Ё н«Ґ¬Ґв Ё !Є®Ґж бЇЁбЄ }
begin
previous_node_pointer:=current_node_pointer;
current_node_pointer:=current_node_pointer^.next;{ЇҐаҐе®¤Ё¬ Є б«Ґ¤го饬г н«Ґ¬Ґвг}
end;
if current_node_pointer<>NIL then{Ґб«Ё н«-в ©¤Ґ}
begin
if previous_node_pointer<>NIL then{Ґб«Ё нв® ў з «Ґ бЇЁбЄ }
begin
add_to_start(current_node_pointer,data_to_add);{¤®Ў ў«пҐ¬ н«-в ў з «® ®ў®Ј® бЇЁбЄ }
previous_node_pointer^.next:=current_node_pointer;
end
else{Ё зҐ}
add_to_start(_node_pointer,data_to_add);{¤®Ў ў«пҐ¬ н«-в ў з «® ®ў®Ј® бЇЁбЄ }
add_before:=true;
end;
end;
function delete_at_start(var _node_pointer:node_pointer):boolean;
var
deleted_node_pointer:node_pointer;
begin
if _node_pointer<>NIL then{Ґб«Ё бЇЁб®Є Ґ Їгбв}
begin
deleted_node_pointer:=_node_pointer;{б®еа 塞 ¤аҐб г¤ «пҐ¬®Ј® н«Ґ¬Ґв }
_node_pointer:=_node_pointer^.next;{¤ўЁЈ Ґ¬ Ї®ЁвҐа}
dispose(deleted_node_pointer);{г¤ «пҐ¬}
delete_at_start:=true;
end
else{Ё зҐ}
delete_at_start:=false;{®иЁЎЄ }
end;
function delete_at_end(var _node_pointer:node_pointer):boolean;
var
current_node_pointer:node_pointer;
begin
if _node_pointer<>NIL then{Ґб«Ё бЇЁб®Є Ґ Їгбв}
begin
current_node_pointer:=_node_pointer;
if current_node_pointer^.next=NIL then{Ґб«Ё в®«мЄ® 1 н«Ґ¬Ґв}
delete_at_start(_node_pointer){г¤ «пҐ¬ б з « }
else{Ё зҐ}
begin
while current_node_pointer^.next^.next<>NIL do{Ї®Є Ґ ЇаҐ¤Ї®б«Ґ¤Ё© н«Ґ¬Ґв}
current_node_pointer:=current_node_pointer^.next;{¤ўЁЈ Ґ¬бп ўЇҐаҐ¤}
dispose(current_node_pointer^.next);{г¤ «пҐ¬ Ї®б«Ґ¤Ё© н«Ґ¬Ґв}
current_node_pointer^.next:=NIL;{§ Ўлў Ґ¬ ббл«Єг Ї®б«Ґ¤Ё© н«Ґ¬Ґв}
end;
delete_at_end:=true;
end
else{Ё зҐ}
delete_at_end:=false;{®иЁЎЄ }
end;
function delete_by_value(var _node_pointer:node_pointer;data_to_delete:integer):boolean;
var
current_node_pointer,previous_node_pointer:node_pointer;
begin
delete_by_value:=false;
current_node_pointer:=_node_pointer;
previous_node_pointer:=NIL;
if _node_pointer<>NIL then{Ґб«Ё бЇЁб®Є Ґ Їгбв}
begin
while (current_node_pointer<>NIL) and (current_node_pointer^.data<>data_to_delete)do{Ї®Є !гўЁ¤Ё¬ н«Ґ¬Ґв Ё !Є®Ґж бЇЁбЄ }
begin
previous_node_pointer:=current_node_pointer;{¤ўЁЈ Ґ¬бп ўЇҐаҐ¤}
current_node_pointer:=current_node_pointer^.next;
end;
if current_node_pointer<>NIL then{Ґб«Ё н«Ґ¬Ґв ©¤Ґ}
begin
delete_by_value:=true;
if previous_node_pointer<>NIL then{Ґб«Ё Ґ ў з «Ґ}
begin
delete_at_start(current_node_pointer);{г¤ «пҐ¬ ⥪гйЁ© н«Ґ¬Ґв}
previous_node_pointer^.next:=current_node_pointer;{б®еа 塞 ббл«Єг}
end
else{Ё зҐ}
delete_at_start(_node_pointer);{г¤ «пҐ¬ Ё§ з « }
end;
end;
end;
function delete_after(_node_pointer:node_pointer;data_to_delete:integer):boolean;
var
current_node_pointer,previous_node_pointer:node_pointer;
begin
delete_after:=false;
current_node_pointer:=_node_pointer;
previous_node_pointer:=NIL;
if _node_pointer<>NIL then{Ґб«Ё бЇЁб®Є Ґ Їгбв}
begin
while (current_node_pointer<>NIL) and (current_node_pointer^.data<>data_to_delete)do{Ї®Є !гўЁ¤Ё¬ н«Ґ¬Ґв Ё !Є®Ґж бЇЁбЄ }
begin
previous_node_pointer:=current_node_pointer;{¤ўЁЈ Ґ¬бп ўЇҐаҐ¤}
current_node_pointer:=current_node_pointer^.next;
end;
if current_node_pointer<>NIL then{Ґб«Ё н«Ґ¬Ґв ©¤Ґ}
delete_after:=delete_at_start(current_node_pointer^.next);{г¤ «пҐ¬ ¤ л© н«Ґ¬Ґв}
end;
end;
function delete_before(var _node_pointer:node_pointer;data_to_delete:integer):boolean;
var
current_node_pointer,previous_node_pointer:node_pointer;
begin
delete_before:=false;
current_node_pointer:=_node_pointer;
previous_node_pointer:=NIL;
while (current_node_pointer^.next<>NIL) and (current_node_pointer^.next^.data<>data_to_delete)do{Ї®Є ! и«Ё н«-в Ё !Є®Ґж}
begin
previous_node_pointer:=current_node_pointer;
current_node_pointer:=current_node_pointer^.next;{ЇҐаҐе®¤Ё¬ Є б«Ґ¤го饬г н«Ґ¬Ґвг}
end;
if current_node_pointer^.next<>NIL then{Ґб«Ё н«-в ©¤Ґ}
begin
if previous_node_pointer<>NIL then{Ґб«Ё нв® ў з «Ґ бЇЁбЄ }
begin
delete_before:=delete_at_start(current_node_pointer);{¤®Ў ў«пҐ¬ н«-в ў з «® ®ў®Ј® бЇЁбЄ }
previous_node_pointer^.next:=current_node_pointer;
end
else{Ё зҐ}
delete_before:=delete_at_start(_node_pointer);{¤®Ў ў«пҐ¬ н«-в ў з «® ®ў®Ј® бЇЁбЄ }
end;
end;
function find_element(_node_pointer:node_pointer;data_to_find:integer):boolean;
begin
while (_node_pointer<>NIL) and (_node_pointer^.data<>data_to_find)do
_node_pointer:=_node_pointer^.next;
find_element:=_node_pointer<>NIL;
end;
var
exit:boolean;
response:byte;
_node_pointer:node_pointer;
begin
exit:=false;
_node_pointer:=NIL;
while not exit do{Ї®Є Ґ 㦮 ўл©вЁ}
begin
show_menu;{Ї®Є §лў Ґ¬ ¬Ґо}
response:=get_int('‚лЎҐаЁвҐ ў аЁ в');{зЁв Ґ¬ ®вўҐв Ї®«м§®ў ⥫п}
writeln;
case response of
1:add_to_start(_node_pointer,get_int('‚ўҐ¤ЁвҐ зЁб«®, Є®в®а®Ґ 㦮 ¤®Ў ўЁвм ў з «® бЇЁбЄ '));{¤®Ў ў«пҐ¬ н«-в ў з «®}
2:add_to_end(_node_pointer,get_int('‚ўҐ¤ЁвҐ зЁб«®, Є®в®а®Ґ 㦮 ¤®Ў ўЁвм ў Є®Ґж бЇЁбЄ '));{¤®Ў ў«пҐ¬ н«Ґ¬Ґв б Є®ж }
3:if not add_after(_node_pointer,get_int('‚ўҐ¤ЁвҐ зЁб«®, Ї®б«Ґ Є®в®а®Ј® 㦮 ¤®Ў ўЁвм'),
get_int('‚ўҐ¤ЁвҐ зЁб«®, Є®в®а®Ґ 㦮 ¤®Ў ўЁвм')) then{¤®Ў ў«пҐ¬ н«Ґ¬Ґв Ї®б«Ґ 㦮Ј®}
writeln('<< ќ«Ґ¬Ґв, Ї®б«Ґ Є®в®а®Ј® 㦮 ¤®Ў ў«пвм, Ґ ©¤Ґ >>');
4:if not add_before(_node_pointer,get_int('‚ўҐ¤ЁвҐ зЁб«®, ¤® Є®в®а®Ј® 㦮 ¤®Ў ўЁвм'),
get_int('‚ўҐ¤ЁвҐ зЁб«®, Є®в®а®Ґ 㦮 ¤®Ў ўЁвм')) then{¤®Ў ў«пҐ¬ н«Ґ¬Ґв ¤® 㦮Ј®}
writeln('<< ќ«Ґ¬Ґв, ¤® Є®в®а®Ј® 㦮 ¤®Ў ў«пвм, Ґ ©¤Ґ >>');
5:if not delete_at_start(_node_pointer)then{г¤ «пҐ¬ н«Ґ¬Ґв Ё§ з « бЇЁбЄ }
writeln('<< ЌҐў®§¬®¦® г¤ «Ёвм н«Ґ¬Ґв Ё§ з « (бЇЁб®Є Їгбв) >>');
6:if not delete_at_end(_node_pointer)then{г¤ «пҐ¬ н«Ґ¬Ґв Ё§ Є®ж бЇЁбЄ }
writeln('<< ЌҐў®§¬®¦® г¤ «Ёвм н«Ґ¬Ґв Ё§ Є®ж (бЇЁб®Є Їгбв) >>');
7:if not delete_by_value(_node_pointer,get_int('‚ўҐ¤ЁвҐ § 票Ґ н«Ґ¬Ґв , Є®в®ал© г¦® г¤ «Ёвм'))then
{г¤ «пҐ¬ н«-в Ї® ҐЈ® § 票о}
writeln('<< ЌҐў®§¬®¦® г¤ «Ёвм н«Ґ¬Ґв Ї® ҐЈ® § 票о >>');
8:if not delete_after(_node_pointer,get_int('‚ўҐ¤ЁвҐ § 票Ґ н«Ґ¬Ґв , Ї®б«Ґ Є®в®а®Ј® 㦮 г¤ «Ёвм'))then
{г¤ «пҐ¬ н«-в Ї®б«Ґ гЄ § ®Ј®}
writeln('<< ЌҐў®§¬®¦® г¤ «Ёвм н«Ґ¬Ґв Ї®б«Ґ гЄ § ®Ј® >>');
9:if not delete_before(_node_pointer,get_int('‚ўҐ¤ЁвҐ § 票Ґ н«Ґ¬Ґв , ¤® Є®в®а®Ј® 㦮 г¤ «Ёвм'))then
{г¤ «пҐ¬ н«-в ¤® гЄ § ®Ј®}
writeln('<< ЌҐў®§¬®¦® г¤ «Ёвм н«Ґ¬Ґв ¤® гЄ § ®Ј® >>');
10:print_list(_node_pointer);{ўлў®¤Ё¬ бЇЁб®Є}
11:if find_element(_node_pointer,get_int('‚ўҐ¤ЁвҐ, Є Є®© н«Ґ¬Ґв ¤® ЁбЄ вм'))then
writeln('<< ќ«Ґ¬Ґв ЌЂ‰„…Ќ >>')
else
writeln('<< ќ«Ґ¬Ґв Ќ… ©¤Ґ>>');
12:exit:=true;{ ўл室}
end;
end;
end.
(*
(c) 2005 Dima Zolotukhin aka 'Zlogic' <zlogic@gmail.com>
Redistributable under GNU GPL license
*)
type
str_message = string[70];
node_pointer = ^node;
node = record
data:integer;
next:node_pointer;
end;
function get_int(message:str_message):integer;
var
response:integer;
begin
write(message,'> ');
readln(response);
get_int:=response;
end;
procedure show_menu;
begin
writeln;
writeln('-------------Њ…Ќћ ‘Џ€‘ЉЂ-------------');
writeln(' 1 „®Ў ўЁвм н«Ґ¬Ґв ў з «® бЇЁбЄ ');
writeln(' 2 „®Ў ўЁвм н«Ґ¬Ґв ў Є®Ґж бЇЁбЄ ');
writeln(' 3 „®Ў ўЁвм н«Ґ¬Ґв Ї®б«Ґ гЄ § ®Ј®');
writeln(' 4 „®Ў ўЁвм н«Ґ¬Ґв ЇҐаҐ¤ гЄ § л¬');
writeln(' 5 “¤ «Ёвм н«Ґ¬Ґв Ё§ з « бЇЁбЄ ');
writeln(' 6 “¤ «Ёвм н«Ґ¬Ґв Ё§ Є®ж бЇЁбЄ ');
writeln(' 7 “¤ «Ёвм н«Ґ¬Ґв Ї® § 票о');
writeln(' 8 “¤ «Ёвм н«Ґ¬Ґв Ї®б«Ґ гЄ § ®Ј®');
writeln(' 9 “¤ «Ёвм н«Ґ¬Ґв ЇҐаҐ¤ гЄ § л¬');
writeln('10 ђ бЇҐз в вм бЇЁб®Є');
writeln('11 Ќ ©вЁ н«Ґ¬Ґв Ї® ҐЈ® § 票о');
writeln('12 Ё«Ё «оЎ п ¤агЈ п жЁда ўл室Ёв Ё§ Їа®Ја ¬¬л.');
end;
procedure print_list(_node_pointer:node_pointer);
begin
if(_node_pointer<>NIL)then
begin
writeln('<< ЌЂ—Ђ‹Ћ ‘Џ€‘ЉЂ >>');
while _node_pointer<>NIL do
begin
write(_node_pointer^.data:4);
_node_pointer:=_node_pointer^.next;
end;
writeln;
writeln('<< ЉЋЌ…– ‘Џ€‘ЉЂ >>');
end
else
writeln('<< ‘Џ€‘ЋЉ Џ“‘’ >>');
end;
procedure add_to_end(var _node_pointer:node_pointer;data_to_add:integer);
var
new_node_pointer:node_pointer;
last_node_pointer:node_pointer;
begin
new(new_node_pointer);{ᮧ¤ Ґ¬ ®ўл© н«Ґ¬Ґв бЇЁбЄ }
new_node_pointer^.next:=NIL;
new_node_pointer^.data:=data_to_add;
last_node_pointer:=_node_pointer;
while(last_node_pointer^.next<>NIL) and (last_node_pointer<>NIL)do{ЁйҐ¬ Ї®б«Ґ¤Ё© н«Ґ¬Ґв}
last_node_pointer:=last_node_pointer^.next;
if(_node_pointer<>NIL)then{Ґб«Ё ¤® нв®Ј® Ўл« Їгбв®© бЇЁб®Є}
last_node_pointer^.next:=new_node_pointer{ЇаЁбў Ёў Ґ¬ Ґ¬г ®ў®Ґ § 票Ґ}
else{Ё зҐ}
_node_pointer:=new_node_pointer;{¤®Ў ў«пҐ¬ ®ўл© н«Ґ¬Ґв}
end;
procedure add_to_start(var _node_pointer:node_pointer;data_to_add:integer);
var
new_node_pointer:node_pointer;
last_node_pointer:node_pointer;
begin
new(new_node_pointer);{ᮧ¤ Ґ¬ ®ўл© н«Ґ¬Ґв бЇЁбЄ }
new_node_pointer^.next:=_node_pointer;
new_node_pointer^.data:=data_to_add;
_node_pointer:=new_node_pointer;{¬ҐпҐ¬ гЄ § ⥫м з «® бЇЁбЄ }
end;
function add_after(var _node_pointer:node_pointer;data_before,data_to_add:integer):boolean;
var
current_node_pointer:node_pointer;
begin
add_after:=false;
current_node_pointer:=_node_pointer;
while (current_node_pointer^.data<>data_before) and (current_node_pointer<>NIL)do{Ї®Є ! и«Ё н«Ґ¬Ґв Ё !Є®Ґж бЇЁбЄ }
begin
current_node_pointer:=current_node_pointer^.next;{ЇҐаҐе®¤Ё¬ Є б«Ґ¤го饬г н«Ґ¬Ґвг}
end;
if current_node_pointer<>NIL then{Ґб«Ё н«-в ©¤Ґ}
begin
add_to_start(current_node_pointer^.next,data_to_add);{¤®Ў ў«пҐ¬ н«-в ў з «® ®ў®Ј® бЇЁбЄ }
add_after:=true;
end;
end;
function add_before(var _node_pointer:node_pointer;data_after,data_to_add:integer):boolean;
var
current_node_pointer:node_pointer;
previous_node_pointer:node_pointer;
begin
add_before:=false;
current_node_pointer:=_node_pointer;
previous_node_pointer:=NIL;
while (current_node_pointer^.data<>data_after) and (current_node_pointer<>NIL)do{Ї®Є ! и«Ё н«Ґ¬Ґв Ё !Є®Ґж бЇЁбЄ }
begin
previous_node_pointer:=current_node_pointer;
current_node_pointer:=current_node_pointer^.next;{ЇҐаҐе®¤Ё¬ Є б«Ґ¤го饬г н«Ґ¬Ґвг}
end;
if current_node_pointer<>NIL then{Ґб«Ё н«-в ©¤Ґ}
begin
if previous_node_pointer<>NIL then{Ґб«Ё нв® ў з «Ґ бЇЁбЄ }
begin
add_to_start(current_node_pointer,data_to_add);{¤®Ў ў«пҐ¬ н«-в ў з «® ®ў®Ј® бЇЁбЄ }
previous_node_pointer^.next:=current_node_pointer;
end
else{Ё зҐ}
add_to_start(_node_pointer,data_to_add);{¤®Ў ў«пҐ¬ н«-в ў з «® ®ў®Ј® бЇЁбЄ }
add_before:=true;
end;
end;
function delete_at_start(var _node_pointer:node_pointer):boolean;
var
deleted_node_pointer:node_pointer;
begin
if _node_pointer<>NIL then{Ґб«Ё бЇЁб®Є Ґ Їгбв}
begin
deleted_node_pointer:=_node_pointer;{б®еа 塞 ¤аҐб г¤ «пҐ¬®Ј® н«Ґ¬Ґв }
_node_pointer:=_node_pointer^.next;{¤ўЁЈ Ґ¬ Ї®ЁвҐа}
dispose(deleted_node_pointer);{г¤ «пҐ¬}
delete_at_start:=true;
end
else{Ё зҐ}
delete_at_start:=false;{®иЁЎЄ }
end;
function delete_at_end(var _node_pointer:node_pointer):boolean;
var
current_node_pointer:node_pointer;
begin
if _node_pointer<>NIL then{Ґб«Ё бЇЁб®Є Ґ Їгбв}
begin
current_node_pointer:=_node_pointer;
if current_node_pointer^.next=NIL then{Ґб«Ё в®«мЄ® 1 н«Ґ¬Ґв}
delete_at_start(_node_pointer){г¤ «пҐ¬ б з « }
else{Ё зҐ}
begin
while current_node_pointer^.next^.next<>NIL do{Ї®Є Ґ ЇаҐ¤Ї®б«Ґ¤Ё© н«Ґ¬Ґв}
current_node_pointer:=current_node_pointer^.next;{¤ўЁЈ Ґ¬бп ўЇҐаҐ¤}
dispose(current_node_pointer^.next);{г¤ «пҐ¬ Ї®б«Ґ¤Ё© н«Ґ¬Ґв}
current_node_pointer^.next:=NIL;{§ Ўлў Ґ¬ ббл«Єг Ї®б«Ґ¤Ё© н«Ґ¬Ґв}
end;
delete_at_end:=true;
end
else{Ё зҐ}
delete_at_end:=false;{®иЁЎЄ }
end;
function delete_by_value(var _node_pointer:node_pointer;data_to_delete:integer):boolean;
var
current_node_pointer,previous_node_pointer:node_pointer;
begin
delete_by_value:=false;
current_node_pointer:=_node_pointer;
previous_node_pointer:=NIL;
if _node_pointer<>NIL then{Ґб«Ё бЇЁб®Є Ґ Їгбв}
begin
while (current_node_pointer<>NIL) and (current_node_pointer^.data<>data_to_delete)do{Ї®Є !гўЁ¤Ё¬ н«Ґ¬Ґв Ё !Є®Ґж бЇЁбЄ }
begin
previous_node_pointer:=current_node_pointer;{¤ўЁЈ Ґ¬бп ўЇҐаҐ¤}
current_node_pointer:=current_node_pointer^.next;
end;
if current_node_pointer<>NIL then{Ґб«Ё н«Ґ¬Ґв ©¤Ґ}
begin
delete_by_value:=true;
if previous_node_pointer<>NIL then{Ґб«Ё Ґ ў з «Ґ}
begin
delete_at_start(current_node_pointer);{г¤ «пҐ¬ ⥪гйЁ© н«Ґ¬Ґв}
previous_node_pointer^.next:=current_node_pointer;{б®еа 塞 ббл«Єг}
end
else{Ё зҐ}
delete_at_start(_node_pointer);{г¤ «пҐ¬ Ё§ з « }
end;
end;
end;
function delete_after(_node_pointer:node_pointer;data_to_delete:integer):boolean;
var
current_node_pointer,previous_node_pointer:node_pointer;
begin
delete_after:=false;
current_node_pointer:=_node_pointer;
previous_node_pointer:=NIL;
if _node_pointer<>NIL then{Ґб«Ё бЇЁб®Є Ґ Їгбв}
begin
while (current_node_pointer<>NIL) and (current_node_pointer^.data<>data_to_delete)do{Ї®Є !гўЁ¤Ё¬ н«Ґ¬Ґв Ё !Є®Ґж бЇЁбЄ }
begin
previous_node_pointer:=current_node_pointer;{¤ўЁЈ Ґ¬бп ўЇҐаҐ¤}
current_node_pointer:=current_node_pointer^.next;
end;
if current_node_pointer<>NIL then{Ґб«Ё н«Ґ¬Ґв ©¤Ґ}
delete_after:=delete_at_start(current_node_pointer^.next);{г¤ «пҐ¬ ¤ л© н«Ґ¬Ґв}
end;
end;
function delete_before(var _node_pointer:node_pointer;data_to_delete:integer):boolean;
var
current_node_pointer,previous_node_pointer:node_pointer;
begin
delete_before:=false;
current_node_pointer:=_node_pointer;
previous_node_pointer:=NIL;
while (current_node_pointer^.next<>NIL) and (current_node_pointer^.next^.data<>data_to_delete)do{Ї®Є ! и«Ё н«-в Ё !Є®Ґж}
begin
previous_node_pointer:=current_node_pointer;
current_node_pointer:=current_node_pointer^.next;{ЇҐаҐе®¤Ё¬ Є б«Ґ¤го饬г н«Ґ¬Ґвг}
end;
if current_node_pointer^.next<>NIL then{Ґб«Ё н«-в ©¤Ґ}
begin
if previous_node_pointer<>NIL then{Ґб«Ё нв® ў з «Ґ бЇЁбЄ }
begin
delete_before:=delete_at_start(current_node_pointer);{¤®Ў ў«пҐ¬ н«-в ў з «® ®ў®Ј® бЇЁбЄ }
previous_node_pointer^.next:=current_node_pointer;
end
else{Ё зҐ}
delete_before:=delete_at_start(_node_pointer);{¤®Ў ў«пҐ¬ н«-в ў з «® ®ў®Ј® бЇЁбЄ }
end;
end;
function find_element(_node_pointer:node_pointer;data_to_find:integer):boolean;
begin
while (_node_pointer<>NIL) and (_node_pointer^.data<>data_to_find)do
_node_pointer:=_node_pointer^.next;
find_element:=_node_pointer<>NIL;
end;
var
exit:boolean;
response:byte;
_node_pointer:node_pointer;
begin
exit:=false;
_node_pointer:=NIL;
while not exit do{Ї®Є Ґ 㦮 ўл©вЁ}
begin
show_menu;{Ї®Є §лў Ґ¬ ¬Ґо}
response:=get_int('‚лЎҐаЁвҐ ў аЁ в');{зЁв Ґ¬ ®вўҐв Ї®«м§®ў ⥫п}
writeln;
case response of
1:add_to_start(_node_pointer,get_int('‚ўҐ¤ЁвҐ зЁб«®, Є®в®а®Ґ 㦮 ¤®Ў ўЁвм ў з «® бЇЁбЄ '));{¤®Ў ў«пҐ¬ н«-в ў з «®}
2:add_to_end(_node_pointer,get_int('‚ўҐ¤ЁвҐ зЁб«®, Є®в®а®Ґ 㦮 ¤®Ў ўЁвм ў Є®Ґж бЇЁбЄ '));{¤®Ў ў«пҐ¬ н«Ґ¬Ґв б Є®ж }
3:if not add_after(_node_pointer,get_int('‚ўҐ¤ЁвҐ зЁб«®, Ї®б«Ґ Є®в®а®Ј® 㦮 ¤®Ў ўЁвм'),
get_int('‚ўҐ¤ЁвҐ зЁб«®, Є®в®а®Ґ 㦮 ¤®Ў ўЁвм')) then{¤®Ў ў«пҐ¬ н«Ґ¬Ґв Ї®б«Ґ 㦮Ј®}
writeln('<< ќ«Ґ¬Ґв, Ї®б«Ґ Є®в®а®Ј® 㦮 ¤®Ў ў«пвм, Ґ ©¤Ґ >>');
4:if not add_before(_node_pointer,get_int('‚ўҐ¤ЁвҐ зЁб«®, ¤® Є®в®а®Ј® 㦮 ¤®Ў ўЁвм'),
get_int('‚ўҐ¤ЁвҐ зЁб«®, Є®в®а®Ґ 㦮 ¤®Ў ўЁвм')) then{¤®Ў ў«пҐ¬ н«Ґ¬Ґв ¤® 㦮Ј®}
writeln('<< ќ«Ґ¬Ґв, ¤® Є®в®а®Ј® 㦮 ¤®Ў ў«пвм, Ґ ©¤Ґ >>');
5:if not delete_at_start(_node_pointer)then{г¤ «пҐ¬ н«Ґ¬Ґв Ё§ з « бЇЁбЄ }
writeln('<< ЌҐў®§¬®¦® г¤ «Ёвм н«Ґ¬Ґв Ё§ з « (бЇЁб®Є Їгбв) >>');
6:if not delete_at_end(_node_pointer)then{г¤ «пҐ¬ н«Ґ¬Ґв Ё§ Є®ж бЇЁбЄ }
writeln('<< ЌҐў®§¬®¦® г¤ «Ёвм н«Ґ¬Ґв Ё§ Є®ж (бЇЁб®Є Їгбв) >>');
7:if not delete_by_value(_node_pointer,get_int('‚ўҐ¤ЁвҐ § 票Ґ н«Ґ¬Ґв , Є®в®ал© г¦® г¤ «Ёвм'))then
{г¤ «пҐ¬ н«-в Ї® ҐЈ® § 票о}
writeln('<< ЌҐў®§¬®¦® г¤ «Ёвм н«Ґ¬Ґв Ї® ҐЈ® § 票о >>');
8:if not delete_after(_node_pointer,get_int('‚ўҐ¤ЁвҐ § 票Ґ н«Ґ¬Ґв , Ї®б«Ґ Є®в®а®Ј® 㦮 г¤ «Ёвм'))then
{г¤ «пҐ¬ н«-в Ї®б«Ґ гЄ § ®Ј®}
writeln('<< ЌҐў®§¬®¦® г¤ «Ёвм н«Ґ¬Ґв Ї®б«Ґ гЄ § ®Ј® >>');
9:if not delete_before(_node_pointer,get_int('‚ўҐ¤ЁвҐ § 票Ґ н«Ґ¬Ґв , ¤® Є®в®а®Ј® 㦮 г¤ «Ёвм'))then
{г¤ «пҐ¬ н«-в ¤® гЄ § ®Ј®}
writeln('<< ЌҐў®§¬®¦® г¤ «Ёвм н«Ґ¬Ґв ¤® гЄ § ®Ј® >>');
10:print_list(_node_pointer);{ўлў®¤Ё¬ бЇЁб®Є}
11:if find_element(_node_pointer,get_int('‚ўҐ¤ЁвҐ, Є Є®© н«Ґ¬Ґв ¤® ЁбЄ вм'))then
writeln('<< ќ«Ґ¬Ґв ЌЂ‰„…Ќ >>')
else
writeln('<< ќ«Ґ¬Ґв Ќ… ©¤Ґ>>');
12:exit:=true;{ ўл室}
end;
end;
end.
Соседние файлы в папке 04