Однонаправленный список - 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.

Объяснение кода листинга программы

  1. Типы данных и объявления переменных:
    • tData = integer (тип данных: целое число)
    • tList = ^tNode (тип данных: указатель на запись tNode)
    • tNode = record (тип данных: запись)
      • data: tData (поле: данные)
      • next: tList (поле: следующий)
    • List : tList (объявление переменной: список)
  2. Процедура PrintList(List : tList):
    • Выводит элементы списка в порядке их следования
    • Если список пуст, выводит пусто
  3. Функция AddList(data : tData; next : tList) : tList:
    • Создает новый узел списка
    • Записывает данные в новый узел
    • Возвращает указатель на новый узел
  4. Процедура AddBefore(num : Integer; data : tData; var List : tList):
    • Проверяет, существует ли элемент с заданным номером в списке
    • Если элемент существует, добавляет новый элемент перед ним
    • Если элемента не существует, выводит сообщение об ошибке
  5. Процедура AddAfter(num : Integer; data : tData; List : tList):
    • Проверяет, существует ли элемент с заданным номером в списке
    • Если элемент существует, добавляет новый элемент после него
    • Если элемента не существует, выводит сообщение об ошибке
  6. Тестовое использование:
    • Создание списка с тремя элементами (1, 3, 5)
    • Вывод списка
    • Добавление элемента перед элементом с номером 4 (результат: 1, 3, 4, 5)
    • Вывод списка
    • Добавление элемента после элемента с номером 3 (результат: 1, 3, 4, 5, 6)
    • Вывод списка
  7. Примечание:
    • В данном коде не реализованы функции для вставки элемента в середину списка и удаления элементов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы