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

Динамические структуры данных: Реализовать функции для работы с двунаправленным списком

02.01.2013, 23:28. Показов 1998. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализовать следующие функции для работы с двунаправленным списком:
- создание
- удаление всех элементов с указанным значением
- добавление элемента в конец списка
- вывод списка на экран
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.01.2013, 23:28
Ответы с готовыми решениями:

Реализовать следующие функции для работы с двунаправленным списком
Помогите пожалуйста написать программу. Задание: Реализовать следующие функции для работы с двунаправленным списком: -...

Библиотечный модуль для работы с двунаправленным списком записей
Здравствуйте. Помогите пожалуйста... В приложении к заданию имеется файл библиотечного модуля для работы с двунаправленным списком...

Реализовать функции для работы с однонаправленным списком
Реализовать функции для работы с однонаправленным списком Реализовать следующие функции для работы с однонаправленным списком: -...

1
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
03.01.2013, 01:13
Лучший ответ Сообщение было отмечено Evelin_18 как решение

Решение

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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
program Project1;
 
type
  //Тип основных данных.
  TData = Integer;
  //Указатель на элемент списка.
  TPElem = ^TElem;
  //Элемент списка.
  TElem = record
    Data : TData; //Основные данные.
    PPrev, PNext : TPElem; //Указатели на предыдущий и на следующий элементы.
  end;
  //Тип, описывающий список.
  TDList = record
    Cnt : Integer; //Количество элементов в списке.
    PFirst, PLast : TPElem; //Указатели на первый и на последний элементы списка.
  end;
 
//Процедура инициализации списка. Внимание! Эту процедуру можно применять
//только в отношении пустого списка! Иначе будет утечка памяти.
procedure Init(var aList : TDList);
begin
  aList.Cnt := 0;
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
//Добавление элемента в конец списка.
procedure Add(var aList : TDList; const aData : TData);
var
  PElem : TPElem;
begin
  New(PElem);
  PElem^.Data := aData;
  PElem^.PPrev := nil;
  PElem^.PNext := nil;
  if aList.PFirst = nil then begin
    aList.PFirst := PElem;
    aList.PLast := PElem;
  end else begin
    aList.PLast^.PNext := PElem;
    PElem^.PPrev := aList.PLast;
    aList.PLast := PElem;
  end;
  Inc(aList.Cnt);
end;
 
//Удаление всего списка из памяти и инициализация.
procedure Free(var aList : TDList);
var
  PElem, PDel : TPElem;
begin
  PElem := aList.PFirst;
  while PElem <> nil do begin
    PDel := PElem;
    PElem := PElem^.PNext;
    Dispose(PDel);
  end;
  Init(aList);
end;
 
//Распечатка элементов списка.
procedure Print(const aList : TDList);
var
  PElem : TPElem;
begin
  if aList.PFirst = nil then Exit;
 
  PElem := aList.PFirst;
  while PElem <> nil do begin
    if PElem <> aList.PFirst then Write(', ');
    Write(PElem^.Data);
    PElem := PElem^.PNext;
  end;
  Writeln;
end;
 
//Удаление элемента из списка.
procedure Del(var aList : TDList; const aPDel : TPElem);
begin
  if (aList.PFirst = nil) or (aPDel = nil) then Exit;
 
  if aPDel^.PPrev <> nil then
    aPDel^.PPrev^.PNext := aPDel^.PNext
  else
    aList.PFirst := aPDel^.PNext;
 
  if aPDel^.PNext <> nil then
    aPDel^.PNext^.PPrev := aPDel^.PPrev
  else
    aList.PLast := aPDel^.PPrev;
 
  Dispose(aPDel);
end;
 
//Удаление из списка всех элементов с заданным значением.
//Функция возвращает количество удалённых элементов.
function DelByVal(var aList : TDList; const aData : TData) : Integer;
var
  PElem, PDel : TPElem;
  Cnt : Integer;
