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

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

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

> Необходима помощь в решении задачи с динамическими структурами
sonic
сообщение 14.12.2006 10:49
Сообщение #1


Alone in the dark
*

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

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


Здравствуйте, уважаемые участники форума!
Прошу помощи в решении этой задачи:
Даны указатели P1 и P2 на барьерный и текущий элементы двусвязного списка. Также даны пять чисел. Используя тип TListB (TListB - запись с полями Barrier и Current типа PNode), описать процедуру LBInsertAfter(L, D), которая вставялет новый элемент со значением D после текущего элемента списка L (L - входной и выходной параметр типа TListB, D - входной параметр целого типа). Вставленный элемент становится текущим. С помощью этой процедуры вставить пять данных чисел в исходный список, и вывести новый адрес его текущего элемента.

Как я позже выяснил у препода, "адрес его текущего элемента" представляет собой номер элемента в списке.
Пользовательские типы PNode и TNode необходимо описывать так:
type 
PNode = ^TNode
TNode = record
Data: integer;
Next, Prev: PNode;
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
sonic
сообщение 15.12.2006 12:10
Сообщение #2


Alone in the dark
*

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

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


решил задачу, вот как получилось:

uses crt;

const count=10;

type
PNode = ^TNode;
TNode = record
Data: integer;
Next, Prev: PNode;
end;

TListB = record
Barrier, Current: PNode;
end;
PListB = ^TListB;

procedure LBInsertAfter(var L: PListB; D: integer);
var p: PNode;
begin
new(p);
p^.prev:= L^.Current;
p^.Data:=D;
p^.Next:= L^.Current^.Next;
L^.Current^.Next^.prev:=p;
L^.Current^.Next:=p;
L^.Current:=p;
end;

var
i,curnum,num: integer;
p,pred,barrier: PNode;
ListB: PListB;

begin

clrscr;

randomize;
while (curnum <= 1) do
begin
curnum:= random(count);
end;

new(ListB);

for i:=1 to count do
begin
new(p);
if (i = 1) then begin p^.Data:=0; ListB^.Barrier:=p; end else p^.Data:= random(9);
if (i = 10) then ListB^.Barrier^.prev:=p else p^.Prev:=pred;
if (i = curnum) then ListB^.Current:=p;
pred^.Next:=p;
pred:=p;
write(p^.Data,' ');
end;
writeln;
writeln('Номер установленного текущего элемента: ',curnum);
writeln;

i:=1;
while (i <= 5) do
begin
num:= random(20);
if(num > 10) then
begin
LBInsertAfter(ListB, num);
inc(i);
end;
end;

p:=ListB^.Barrier;
for i:=1 to count+5 do
begin
write(p^.Data,' ');
p:=p^.Next;
end;
writeln;

writeln('Новый адрес текущего элемента: ',curnum+5);

end.


Что скажете ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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