IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Динамические структуры, удаление текущего элемента x линейного списка.
Catherinektz
сообщение 15.03.2012 18:55
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Женский
Реальное имя: Екатерина

Репутация: -  1  +


Здравствуйте, мне нужна помощь, я сделала все процедуры (ниже в программе), а процедуру Remove(var x:PNode) не знаю как сделать! Помогите, пожалуйста. В ней нужно удалить текущий элемент x линейного списка.

Program Labal1_2;
Uses crt;

Type PNode=^Node;
Node=Record
data:Integer;
next:PNode;
End;

Var u,y:PNode;
n,k:Integer;

Procedure AddFirst(k:Integer; var p:PNode);
var t:PNode;
Begin
New(t);
t^.data:=k;
t^.next:=p;
p:=t;
End;

Procedure InputList(var p:PNode; n:Integer);
Var i,k:Integer;
Begin
For i:=1 To n Do Begin
Write('Введите k:');
ReadLn(k);
AddFirst(k,p)
End;
End;

Procedure PrintList(p:PNode);
Begin while p<>nil Do Begin
Write(p^.data, ' ');
p:=p^.next;
End;
WriteLn;
End;

Procedure DelFirst(var p:PNode);
Var t:PNode;
Begin
t:=p;
p:=p^.next;
dispose(t);
End;

Procedure DelNext(x:PNode);
Var t:PNode;
Begin
t:=x^.next;
x^.next:=t^.next;
dispose(t);
End;

Procedure DelLast(var x:PNode);
Var q:PNode;
Begin
If x^.next=nil Then DelFirst(x) Else Begin
q:=x;
While q^.next^.next<>nil Do q:=q^.next;
DelNext(q);
End;
End;

Procedure Delete(n:Integer; var p:PNode);
Var i,k:Integer;
Var q:PNode;
Begin
If n=1 Then DelFirst(p) Else Begin
q:=p;
For i:=1 To n-2 Do Begin
If q^.next=nil Then Break Else q:=q^.next;
End;

If q^.next<>nil Then DelNext(q) Else WriteLn('Нет столько элеметов в списке');

End;
End;

Procedure Clear(var p:PNode);
Begin
While p<>nil Do DelFirst(p);
End;



Begin
Clrscr;
WriteLn('Тестирование');

Writeln('Введите количество элементов в списке:');
Read(k);
InputList(u,k);
PrintList(u);

WriteLn('Удаление первого элемента:');
DelFirst(u);
PrintList(u);

WriteLn('Удаление элемента следующего за:');
DelNext(u);
PrintList(u);

WriteLn('Удаление последнего элемента:');
DelLast(u);
PrintList(u);

WriteLn('Удаление заданного элемента:');
WriteLn('Введите номер элемента');
ReadLn(n);
Delete(n,u);
PrintList(u);

WriteLn('Удаление всего списка:');
Clear(u);
PrintList(u);

ReadLn;
End.


Сообщение отредактировано: Lapp - 16.03.2012 4:07
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
IUnknown
сообщение 20.03.2012 20:11
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата
WriteLn('Удаление текущего элемента x линейного списка:');
Remove(u);
То есть, в Remove передается начало списка? Тогда почему тебя это удивляет:
Цитата
У меня почему -то удаляет только первый элемент списка.
? Какой же элемент должен удалиться, если процедура получила адрес первого?

Цитата
Я думаю, что нужно ввести еще переменную, где будем указывать какой именно элемент в списке, и затем он его будет удалять.
Почему переменную, а не функцию? Скажем, реализовать функцию Search (которая в списке будет искать первый элемент с заданным значением и возвращать ссылку на него), и вызывать Remove вот так:

Remove( Search(u, 6) );
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Catherinektz   Динамические структуры, удаление текущего элемента x линейного списка.   15.03.2012 18:55
Федосеев Павел   Здесь в FAQ есть ответ: {удаление элемента q^} Pr...   15.03.2012 19:12
Catherinektz   Здесь в FAQ есть ответ: {удаление элемента q^} P...   15.03.2012 20:02
Федосеев Павел   FAQ не идеал, а образец для подражания (почти как ...   15.03.2012 22:01
Catherinektz   FAQ не идеал, а образец для подражания (почти как...   16.03.2012 10:26
Федосеев Павел   Sorry, за выпендрёж. Assign(p) эквивалент p<...   16.03.2012 11:14
Catherinektz   Sorry, за выпендрёж. Assign(p) эквивалент p<...   16.03.2012 11:33
Catherinektz   А что обозначает эта строчка: x^:=r^; У меня поче...   20.03.2012 10:29
IUnknown   Можно посмотреть на окончательный вариант программ...   20.03.2012 11:36
Catherinektz   Можно посмотреть на окончательный вариант програм...   20.03.2012 20:02
IUnknown   То есть, в Remove передается начало списка? Тогда ...   20.03.2012 20:11
Catherinektz   То есть, в Remove передается начало списка? Тогда...   20.03.2012 20:21
-Федосеев Павел-   Глянь ещё раз в FAQ. Там есть одноимённая процедур...   21.03.2012 9:05


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:36
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"