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

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

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

 
 Ответить  Открыть новую тему 
> Односвязные Списки
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

Цитата
И еще как правильно вывести результирующую очередь?
Очередь <> Список
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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

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


Новичок
*

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

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


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

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

 





- Текстовая версия 23.09.2020 16:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name