![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Линейные односвязные списки [D6, XP]
LaDaN © (2006-05-15 15:46:00)Помогите пожалуйста!!!! Аттестационная неделя, нужно по САОД написать программу на эту тему, я написал но не могу зделать последнее действи, т.е. удалить элемент у которого ОДИНАКОВЫЕ СОСЕДИ. Помогите! Горю!
Вото код, осталась толька эта процедура!
program primer;
uses crt;
type
point=^zap;
zap=record
inf:integer;
next:point
end;
var
first,p,q,r:point;
k,t:integer;
procedure spisok;
begin
writeln ('Viberite deystviya');
writeln ('0:vichod');
writeln ('1:vstavka 1-go elementa');
writeln ('2:vstavka v konec');
writeln ('3:vstavka s opr. mesta');
writeln ('4:pechat');
writeln ('5:udalit 1-iy');
writeln ('6:udalit posledniy');
writeln ('7:udalit s odinakovymi krainimi');
readln(k);
end;
procedure vstavka_v_nachalo;
begin
clrscr;
new(p);
writeln ('Vvedite dannie');
readln (p^.inf);
if first=nil then
begin
first:=p;
p^.next:=nil;
end
else begin
p^.next:=first;
first:=p;
end;
end;
procedure del_sosedn;
begin
ВОТ ЗДЕСЬ НУЖНО ПОДУМАТЬ!
end;
procedure vstavka_v_konec;
begin
new(p);
writeln ('Vvedite dannie');
readln (p^.inf);
if first=nil then
first:=p
else begin
q:=first;
while q^.next<>nil do
q:=q^.next;
q^.next:=p;
p^.next:=nil;
end;
end;
procedure vstavka_opr_mesto;
begin
writeln ('Vvedite element posle kotorogo nado vstavit');
readln (t);
new(p);
writeln ('Vvedite dannie');
readln (p^.inf);
q:=first;
k:=1;
while k<t do
begin
k:=k+1;
q:=q^.next;
q^.next:=p;
p^.next:=r;
end;
end;
procedure pechat;
begin
writeln ('pechat spiska');
p:=first;
writeln ('*******************************');
if p=nil then
writeln (p^.inf)
else
while p<>nil do
begin
writeln (p^.inf);
p:=p^.next;
end;
writeln ('*******************************');
end;
procedure udalit_perviy;
begin
p:=first;
first:=first^.next;
dispose(p);
end;
procedure udalit_posledniy;
begin
q:=first;
r:=first;
while q^.next<>nil do
begin
r:=q;
q:=q^.next;
dispose (p);
r^.next:=nil;
end;
end;
begin
first:=nil;
repeat
spisok;
if k=1 then vstavka_v_nachalo;
if k=2 then vstavka_v_konec;
if k=3 then vstavka_opr_mesto;
if k=4 then pechat;
if k=5 then udalit_perviy;
if k=6 then udalit_posledniy;
if k=7 then del_sosedn;
until k=0;
end.
MBo (2006-05-15 15:52:00) [1]что это означает?
Например, в списке
Head-1-2-3-5-3-7...
нужно найти и удалить 5?
Да и реализованные процедуры какие-то сомнительные...