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

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

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

> Односвязные Списки
Аристократ
сообщение 11.06.2007 12:16
Сообщение #1


Новичок
*

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

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


Здравствуйте, программисты. У меня задание.
Произвести слияние двух заданных упорядоченных по возрастанию списков в один неубывающий список.
Посмотрите, пожалуйста на мой программный код. Правильно ли я понимаю путь реализации соединения двух списков. Что-то я запутался. И еще как правильно вывести результирующую очередь???
Вот код.


type TypeOfElem = Integer;
Sllptr=^Zveno;
Zveno= record
Elem: TypeOfElem;
Next: Sllptr;
end;

Procedure Unite (var head1, head2 : sllptr);
var cur : sllptr;
begin
if head2<>nil then begin

if head1=nil then head1:=head2
else
begin cur:=head1;
while cur^.next<>nil do cur:=cur^.next;
cur^.next:=head2;
end; head2:=nil;
end; end;
Var k,i :integer;
aElem: SllPtr; aElem1: SllPtr;
Begin
write('vvedite chislo elementov spiska 1 ');
readln(k);
for i:=1 to k do
begin
write('vvedite spisok 1 ');
new(aElem);
readln(aElem^.elem);
aElem^.Next:=nil;
end;

write('vvedite chislo elementov spiska 2 ');
readln(k);
for i:=1 to k do
begin
write('vvedite spisok 2 ');
new(aElem1);
readln(aElem1^.elem);
aElem1^.Next:=nil;
end;
Unite (aelem,aelem1);
readln;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
volvo
сообщение 11.06.2007 12:41
Сообщение #2


Гость






В поиске был? Скорее всего - нет, потому что:
Объединение 2 упорядоченных списков

Цитата
И еще как правильно вывести результирующую очередь?
Очередь <> Список
 К началу страницы 
+ Ответить 
Аристократ
сообщение 11.06.2007 15:38
Сообщение #3


Новичок
*

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

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


А можно как-то исправить предыдущую задачу для решения этой?.

Пополнить упорядоченный по возрастанию список A элементами неупорядоченного списка B, сохранив упорядоченность (совпадающие элементы включать единожды).


program stack;
const n=4;
type spisok=^tpr;
tpr=record
inf:integer;
link:spisok;
end;
{----------Dopolnitelnie peremennie--------}
var BEGQA,BEGQB,ENDQA,ENDQB,p,p1,p2,T :spisok; first: boolean; i,k,max:byte;
begin
{-----------C03DAHUE CnUCK0B---------}
begqa:=nil; begqb:=nil;
new(p);
writeln ('vvod 1 elementa spiska a'); readln(p^.inf); p^.link:=nil;
Begqa:=p; endqa:=p;
for i:=1 to n do
begin
new(p); writeln('vvedite element spiska a'); readln(p^.inf); p^.link:=nil;
endqa^.link:=p; endqa:=p;
end;
new(p);
writeln ('vvod 1 elementa spiska b'); readln(p^.inf); p^.link:=nil;
Begqb:=p; endqb:=p;
for i:=1 to n do
begin
new(p); writeln('vvedite element spiska b'); readln(p^.inf); p^.link:=nil;
endqb^.link:=p; endqb:=p
end;
{Proverjaju v kakom spiske startovij element bolshij. Etot spisok PERVIJ}
if begqa^.inf > begqb^.inf then begin
p1 := begqa; p2 := begqb; max:=begqa^.inf;
first := true;
end
else begin
p1 := begqb; p2 := begqa; max:=begqb^.inf;
first := false;
end;

{-------- Dalshe - sam algoritm -------- }
while (p1 <> nil) and (p2 <> nil) do begin

while (p1^.link <> nil) and (p1^.link^.inf > p2^.inf) do p1 := p1^.link;
if p1^.link <> nil then begin

T := p2^.link;

p2^.link := p1^.link;
p1^.link := p2;

p2 := T;
end;
T := p1;
p1 := p1^.link;

end;

{ Ne zabivaem prilepit k koncu 1 spiska ostatok 2, esli on est' }
T^.link := p2;

{ nu, i raspe4ataem sootvetstvenno tot spisok, kotorij 1 (sm. vishe) }
if first then p := begqa
else p := begqb;
while p<>nil do begin
write(' ',p^.inf); p:=p^.link;
end;
writeln;
readln;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.06.2007 18:20
Сообщение #4


Гость






Аристократ, во-первых, у тебя в задании списки отсортированы по возрастанию, а там куда ведет моя ссылка - по убыванию... Как следствие, твоя программа, приведенная постом выше, вообще не будет работать, пока ты не поменяешь 2 знака ">" на "<" ...

Ну, а по поводу
Цитата
совпадающие элементы включать единожды
- проще будет вкюлчать, сколько есть, а потом проходить по результирующему списку и все дубликаты убирать...
 К началу страницы 
+ Ответить 
Аристократ
сообщение 13.06.2007 7:31
Сообщение #5


Новичок
*

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

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


Спасибо Volvo, я разобрался с ней.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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