IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Проблема с двусвязным списком.., ну никак не могу разобраться..
Andrewshkovskii
сообщение 6.06.2007 20:14
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


Проблема следущая,при добавлении справа,теряются 2 элемента,код,по-моему мнения верный,возможно проблема в том,что нет передачи параметров?...
Модуль с типом
UNIT TYPES;

  INTERFACE

  type
    ts  = ^nvs;
    nvs = record
            name: string[15];
            Llink: ts;
            Rlink: ts;
          end;
  IMPLEMENTATION
END.

Вот код модуля :
unit spisok;

INTERFACE
  uses types;
  procedure output2S;
  procedure input2S;
  procedure add_left;
  procedure add_right;
  procedure delsearch3_left(del:boolean);
  procedure delsearch3_right(del:boolean);

IMPLEMENTATION

  var
    left,right,a:ts;
    i: integer;
    n: string;

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;

      end;
  end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 24.07.2025 15:37
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"