Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 55

Выполнить упорядочение динамической структуры данных (линейного списка) по полю year

11.03.2015, 19:09. Показов 633. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ввести несколько записей (первое поле year которых представляет год выпуска
автомобиля, а второе поле model представляет модель автомобиля), последо-
вательно записать записи в динамическую структуру данных (линейный список),
выполнить упорядочение динамической структуры данных (линейного списка)
по полю year, после чего последовательно считать записи с динамической структуры
данных (линейного списка) и вывести их на экран монитора.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.03.2015, 19:09
Ответы с готовыми решениями:

Упорядочение линейного списка
Имеются N линейных списков(в данном случае 4), имеющих одинаковую структуру и упорядоченных по возрастанию некоторого ключевого поля....

Сортировка линейного списка по полю year
Господа подскажите как осуществить сортировку списка по полю year? При этом неважно по убыванию или возрастанию, метод сортировки тоже...

Динамические структуры данных. Формирование линейного списка.
Текст помощи для некоторой программы организован в виде линейного списка. Каждая компонента текста помощи содержит термин (слово) и...

4
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
13.03.2015, 23:08
Например, так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
type
  TAuto = record
    year: Integer;
    model: String[31];
  end;
  
  PNode = ^TNode;
  TNode = record
    next: PNode;
    data: TAuto;
  end;
 
  TLessFunc = function (const a, b: TNode): Boolean;
 
procedure Sort(var lst: PNode; less: TLessFunc);
  procedure swap(var a, b: PNode);
  var t: PNode; 
  begin
    t:=a; a:=b; b:=t;
    t:=a^.next; a^.next:=b^.next; b^.next:=t;
  end;
var
  p: ^PNode;
  done: Boolean;
begin
  repeat
    done:=True; p:=@lst;
    while (p^<>nil) and (p^^.next<>nil) do begin
      if less(p^^.next^, p^^) then begin
        swap(p^,p^^.next);
        done:=False;
      end;
      p:=@p^^.next;
    end;
  until done;
end;
 
function  NewNode(aData: TAuto; aNext: PNode): PNode;
var p: PNode;
begin
  New(p); NewNode:=p;
  p^.data:=aData;
  p^.next:=aNext;
end;
 
{$F+}
function  lessYear(const a, b: TNode): Boolean;
begin
  lessYear:=a.data.year<b.data.year;
end;
 
var
  lst, p: PNode;
  a: TAuto;
begin
  lst:=nil;
  WriteLn('Введите сведения об автомобилях, окончание ввода - 0:');
  with a do
    repeat
      Write('Год и модель: '); ReadLn(year, model);
      if year=0 then Break;
      while (Length(model)>0) and (model[1]=' ') do Delete(model,1,1);
      lst:=NewNode(a,lst);
    until False;
  WriteLn('Содержимое списка:');
  p:=lst;
  while p<>nil do with p^,p^.data do begin
    WriteLn(year:6,' - ',model);
    p:=next;
  end;
  Sort(lst, lessYear);
  WriteLn('Содержимое сортированного списка:');
  p:=lst;
  while p<>nil do with p^,p^.data do begin
    WriteLn(year:6,' - ',model);
    p:=next;
    Dispose(lst); lst:=p;
  end;
end.
1
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,433
14.03.2015, 19:20
Взято из FAQ и чуть доделано.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
Program Spisok;
uses
  crt; {Для использования readkey и clrscr}
type
  Tinf=record
    year:integer;
    model:string[128];
  end;
  {тип данных, который будет храниться в элементе списка}
 
  List=^TList;  {Указатель на элемент типа TList}
  TList=record {А это наименование нашего типа "запись" обычно динамические структуры описываются через запись}
    data:TInf;  {данные, хранимые в элементе}
    next:List;   {указатель на следующий элемент списка}
  end;
 
{Процедура добавления нового элемента в односвязный список}
procedure AddElem(var spis1:List;znach1:tinf);
var
  tmp:List;
begin
  if spis1=nil then {Проверяем не пуст ли список, если пуст, то }
  begin
    GetMem(spis1,sizeof(TList));  {создаём его первый элемент}
    tmp:=spis1;
  end
  else {в случае если список не пуст}
  begin
    tmp:=spis1;
    while tmp^.next<>nil do
      tmp:=tmp^.next; {ставим tmp на последний элемент списка}
    GetMem(tmp^.next,sizeof(TList)); {создаём следующий элемент}
    tmp:=tmp^.next;   {переносим tmp на новый элемент}
  end;
  tmp^.next:=nil; {зануляем указатель}
  tmp^.data.year:=znach1.year; {заносим значение}
  tmp^.data.model:=znach1.model; {заносим значение}
end;
 
