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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2012, 22:52   #1
Liagushka
 
Регистрация: 20.09.2011
Сообщений: 7
По умолчанию Процедура удаление элемента

Мне задали написать программу с использованием однонаправленного списка. Я её написал кроме одной процедуру. Помогите пожалуйста написать процедуру удаления элемента списка по его индексу, который вводится клавиатурой.
Моя программа:
Создание списка - сделал
Удаление элемента - не знаю как сделать
Вывод списка - сделал
Удаление списка с конца - сделал

Код:
program spisok;
uses
crt;
type
spis = ^el;
el = record
danie : integer;
next : spis;
end;
Liagushka вне форума Ответить с цитированием
Старый 08.03.2012, 21:40   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Немного подскажу, логика такова, что при удалении n-ого элемента:
1) Идти от первого элемента списка до n-1 (a)
2) Получить отдельно следующий элемент по указателю (b)
3) Указателю n-1 элемента присвоить указатель n (a^.next:=b^.next);
4) Удалить из памяти нужный элемент (freemem(b));
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 09.03.2012, 12:35   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

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

Думаю, что это то ...
Вложения
Тип файла: rar 321.rar (218.9 Кб, 7 просмотров)
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 10.03.2012, 16:38   #4
Liagushka
 
Регистрация: 20.09.2011
Сообщений: 7
По умолчанию

Что-то похожее на это?
Код:
procedure Delete( var beg : spis; key : word);
var p : spis;      { указатель на удаляемый элемент }
     pp : spis;     { указатель на предыдущий элемент }
begin
   if not find(beg. key. p. pp) then begin
       writelm(' Удаление не выполнено'); exit; end;
   if p = beg then beg := beg^.p { удаление первого элемента }
   else pp^.p := p^.p;
   dispose(p);
end;
Liagushka вне форума Ответить с цитированием
Старый 11.03.2012, 10:09   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

что-то похожее на это.

только:
1) код явно некомпилируемый, ибо параметры должны отделяться запятыми, а не точками
2) у вас нет поля с именем p вместо p^.p должно быть p^.Next
Код:
..
   if p = beg then beg := p^.Next { удаление первого элемента }
   else pp^.Next := p^.Next;
..
3) процедура find должна быть реализована (причём, разумеется, корректно! )

но в целом Вы идёю уловили ПРАВИЛЬНО!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура вствки элемента в динамический массив Beren42 Помощь студентам 18 26.03.2011 13:20
Удаление элемента из массива asd874 Помощь студентам 3 13.05.2010 12:13
Процедура нахождения мах элемента. Другая Помощь студентам 5 11.05.2010 20:03
удаление элемента из списка yagluboko Помощь студентам 1 10.04.2010 14:54