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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2014, 23:05   #1
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию Процедура удаления в двунаправленном списке

Здраствуйте, помогите дописать плиз 1 процедурку к программе. Нужно в двунаправленном списке сделать удаление по фамилии: вот мой код:

Код:
uses
  crt;
type
  prizv=string[30];
  nomer=longint;
  
 
  List=^TList;
  TList=record
    prizvv:prizv;
    nomerr:nomer;
    next,prev:List;
  end;
  
  var
  SpisNach,SpisEnd,tmp,tmpl,addtmp,atmpN,atmpP:List;
  BList:List;
  
  F:string;
  Z:longint;
  ch:char;
  count:real;
  
  
  procedure AddElem(var nach,ends:List;F:prizv;Z:nomer);
begin
  if nach=nil then
    begin
    Getmem(nach,SizeOf(TList));
    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^.prizvv:=F;
  ends^.nomerr:=Z;
end;

procedure PrintV(spis1:List);
begin
  if spis1=nil then
  begin
    writeln('Spisok pust.');
    exit;
  end;
  while spis1<>nil do
  begin
  
  write('-------------------------------------------------------------------------');
  writeln('|Prizvishe | Nomer |');
  
  write('-------------------------------------------------------------------------');
  
  
    Write(spis1^.prizvv:15,'|' , spis1^.nomerr:15, '|');
    
    spis1:=spis1^.next;
    writeln;
  end;
end;

begin
  SpisNach:=nil;
  SpisEnd:=nil;
  count:=0;
  repeat
    clrscr;
    TextColor(4);
    Write('Programma ');
    writeln;
    TextColor(7);
    TextColor(3);
    Writeln('Viberite deistvie:');
    TextColor(7);
    Writeln('1) Dobavka dannix.');
    Writeln('2) Vuvid dannix --->.');
    writeln;
    ch:=readkey;
    case ch of
      '1':begin
            writeln('Vvedite danni telef knigi');
            writeln('Prizv');
            readln(F);
            Writeln('nomer telefony');
            readln(Z);
            AddElem(SpisNach,SpisEnd,F,Z);
            count:=count+1;
          end;
          
          
          '2':begin
            clrscr;
            writeln('Vivod spiska');
            PrintV(SpisNach);
            readkey;
            end;
            end;

until ch='3';
end.
ввод, вывод обеспечены, только не шарю с процедурой удаления. спасибо!

Последний раз редактировалось mishammm; 03.05.2014 в 23:13.
mishammm вне форума Ответить с цитированием
Старый 04.05.2014, 07:05   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

про удаление в двухсвязном списке можно почитать:


Реализация односвязного и двусвязного списков

Двусвязный список.


Модули для работы с динамическими списками (c) kommunist

Разработайте класс, реализующий линейный двусвязный список (пост #11)


а по сути, при удалении в двухсвязном списке - это коррекция указателей предыдущего (перед удаляемым) и последующего (после удаляемого) элементов списка таким образом, чтобы исключить удаляемый элемент из цепочки. После чего производится освобождение занимаемой им памяти.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
процедура удаления данных из типизированного файла Mikheeva_Ksu Помощь студентам 0 21.06.2013 17:59
Рекурсивная процедура удаления Kehl Помощь студентам 3 13.05.2013 17:16
Процедура удаления в односвязном динамическом списке по ключевым полям Riesig Помощь студентам 0 28.03.2013 21:03
Регистрация программы в списке Удаления и изменения программ Miller-1981 Общие вопросы C/C++ 1 11.08.2012 11:16
Процедура в процедура в C++ Builder Ecosasha C++ Builder 2 06.06.2009 17:17