{процедура печати списка
полностью расписана при работе со стеком}
procedure Print(spis1:List);
begin
  if spis1=nil then
  begin
    writeln('Список пуст.');
    exit;
  end;
  while spis1<>nil do
  begin
    Write(spis1^.data.model, ', ',spis1^.data.year);
    spis1:=spis1^.next;
    writeln;
  end;
end;
 
{процедура удаления списка
 полностью расписана при работе со стеком}
Procedure FreeStek(spis1:List);
var
  tmp:List;
begin
  while spis1<>nil do
  begin
    tmp:=spis1;
    spis1:=spis1^.next;
    FreeMem(tmp,SizeOf(Tlist));
  end;
end;
 
{процедура поиска в списке
 полностью расписана при работе со стеком}
Function SearchElemZnach(spis1:List;znach1:integer):List;
begin
  if spis1<>nil then
    while (Spis1<>nil) and (znach1<>spis1^.data.year) do
      spis1:=spis1^.next;
  SearchElemZnach:=spis1;
end;
 
 
{Процедура сортировки "пузырьком" с изменением только данных
 полностью расписана при работе со стеком}
procedure SortBublInf(nach:list);
var
  tmp,rab:List;
  tmps:Tinf;
begin
  GetMem(tmp,SizeOf(Tlist));
  rab:=nach;
  while rab<>nil do
  begin
    tmp:=rab^.next;
    while tmp<>nil do
    begin
      if tmp^.data.year>rab^.data.year then
      begin
        tmps:=tmp^.data;
        tmp^.data:=rab^.data;
        rab^.data:=tmps
      end;
      tmp:=tmp^.next
    end;
    rab:=rab^.next
  end
end;
 
{Процедура сортировки "пузырьком" с изменением только адресов
 полностью расписана при работе со стеком}
procedure SortBublLink(nach:List);
var
  tmp,pered,pered1,pocle,rab:List;
begin
  rab:=nach;
  while rab<>nil do
  begin
    tmp:=rab^.next;
    while tmp<>nil do
    begin
      if tmp^.data.year<rab^.data.year then
      begin
        pered:=nach;
        pered1:=nach;
        if rab<>nach then
          while pered^.next<>rab do pered:=pered^.next;
        while pered1^.next<>tmp do pered1:=pered1^.next;
        pocle:=tmp^.next;
        if rab^.next=tmp then
        begin
          tmp^.next:=rab;
          rab^.next:=pocle
        end
        else
        begin
          tmp^.next:=rab^.next;
          rab^.next:=pocle;
        end;
        if pered1<>rab then
          pered1^.next:=rab;
        if rab<>nach then
          pered^.next:=tmp
        else
          nach:=tmp;
        pered1:=tmp;
        tmp:=rab;
        rab:=pered1;
      end;
      tmp:=tmp^.next;
    end;
    rab:=rab^.next;
  end;
end;
 
var
  Spis,tmpl:List;
  znach:Tinf;
  i,n:integer;
begin
  Spis:=nil;
  write('Введите количество добавляемых элементов: ');  readln(n);
  for i:=1 to n do
    begin
      write('Введите год выпуска: ');  readln(znach.year);
      write('Введите модель: ');  readln(znach.model);
      AddElem(Spis,znach);
    end;
  Print(Spis);
  if Spis=nil then
    begin
      Write('Список пуст.');
    end
  else
    begin
      SortBublLink(Spis);
      Write('Список отсортирован.');
    end;
  writeln;
  Print(Spis);
  readkey;
 
  FreeStek(Spis);
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
14.03.2015, 23:13
Тема -- дубль (Тема-кросспост объединена с данной темой, ссылка удалена)

GetMem в данном случае -- плохой совет.
1
15.03.2015, 22:41

Не по теме:

bormant, кросспост данной темы удалён. Контент перенесён в данную тему.

Dima23, не плодите дублей, это запрещено. Чтобы поднять актуальность темы, достаточно написать в тему новое сообщение.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.03.2015, 22:41
Помогаю со студенческими работами здесь

Сравнить первый элемент линейного списка L1 со всеми элементами линейного списка L2
Как сравнить первый элемент линейного списка L1 со всеми элементами линейного списка L2

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

Разработка динамической структуры данных: deque
Здравствуйте . Есть ли у кого то пример программы записи динамической структуры в бинарный файл, и вывод оттуда . Двухсторонняя очередь ,...

Создание динамической структуры данных типа список
Если кто поможет, буду благодарен! :yahoo: Надо записать в стек 5 целых чисел. Затем поменять местами 1-й с 4-м элементом в стеке, не...

Выводом данных из динамической структуры между функциями
Некорректно выводится информация из динамической структуры. Может затирается информация после основной функции? struct procStruct ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru