Помощь - Поиск - Пользователи - Календарь
Полная версия: Графический вывод списка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
killswitch
Помогите с задачей плиз, а то уже скоро сессия=(
Задача: Создать 2 списка, потом их отсортировать, и эти два отсортированных списка слить в один - 3-ий так, чтобы он был сразу отсортированным. И самая жесть, это реализовать графический (unit Graph) вывод списка!
У меня сделано создание списков, их сортировка, слияние даже обычное не получается, а графический вывод вообще не знаю как сделать=(

Вот моя программа, надо переделать процедуру Unite и еще сделать процедуру графического вывода

uses Crt;
type plist = ^list;
list = record
info: integer;
link: plist;
end;
var
f1,f2,f3,top:plist;
procedure rdlist(var lst: plist);
var p,q,s: plist;
buf: integer;
function rdint(var buf:integer):Boolean;
begin
{$i-}
read(buf);
rdint:=IOResult=0;
{$i+}
end;{rdint}
begin
q:=nil;
while rdint(buf) do
begin
new(s);
s^.info:=buf;
s^.link:=q;
q:=s;
end;
p:=nil;
while q<>nil do
begin
s:=q; q:=q^.link;
s^.link:=p; p:=s;
end;
lst:=p;
end; {rdlist}
procedure wrlist(f:plist);
begin
if f<>nil then
begin
write (f^.info, ' ');
wrlist (f^.link);
end;
end;
Function Sort(head : plist) : plist;
var newh, max, prev, pmax, cur : plist;
begin
newh:=nil;
while head<>nil do
begin
max:=head;
prev:=head;
cur:=head^.link;
while cur<>nil do
begin
if cur^.info>max^.info then
begin
max:=cur;
pmax:=prev;
end;
prev:=cur; cur:=cur^.link;
end;
if max=head then head:=head^.link
else pmax^.link:=max^.link;
max^.link:=newh; newh:=max;
end;
Sort:=newh;
end;
Procedure Unite (var cur, head1, head2 : plist);
begin
if head2<>nil then
begin
if head1=nil then
head1:=head2 else
begin
cur:=head1;
while cur^.link<>nil do
begin
cur^.info:=head1^.info;
cur:=cur^.link;
head1:=head1^.link;
end;
cur^.link:=head2;
end;
head2:=nil;
end;
end;
BEGIN
clrscr;
write('Spisok 1(letter for exit) = ');
rdlist(f1);
wrlist(f1);
writeln;
write('Spisok 2(letter for exit) = ');
rdlist(f2);
wrlist(f2);
writeln;
write('Otsortirovanni spisok 1 = ');
f1 := sort(f1);
wrlist(f1);
writeln;
write('Otsortirovanni spisok 2 = ');
f2:= sort(f2);
wrlist(f2);
writeln;
write('Novi spisok = ');
unite(f3,f1,f2);
wrlist(f3);
readln;
readln;
end.


М
Используй теги для программных текстов!
-- Лопарь

volvo
Цитата
а то уже скоро сессия
Ты знаешь, вот это как-то нас интересует меньше всего... Скоро у тебя сессия, или не очень - это твоя проблема. Ты ж раньше чем-то занимался? Наверняка чем-то другим, более интересным, да? А теперь вот приходится в спешном порядке долги закрывать? Ну, что ж поделаешь...

А по теме - на форуме неоднократно выкладывались программы сортировки списков, + к этому (насколько я помню) я приводил программу, сливающую 2 списка в один без нарушения упорядоченности (попробую найти ссылку).

Что касается графического представления списка - то можешь посмотреть вот тут: Графическое представление бинарного дерева , в принципе, идею уловить можно, но вот переписывать я ее для списков не буду... Хочешь - начни переделывать, что не будет получаться - спрашивай, подскажем...

Update: я ж говорю, что видел ту процедуру слияния: динамическая структура данных

А вот тут - то, что я делал: Объединение 2 упорядоченных списков
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.