Сортировка списка

Общие вопросы: версии и диалекты, синтаксис языка, cтруктуры и типы данных (массивы, строки, списки...), обработка данных и т.д.
Ответить
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

08 мар 2009, 01:41

С клавиатуры вводятся слова и помещаются в D-список (info:string). Построить ещё один список, который содержит элементы исходного списка, расположенные по возрастанию.Вид списка может быть любой. Я делал на основе очереди. На второй части зациклился. Есть у кого какие идеи?
Нет религии выше истины
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

08 мар 2009, 11:46

Ранее я уже показал, как производится вставка элемента на определенное место. Теперь создать новый список. А затем последовательно брать элементы из исходного и добавлять в новый, но предварительно вычислять местоположение.

Берем очередной элемент и его строку S.
Просматриваем новый список сначала, и бежим по нему до тех пор пока S < строки следующего элемента. После текущего элемента и надо произвести вставку.
Особое условия - это когда следующего элемента нет (добавление в конец) и когда S < строки первого элемента (добавление в начало)
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

10 мар 2009, 13:23

Посмотрите, пожалуйста, эту процедуру.

Код: Выделить всё

procedure Sort_Spisok;
begin
  D1:=head;
  D1^.info:=D^.info;
  repeat
    while D<>nil do  begin
      if (D^.info > D1^.info) then D1^.info:=D^.info;
      D:=D^.next;
    end;
    D1:=D1^.next;
  until D1=nil;
end;
Нет религии выше истины
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

10 мар 2009, 13:37

Ну что ее смотреть? Опять глобальные переменные....
Для начала посмотрите, все ли там точно осталось после моей правки?
(Вы тэг закрыли неправильно.)
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

10 мар 2009, 14:23

Вот немного подправил.

Код: Выделить всё

procedure Sort_Spisok(list:pitem);
var D1:pitem;
begin
  D1:=head;
  D1^.info:=list^.info;
  repeat 
    while listnil do   
    begin    
      if (list^.info > D1^.info) then 
        D1^.info:=list^.info;   
      list:=list^.next;   
    end; 
    D1:=D1^.next;
  until D1=nil;
end;
Нет религии выше истины
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

11 мар 2009, 11:21

Разобрался. Naeel, cпаcибо.
Нет религии выше истины
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

12 мар 2009, 11:59

dr.Jekill, отредатировал ваш пост
убрал тэг, сформировал нужную структуру (вы же не думали что этот тэг сам отступы сформирует? - он только выводит код моноширинным шрифтом и не даёт движку начальные пробелы в строке резать)
далее выделил код и нажал кнопку - появился тэг с двух сторон выделения - пост сообщения - всё нормально
Изображение
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

12 мар 2009, 12:00

ещё можно так:
[syntax=pascal]
procedure Sort_Spisok(list :p item);
var D1 :p item;
begin
D1:=head;
D1^.info:=list^.info;
repeat
while listnil do
begin
if (list^.info > D1^.info) then
D1^.info:=list^.info;
list:=list^.next;
end;
D1:=D1^.next;
until D1=nil;
end;
[/syntax]

для этого нужно вручную написать тэг [noparse][syntax=pascal] ваш код [/syntax] [/noparse]
Изображение
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

12 мар 2009, 13:12

Переставил IE на FireFox все стало нормально функционировать.
Нет религии выше истины
Ответить