Если следует удалить элемент на который указывается ссылка q, то следует в начале присвоить элементу q^ значение следующего за ним элемента, а затем этот элемент удалить.
{удаление элемента q^} Procedure Delete(Var q: point); Var r: point; Begin r:=q^.next; q^:=r^; r^.Next:=nil; End;
Как задается q?
volvo
21.12.2005 15:03
Там же, откуда ты взял реализацию Delete, есть процедура Search... С ее помощью находим Q, и передаем Q в Delete для удаления...
DimaD
22.12.2005 4:02
Как подключить эти две процедуры. Помогите. Мне надо чтобы удалялся 3 элемент списка. И выводился список уже без 3 элемента.
{удаление элемента q^} Procedure Delete(Var q: point); Var r: point; Begin r:=q^.next; q^:=r^; r^.Next:=nil; End;
и
Procedure Search (first: point; x: integer; var q: point); { q - возвращает указатель на найденный элемент; q - nil, если элемента с ключем х в списке нет } var r: point; ok: boolean; begin r: = first; ok: = true; while (r<>nil) and ok do if r^.Number=x then ok:=false else r:=r^.Next; q: = r end;
Вот моя программа:
type B=^Zapis; {Описание типа список} Zapis=record St: String[10]; Next: B; end; var i,n: Integer; q: B; First, Tail,Curr: B; begin {Начало исполняемой части программы} repeat Write('Vvedite n>2. n = '); {Ввод с клавиатуры количества} Readln(n); {элементов в списке} until n>2; New(First); {Выдиление памяти под первый элемент} First^.Next:=Nil; {Внесение информации в первый элемент} Writeln('Vvedite stroky:'); Readln(First^.St); Tail:=First; for i:=2 to n do {Цикл добавление элемента в конец списка} begin New(Curr); Tail^.Next:=Curr; Tail:=Tail^.Next; Tail^.Next:=Nil; Readln(Tail^.St); end; {Список сформирован} Writeln ('Spisok:'); Curr:=First; while Curr<>Nil do {Вывод исходного списка} begin Writeln (Curr^.St); Curr:=Curr^.Next; end; {Конец вывода исходного списка} Readln; Readln; end.
Заранее огромное спасибо.
volvo
22.12.2005 18:12
Цитата
Мне надо чтобы удалялся 3 элемент списка.
Тогда вот так:
Curr := First; i := 3; While (Curr <> nil) and (i > 1) Do Begin Dec(i); Curr := Curr^.Next; End;
If (i = 1) and (Curr <> nil) Then Delete(Curr);
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.