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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2012, 19:24   #1
gromgera
Новичок
Джуниор
 
Регистрация: 26.06.2012
Сообщений: 1
По умолчанию

Помогите реализовать удаление соседних элементов для текущего в односвязном неупорядоченном списке. Каким способом удаление вообще записывают?
программа:

Код:
uses crt,modul1;
type list=^element;
     element=record
     info: integer;
     link: list;
     end;
begin
 head:=nil;
 current:=nil;
repeat
 clrscr;
 vivod;
 writeln;
  if current<>nil then write(current^.info,' -Tekyshee znachenie');
   writeln;
   writeln('a-Permeshenie v nachalo');
   writeln('s-Peremeshenie v konec');
   writeln('1-Dobyavit novuy element');
   writeln;
   writeln('9-Vihod');
 readln(c);
case c of
       '1': begin
            write('Vvesti dobavlyaemoe znachenie ');
            read(x); add(x); vivod;
            end ;
        's': begin
            if current<>nil then
            if current^.link<>nil then current:=current^.link
            end;
        'a':begin
            if current<>nil then
            if current<>head then begin
            s:=current;
            current:=head;
            while current^.link<>s do current:=current^.link; end
            end;
       end;
until c='9';

end.
модуль:
Код:
unit modul1;
type list=^element;
     element=record
     info: integer;
     link: list;
     end;
var head,current,buf,s:list;  i,x:integer; c:char;

procedure add(a:integer);
begin
 new(buf);
 buf^.info:=a;
 buf^.link:=head;
 head:=buf;
 new(current);
  if head=nil then head^.link:=head;
   if current<>nil then current:=head;
end;

procedure vivod;
begin
 buf:=head;
  while buf<>nil do begin
   write(buf^.info,' ');
   buf:=buf^.link;
  end;
 end;

end.
Простите , что программа текстом, не знаю как выделить её в код.

Последний раз редактировалось Stilet; 26.06.2012 в 20:15.
gromgera вне форума Ответить с цитированием
Старый 27.06.2012, 08:43   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Во вложении, очередной раз, предлагаю фрагмент из Т.А. Павловской. Программирование на ЯВУ. Паскаль. Там все прозрачно для работы со списком.
Попробуйте разобраться. У Вас должно получиться...

При поиске элемента списка, вокруг которого надо удалить элементы, можно ввести дополнительные временные указатели, которые ссылаются на предыдущий и текущий элемент (тот который Вы нашли).
Удаление - замена ссылок на актуальные и удаление элемента из динамической памяти.
Вероятно следует написать две п/п - одна для удаления следующего элемента, а одна - для удаления предыдущего.

Как-то так ...
Вложения
Тип файла: rar 321.rar (218.9 Кб, 7 просмотров)
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список San111 Паскаль, Turbo Pascal, PascalABC.NET 1 15.05.2012 22:08
Необходимо реализовать классы, односвязный список для хранения целых чисел, односвязный список для хранен lineico Помощь студентам 2 09.05.2011 17:45
Паскаль. двусвязный некольцевой неупорядоченный список KaZaaM Помощь студентам 3 29.05.2009 21:52
delphi (двусвязный неупорядоченный список) KaZaaM Помощь студентам 10 27.05.2009 22:15