Однонаправленный список - Pascal
Формулировка задачи:
не работают процедуры до и после добавления последнего элемента
Решение задачи: «Однонаправленный список»
textual
Листинг программы
type tData = integer; tList = ^tNode; tNode = record data: tData; next: tList; end; procedure PrintList(List : tList); begin Write('Элементы списка:'); if List = nil then Write(' пусто') else repeat Write(#32, List^.data); List := List^.next; until List = nil; WriteLn('.'); end; function AddList(data : tData; next : tList) : tList; var cur : tList; begin New(cur); cur^.data := data; cur^.next := next; AddList := cur; end; procedure AddBefore(num : Integer; data : tData; var List : tList); var pred, cur : tList; err : String; begin str(num, err); err := 'Нет элемента с номером ' + err; if List = nil then WriteLn(err) else begin pred := nil; cur := List; while (num > 1) and (cur <> nil) do begin pred := cur; cur := cur^.next; dec(num); end; if cur = nil then WriteLn(err) else begin WriteLn('Элемент с заданным номером: ', cur^.data); if pred = nil then List := AddList(data, List) else pred^.next := AddList(data, cur); WriteLn('Перед ним добавлен элемент: ', data); end; end; end; procedure AddAfter(num : Integer; data : tData; List : tList); var cur : tList; err : String; begin str(num, err); err := 'Нет элемента с номером ' + err; if List = nil then WriteLn(err) else begin cur := List; while (num > 1) and (cur <> nil) do begin cur := cur^.next; dec(num); end; if cur = nil then WriteLn(err) else begin WriteLn('Элемент с заданным номером: ', cur^.data); cur^.next := AddList(data, cur^.next); WriteLn('После него добавлен элемент: ', data); end; end; end; var List : tList; begin List := nil; PrintList(List); List := AddList(5, nil); List := AddList(3, List); List := AddList(1, List); PrintList(List); AddBefore(4, 4, List); PrintList(List); AddBefore(3, 4, List); PrintList(List); AddAfter(2, 2, List); PrintList(List); end.
Объяснение кода листинга программы
- Типы данных и объявления переменных:
- tData = integer (тип данных: целое число)
- tList = ^tNode (тип данных: указатель на запись tNode)
- tNode = record (тип данных: запись)
- data: tData (поле: данные)
- next: tList (поле: следующий)
- List : tList (объявление переменной: список)
- Процедура PrintList(List : tList):
- Выводит элементы списка в порядке их следования
- Если список пуст, выводит
пусто
- Функция AddList(data : tData; next : tList) : tList:
- Создает новый узел списка
- Записывает данные в новый узел
- Возвращает указатель на новый узел
- Процедура AddBefore(num : Integer; data : tData; var List : tList):
- Проверяет, существует ли элемент с заданным номером в списке
- Если элемент существует, добавляет новый элемент перед ним
- Если элемента не существует, выводит сообщение об ошибке
- Процедура AddAfter(num : Integer; data : tData; List : tList):
- Проверяет, существует ли элемент с заданным номером в списке
- Если элемент существует, добавляет новый элемент после него
- Если элемента не существует, выводит сообщение об ошибке
- Тестовое использование:
- Создание списка с тремя элементами (1, 3, 5)
- Вывод списка
- Добавление элемента перед элементом с номером 4 (результат: 1, 3, 4, 5)
- Вывод списка
- Добавление элемента после элемента с номером 3 (результат: 1, 3, 4, 5, 6)
- Вывод списка
- Примечание:
- В данном коде не реализованы функции для вставки элемента в середину списка и удаления элементов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д