1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Проблема с двусвязным списком.., ну никак не могу разобраться..
Проблема следущая,при добавлении справа,теряются 2 элемента,код,по-моему мнения верный,возможно проблема в том,что нет передачи параметров?... Модуль с типом
UNIT TYPES;
INTERFACE
type ts = ^nvs; nvs = record name: string[15]; Llink: ts; Rlink: ts; end; IMPLEMENTATION END.
procedure input2S; var i,j:byte; begin writeln('Vvedite kol-vo vagonov v sostave'); readln(j); for i:=1 to j do begin writeln('Vvedite nomer vagona:'); readln(n); new(a); a^.name:=n; a^.llink:=nil; a^.rlink:=left; left:=a; right:=a; end; end;
procedure output2S; begin writeln('Sostav : '); a:=left; repeat write(a^.name,' '); a:=a^.rlink; until a=nil; writeln; end;
procedure add_left; begin writeln('Dobovlyaem element sleva'); writeln('Vvedite nomer vagona:'); readln(n); new(a); a^.name := n; a^.llink:=nil; left^.llink:=a; a^.rlink:=left; left:=a; end;
procedure add_right; begin writeln('Dobovlyaem element sprava'); writeln('Vvedite nomer vagona:'); readln(n); new(a); a^.name := n; a^.rlink:=nil; right^.rlink:=a; a^.llink:=right; right:=a; end;
procedure delsearch3_left(del:boolean); var pos: byte; flg: boolean; begin writeln('Vvedite iskomii vagon'); readln(n); flg:=false; pos:=0; a:=left; repeat if a^.name = n then flg:=true else a:=a^.rlink; pos:=pos+1; until (a=nil) or (flg=true); if flg=true then writeln('Pozicija vagona v sostave = ', pos) else writeln('Iskomogo elementa net.'); if (del=true) and (flg=true) then begin
if (a<>left) and (a<>right) then { v centre } begin a^.llink^.rlink:=a^.rlink; a^.rlink^.llink:=a^.llink; dispose(a); end; if (a=left) and (a=right) then { edinstvennij } begin dispose(a); right:=nil; left:=nil; end; if (a=left) and (a<>right) then { krajnij sleva } begin a:=left; left:=left^.rlink; left^.llink:=nil; dispose(a); end; if (a=right) and (a<>left) then { krajnij sprava } begin a:=right; right:=right^.llink; right^.rlink:=nil; dispose(a); end;
end; end;
procedure delsearch3_right(del:boolean); var pos: byte; flg: boolean; begin writeln('Vvedite iskomii vagon'); readln(n); flg:=false; pos:=0; a:=right; repeat if a^.name = n then flg:=true else a:=a^.llink; pos:=pos+1; until (a=nil) or (flg=true); if flg=true then writeln('Pozicija vagona v sostave = ', pos) else writeln('Iskomogo elementa net.'); if (del=true) and (flg=true) then begin
if (a<>left) and (a<>right) then { v centre } begin a^.llink^.rlink:=a^.rlink; a^.rlink^.llink:=a^.llink; dispose(a); end; if (a=left) and (a=right) then { edinstvenniy } begin dispose(a); right:=nil; left:=nil; end; if (a=left) and (a<>right) then { krajnij sleva } begin a:=left; left:=left^.rlink; left^.llink:=nil; dispose(a); end; if (a=right) and (a<>left) then { krajnij sprava } begin a:=right; right:=right^.llink; right^.rlink:=nil; dispose(a); end;