Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2010, 21:27   #1
Work Group
 
Регистрация: 17.11.2009
Сообщений: 9
Восклицание двусвязный список

можете помочь с задачкой.
нужно создать двусвязный список с явной навигацией..
что бы можно было перемещаться на один элемент вправо или влево...и удалить текущий элемент...вот что есть у меня

Код:
unit Unit1; 

interface

type
  Tinf=integer;
  List=^TList;
  TList=record
    data:TInf;
    next,
    prev:List;
  end;

Procedure FreeStek(stek1:List);
procedure AddElem(var nach,ends:List;znach1:TInf);
procedure Print(spis1:List);
Function SearchElemZnach(spis1:List;znach1:TInf):List;

implementation

Procedure FreeStek(stek1:List);
var
  tmp:List;
begin
  while stek1<>nil do {пока stek1 не станет указывать в "пустоту" делать}
  begin
    tmp:=stek1;
    stek1:=stek1^.next;
    FreeMem(tmp,SizeOf(Tlist));
  end;
end;

procedure AddElem(var nach,ends:List;znach1:TInf);
begin
  if nach=nil then
  begin
    Getmem(nach,SizeOf(TList)); {создаём элемент, указатель nach уже будет иметь адрес}
    nach^.next:=nil;
    nach^.prev:=nil;
    ends:=nach;
  end
  else
  begin
    GetMem(ends^.next,SizeOf(Tlist)); {создаём новый элемент}
    ends^.next^.prev:=ends; {связь нового элемента с последним элементом списка}
    ends:=ends^.next;
    ends^.next:=nil;
  end;
  ends^.data:=znach1; {заносим данные}
end;

procedure Print(spis1:List);
begin
  if spis1=nil then
  begin
    writeln('list is empty.');
    exit;
  end;
  while spis1<>nil do
  begin
    Write(spis1^.data, ' ');
    spis1:=spis1^.next
  end;
end;


Function SearchElemZnach(spis1:List;znach1:TInf):List;
begin
  if spis1<>nil then
    while (Spis1<>nil) and (znach1<>spis1^.data) do
      spis1:=spis1^.next;
  SearchElemZnach:=spis1;
end;

end.                          



Program project1;

uses crt,Unit1;

var
  SpisNach,
  SpisEnd,
  tmpl:List;
  znach,a,b:integer;
  ch:char;
begin
  SpisNach:=nil;
  SpisEnd:=nil;
  repeat
    clrscr;
    Write('Programm for working whith ');
    TextColor(4);
    Writeln('bidirectional list.');
    TextColor(7);
    Writeln('Choose the action:');
    Writeln('1) Create the list.');
    Writeln('2) output the list.');
    Writeln('3) Searching the element.');
    Writeln('6) Exit.');
    writeln;
    ch:=readkey;
    case ch of
      '1':begin
            write('Input the elements ');
            readln(znach);
            AddElem(SpisNach,SpisEnd,znach);
            {AddElem(SpisNach,SpisEnd,znach);}
          end;
      '2':begin
            clrscr;
            Print(SpisNach);
            readkey;
          end;
      '3':begin
           write('What element you whant to find ');
            readln(znach);
            tmpl:=SearchElemZnach(SpisNach,znach);
            if tmpl=nil then
             write('this element is not exsist in list ')
            else
            begin
              write('ќ«Ґ¬Ґ*в ');
              TextColor(4);
              Write(tmpl^.data);
              TextColor(7);
              Write(' **©¤Ґ*');
            end;
            readkey;
          end;
       end;
  until ch='6';
  FreeStek(SpisNach);
end.
Work Group вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
двусвязный список klykovka Помощь студентам 8 22.05.2010 18:58
двусвязный список на си++ mizantrop32 Общие вопросы C/C++ 0 18.05.2010 17:45
Двусвязный список kruserg Паскаль, Turbo Pascal, PascalABC.NET 1 28.04.2009 10:37