Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2007, 10:22   #1
Lesowik
Новичок
Джуниор
 
Регистрация: 27.11.2007
Сообщений: 1
Печаль

Доброго времени суток, уважаемые ПРОграммисты!

Мне очень нужна Ваша помощь в остаточном решении задачи. Постановка задачи такая:

"Даны два упорядоченных по неубыванию линейных односвязных списка. Сформируйте третий упорядоченный список, состоящий из элементов данных двух, которые входят хотя бы в один из них. Если элемент входит в оба данных списка один или более раз, то в третий список этот элемент поместите в одном экземпляре."

Из всего этого мне надо только упорядочить третий список, который состоит из первого и второго (записаны в третий один за другим). Вот тут у меня тупик, не могу догнать как. Помогите, пожалуйста!

Зарнее спасибо!


Вот код, который я уже написал:


Код:
Program lb_13_19;
uses crt;
type
    uk=^list;
    list= record
           x: integer;
           next: uk;
          end;
Var
 Blist, Blist1, Blist2 : uk;
 i,n1,n2,x,y : integer;

procedure CreateList (var Blist: uk);
Begin
 BList:= Nil;
End;

Procedure addlist (var Blist: uk; x : integer);
var
 uk1,uk2,uk3 : uk;
Begin
 New (uk1);
 uk1^.x:=x;
 if blist=nil then
 begin
  blist:=uk1;
  Blist^.next:=nil;
 end
 else
 if x<=Blist^.x then
 Begin
  uk1^.next:=Blist;
  blist:=uk1;
 end
 else
 Begin
  uk2:=blist;
  while (x>uk2^.x) or (uk2^.next=nil) do
  Begin
   uk3:=uk2;
   uk2:=uk2^.next;
  end;
  if x<=uk2^.x then
  Begin
   uk1^.next:=uk2;
   uk3^.next:=uk1;
  End
  else
  Begin
   uk2^.next:=uk1;
   uk1^.next:=nil;
  end;
 end;
end;
Procedure PrintList (blist: uk);
var
 uk1: uk;
Begin
 uk1:=blist;
 while uk1 <> nil do
 Begin
  write (uk1^.x:4);
  uk1:=uk1^.next;
 end;
end;
procedure DelList (var Blist:uk; x : integer);
var
 Flag : boolean;
 uk1,uk2: uk;
Begin
 uk1:=blist;
 if x=Blist^.x then
 Begin
  blist:=blist^.next;
  dispose (uk1);
  flag:=true
 end
 else
 Begin
  while (x<>uk1^.x) and (uk1^.next<>nil) do
  begin
   uk2:=uk1;
   uk1:=uk1^.next;
  end;
  if x= uk1^.x then
  Begin
   flag:=true;
   uk2^.next:=uk1^.next;
   dispose (uk1);
  end ;
 end;
end;
Procedure InsertList1 (Blist1:uk; var Blist:uk);
var
 uk1 : uk;
Begin
 uk1:=blist1;
 blist:=nil;
 while uk1 <> nil do
 Begin
  addlist (blist,uk1^.x);
  uk1:=uk1^.next;
 end;
end;
Procedure InsertList2 (Blist2:uk; var Blist:uk);
var
 uk1 : uk;
Begin
 uk1:=blist2;
 while uk1 <> nil do
 Begin
  addlist (blist,uk1^.x);
  uk1:=uk1^.next;
 end;
end;
Begin
 ClrScr;
 CreateList (blist1);
 CreateList (blist2);
 CreateList (blist);
 Writeln ('Введите количество элементов списка 1 :');
 readln (n1);
 Writeln ('Введите количество элементов списка 2 :');
 readln (n2);
 writeLN ('Введите список 1');
 for i:=1 to n1 do
 Begin
  read (x);
  addlist (blist1,x)
 end;
 writeLN ('Введите список 2');
 for i:=1 to n2 do
 Begin
  read (y);
  addlist (blist2,y)
 end;
 InsertList1 (blist1,blist);
 InsertList2 (blist2,blist);
 clrscr;
 Writeln ('Список1:');
 PrintList (blist1);
 writeln;
 Writeln ('‘ЇЁб®Є 2:');
 PrintList (blist2);
 Writeln;
 Writeln ('Результат: список 3:');
 PrintList (blist);
 GotoXY (22,24);
 Writeln (' Для окончания нажмите любую клавишу.');
 Readkey;
End.
Я думаю, что можно еще другими вариантами пользоваться, например сортировать при создании третьего списка, но как это сделать - не знаю.

Последний раз редактировалось AlDelta; 28.11.2007 в 10:37.
Lesowik вне форума Ответить с цитированием
Старый 23.10.2010, 21:38   #2
Юльчёнок
Новичок
Джуниор
 
Регистрация: 23.10.2010
Сообщений: 1
По умолчанию

Дан упорядоченный линейный по неубыванию односвязный список. Сформируйте второй упорядоченный список, в который входили бы по одному разу все повторяющиеся эле-менты первого списка.
Юльчёнок вне форума Ответить с цитированием
Старый 22.05.2011, 06:14   #3
Zhenja
Новичок
Джуниор
 
Регистрация: 16.11.2010
Сообщений: 2
По умолчанию

дан односвязный список,нужно все его положительные элементы отсортировать по возрастанию помогите плиз
Zhenja вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача Pascal на массив (нужна помощь) STIG_E70 Помощь студентам 4 18.06.2008 20:19
Проблемма с быстой сортировкой связанных списков Grind Помощь студентам 0 30.05.2008 20:33
Нужна помощь Pascal SweetOpium Помощь студентам 13 28.05.2008 18:11