Осуществить добавление и удаление указанного элемента списка - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

1.реализовать динамические структуры данных список, очередь, стеки. В каждом случае осуществить добавление и удаление указанного элемента. 2.написать программу, предназначенную для резервирования памяти в динамической области, куда будет вводиться массив вещественных чисел. 3.написать программу в которой создается n записей для хранения целых чисел. Все записи указывают одна на другую. Вывести числа в обратном порядке. помогите пожалуйста((

Решение задачи: «Осуществить добавление и удаление указанного элемента списка»

textual
Листинг программы
program Project1;
 
type
  //Основные данные.
  TData = Integer;
  //Указатель на элемент очереди.
  TPElem = ^TElem;
  //Элемент очереди.
  TElem = record
    Data : TData; //Основные данные.
    PNext : TPElem; //Указатель на следующий элемент очереди.
  end;
  //Очередь.
  TQueue = record
    PFirst, PLast : TPElem; //Указатели на первый и на последний элементы очереди.
  end;
 
//Начальная инициализация очереди. Внимание! Эту процедуру можно выполнять
//только в отношении пустой очереди. Иначе будут утечки памяти.
//Если очередь непуста, то следует применить вызов Free().
procedure Init(var aQueue : TQueue);
begin
  aQueue.PFirst := nil;
  aQueue.PLast := nil;
end;
 
//Добавление элемента в конец очереди.
procedure Push(var aQueue : TQueue; const aData : TData);
var
  PElem : TPElem;
begin
  New(PElem);
  PElem^.Data := aData;
  PElem^.PNext := nil;
  if aQueue.PFirst = nil then
    aQueue.PFirst := PElem
  else
    aQueue.PLast^.PNext := PElem;
  aQueue.PLast := PElem;
end;
 
//Изъятие элемента из начала очереди. Если очередь не пуста, то
//из начала очереди извлекается элемент и его значение возвращается
//через параметр aData. В этом случае функция возвращает True.
//Если очередь пуста, то операция отменяется и функция возвращает False.
function Pop(var aQueue : TQueue; var aData : TData) : Boolean;
var
  PElem : TPElem;
begin
  Pop := False;
  if aQueue.PFirst = nil then Exit;
 
  PElem := aQueue.PFirst;
  aData := PElem^.Data;
  aQueue.PFirst := PElem^.PNext;
  if aQueue.PFirst = nil then Init(aQueue);
  Dispose(PElem);
  Pop := True;
end;
 
//Удаление очереди из памяти (очистка очереди).
procedure Free(var aQueue : TQueue);
var
  Data : TData;
begin
  while Pop(aQueue, Data) do;
end;
 
//Распечатка очереди.
procedure Print(var aQueue : TQueue);
var
  Q : TQueue;
  Data : TData;
  i : Integer;
begin
  Init(Q);
  i := 0;
  while Pop(aQueue, Data) do begin
    Push(Q, Data);
    Inc(i);
    if i > 1 then Write(', ');
    Write(Data);
  end;
  Writeln;
  aQueue := Q;
end;
 
//Удаление из очереди элементов с заданным значением.
//Функция возвращает количество удалённых элементов.
function Del(var aQueue : TQueue; const aData : TData) : Integer;
var
  Q : TQueue;
  Data : TData;
  Cnt : Integer;
begin
  Del := 0;
  if aQueue.PFirst = nil then Exit;
 
  //Начальная инициализация вспомогательного очереди.
  Init(Q);
  //Переливаем из очереди aQueue в очередь Q элементы, значение которых
  //отличается от aData.
  Cnt := 0;
  while Pop(aQueue, Data) do
    if Data <> aData then
      Push(Q, Data)
    else
      Inc(Cnt);
  aQueue := Q;
  Del := Cnt;
end;
 
//Диалог добавления элементов в очередь.
procedure WorkAdd(var aQueue : TQueue);
var
  S : String;
  Data : TData;
  Code : Integer;
begin
  Writeln('Добавление элементов в очередь.');
  Writeln('Ввод каждого значения завершайте нажатием Enter.');
  Writeln('Чтобы прекратить ввод оставьте пустую строку и нажмите Enter.');
  repeat
    Write('Значение: ');
    Readln(S);
    if S = '' then begin
      Writeln('Ввод элемента отменён.');
      Code := 0;
    end else begin
      Val(S, Data, Code);
      if Code = 0 then begin
        Push(aQueue, Data);
        Writeln('Элемент добавлен.');
        Code := 1;
      end else
        Writeln('Неверный ввод. Повторите.');
    end;
  until Code = 0;
  Writeln('Ввод элементов очереди завершён.');
end;
 
var
  Q : TQueue;
  Data : TData;
  Cmd, Code, Cnt : Integer;
  S : String;
begin
  //Начальная инициализация очереди.
  Init(Q);
 
  repeat
    //Меню
    Writeln('Выберите действие:');
    Writeln('1: Добавление элементов в очередь.');
    Writeln('2: Распечатка очереди.');
    Writeln('3: Проверка очереди на пустоту.');
    Writeln('4: Удаление элементов по условию.');
    Writeln('5: Удаление очереди (очистка).');
    Writeln('6: Выход.');
    Write('Введите команду: ');
    Readln(Cmd);
    case Cmd of
      1: WorkAdd(Q);
      2:
        if Q.PFirst = nil then
          Writeln('Очередь пуста.')
        else begin
          Writeln('Содержимое очереди (начало - конец):');
          Print(Q);
        end;
      3:
        if Q.PFirst = nil then
          Writeln('Очередь пуста.')
        else
          Writeln('Очередь не пуста.');
      4:
      begin
        Writeln('Элементы с заданным значением будут удалены из очереди.');
        repeat
          Write('Задайте значение: ');
          Readln(S);
          Val(S, Data, Code);
          if Code <> 0 then
            Writeln('Неверный ввод. Повторите.');
        until Code = 0;
        Write('Удалить элементы с заданным значением? д/н, y/n: ');
        Readln(S);
        if (S <> '') and (S[1] in ['Д', 'д', 'Y', 'y']) then begin
          Cnt := Del(Q, Data);
          Writeln('Очередь обработана. Количество удалённых элементов: ', Cnt);
        end else
          Writeln('Операция отменена.');
      end;
      5, 6:
      begin
        Free(Q);
        Writeln('Очередь удалёна из памяти (очищена).');
      end;
      else
        Writeln('Незарегистрированная команда. Повторите ввод.');
    end;
  until Cmd = 6;
 
  Writeln('Работа программы завершена. Для выхода нажмите Enter.');
  Readln;
end.

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

  1. Создать переменную типа TData и присвоить ей значение 789.
  2. Создать переменную типа TPElem, присвоить ей указатель на созданную переменную TData и сохранить в ней значение переменной TData.
  3. Создать переменную типа TQueue и присвоить ей указатель на новый экземпляр структуры TQueue.
  4. Создать переменную типа Integer и присвоить ей значение 1.
  5. Вызвать функцию Push, передав в нее созданную переменную TQueue, значение переменной TData и переменную Integer.
  6. Вывести значение переменной TData.
  7. Вызвать функцию Pop, передав в нее созданную переменную TQueue, значение переменной TData и переменную Integer.
  8. Вывести значение переменной TData.
  9. Вызвать функцию Del, передав в нее созданную переменную TQueue, значение переменной TData и переменную Integer.
  10. Вывести значение переменной TData.
  11. Вызвать функцию Print, передав в нее созданную переменную TQueue.
  12. Вызвать функцию Free, передав в нее созданную переменную TQueue.

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


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

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

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