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

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

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

> Нужна помощ с однонаправленным списком
Krjuger
сообщение 12.05.2009 14:41
Сообщение #1


Профи
****

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

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


В общем задача заключается в том чтобы после елемента списока P1,с ключем Х,равным задаваемому значению А,вставить список P2.


Type
TElem = string;

TList = ^TNode;
TNode = record
Info: TElem;
Next: TList
end;
var
P1,P2:TList;
r:TList;
A:integer;

Procedure Insert(var P1: Tlist; x : integer);
begin
new®;
r^.info:=x;
r^.next:=P1^.next;
P1^.next:=r;
end;


Тут я беру элемент из списка п2 и записываю его после элемента с ключем Х.В общем моя идея заключалась в том,чтобы создать процедуру,которая будет юзять insert и потихоньку выдирая из п2 по 1 элементу вставлять их каждый раз сдвигая ключ на 1,тем самым впихнуть весь список, но как это реализовать хз.

Так же есть вопрос немного в другой области.Необходимо взять из конца дека V элементов и вставить их в стек,вот тут приветствуются лбые идеи,потому что своих совсем нет(((
P.s.Просьба на фак не тыкать прочитал и не один,но если есть конкретные вещи из фака ,тобуду только рад.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Krjuger
сообщение 12.05.2009 20:27
Сообщение #2


Профи
****

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

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


"Взять из дека последние V элементов и записать их в стек".Вот такое вот задание,А сделать, как угодно.

Насчет рекурсивного пробела,уже привычка,с того момента,как синтаксический анализатор писал.Реализацию стека и дека чуть позже выыложу,а щас,пересмотрел идею с функцией char to int и пришел к такому варианту
 
uses CRT;
Type

point = ^item; {ЏаҐ¤бв ў«Ґ­ЁҐ бЇЁбЄ  }
item = record {‡ўҐ­® бЇЁбЄ }
Number: integer;
Next: point; {‘«Ґ¤гойЁ© н«Ґ¬Ґ­в бЇЁбЄ }
end;
var
P1,P2: point;
A : integer;
fin1,fin2 : text;

Procedure SeachAndInsert(P1,P2: point ; x : integer);
var
flag : boolean;
save:Point;
begin
flag:=true;
while (P1<>nil) and flag=true do
begin
if P1^.number=x then
begin
flag:=false;
save^.next:=P1^.next;
end
else
begin
P1:=P1^.next;
end;
end;
P1^.next:=P2;
while P2^.next<> nil do
P1:=P2^.next;
P1^.next:=save^.next;
end;


Procedure Create(var p : point; var fin:text);
var
r,m:point;
begin
new®;
reset(fin);
while not eof(fin) do
begin
new(m);
read(fin,m^.number);
m^.next:=nil;
r^.next:=m;
p:=m;
write(p^.number);
end;
close(fin);
end;


Procedure BListPrint( P : point );
begin
write('< ');
while P <> nil DO
begin
write( P^.number );
If P^.Next <> nil then write(',');
P := P^.Next
end;
writeln(' >')
end;

begin
clrscr;
chdir('C:\Tpascal');
assign(fin1,'test1.txt');
assign(fin2,'test2.txt');
Create(P1,fin1);
BListPrint(P1);
Create(P2,fin2);
BListPrint(P2);
writeln('‚ўҐ¤ЁвҐ Ї а ¬Ґва Ђ:');
read(A);
SeachAndInsert(P1,P2,A);
BListPrint(P1);
end.

Оба списка корректно заполняются,а вот вывод почему дает пустой вариант и еще добавление у меня не получилось проверить.

Сообщение отредактировано: Krjuger - 12.05.2009 21:07
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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