begin
  Cnt := 0;
  PElem := aList.PFirst;
  while PElem <> nil do
    if PElem^.Data = aData then begin
      PDel := PElem;
      PElem := PElem^.PNext;
      Del(aList, PDel);
      Inc(Cnt);
    end else
      PElem := PElem^.PNext;
 
  DelByVal := Cnt;
end;
 
//Диалог добавления элементов в список.
procedure WorkAdd(var aList : TDList);
var
  S : String;
  Data : TData;
  Code : Integer;
begin
  Writeln('Добавьте элементы в список.');
  Writeln('Ввод каждого значения завершайте нажатием Enter.');
  Writeln('Чтобы прекратить ввод оставьте пустую строку и нажмите Enter.');
  repeat
    Write('Элемент №', aList.Cnt + 1, ': ');
    Readln(S);
    if S = '' then begin
      Writeln('Отмена.');
      Code := 0;
    end else begin
      Val(S, Data, Code);
      if Code = 0 then begin
        Add(aList, Data);
        Writeln('Элемент добавлен.');
        Code := 1;
      end else
        Writeln('Неверный ввод. Повторите.');
    end;
  until Code = 0;
  Writeln('Ввод элементов списка завершён.');
end;
 
var
  L : TDList;
  Data : TData;
  Cmd, Code, Cnt : Integer;
  S : String;
begin
  //Начальная инициализация списка.
  Init(L);
 
  repeat
    //Меню
    Writeln('Выберите действие:');
    Writeln('1: Добавление элементов в список.');
    Writeln('2: Распечатка всего списка.');
    Writeln('3: Удаление элементов по условию.');
    Writeln('4: Удаление всего списка (очистка).');
    Writeln('5: Выход.');
    Write('Введите команду: ');
    Readln(Cmd);
    case Cmd of
      1: WorkAdd(L);
      2:
        if L.PFirst = nil then
          Writeln('Список пуст.')
        else begin
          Writeln('Элементы списка:');
          Print(L);
        end;
      3:
      begin
        repeat
          Writeln('Элементы с заданным значением будут удалены из списка.');
          Writeln('Чтобы прервать операцию оставьте пустую строку и нажмите Enter.');
          Write('Значение: ');
          Readln(S);
          if S = '' then begin
            Writeln('Операция отменена.');
            Code := 0;
          end else begin
            Val(S, Data, Code);
            if Code = 0 then begin
              Cnt := DelByVal(L, Data);
              Writeln('Список обработан. Количество удалённых элементов: ', Cnt);
              Code := 1;
            end else
              Writeln('Неверный ввод. Повторите.');
          end;
        until Code = 0;
      end;
      4, 5:
      begin
        Free(L);
        Writeln('Список удалён из памяти (очищен).');
      end;
      else
        Writeln('Незарегистрированная команда. Повторите ввод.');
    end;
  until Cmd = 5;
 
  Writeln('Работа программы завершена. Для выхода нажмите Enter.');
  Readln;
end.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.01.2013, 01:13
Помогаю со студенческими работами здесь

Реализовать следующие функции для работы с двунаправленные списком:
Реализовать следующие функции для работы с двунаправленные списком: - добавление элемента в начало списка - вывод на экран и...

Динамические структуры данных: работа со списком
Составить список компьютерных классов, указав номер кабинета, этаж, количество компьютеров, стоимость одного компьютера, год покупки...

Пример базы данных с двунаправленным списком.
Добрый вечер. Прошу помочь мне найти какой-либо исходник программы на тему &quot;Ведения БД (с использованием двунаправленного списка)....

Как реализовать динамические структуры данных (стеки, списки, деревья и т.д.)
В общем такая ситуация, мне необходимо оперировать большими матрицами, которые связанны между собой в список, при этом необходимо изменять...

Реализовать автоматизированную информационную систему железнодорожного вокзала (динамические структуры данных)
Задание работы: Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru