Осуществить добавление и удаление указанного элемента списка - 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.
Объяснение кода листинга программы
- Создать переменную типа TData и присвоить ей значение 789.
- Создать переменную типа TPElem, присвоить ей указатель на созданную переменную TData и сохранить в ней значение переменной TData.
- Создать переменную типа TQueue и присвоить ей указатель на новый экземпляр структуры TQueue.
- Создать переменную типа Integer и присвоить ей значение 1.
- Вызвать функцию Push, передав в нее созданную переменную TQueue, значение переменной TData и переменную Integer.
- Вывести значение переменной TData.
- Вызвать функцию Pop, передав в нее созданную переменную TQueue, значение переменной TData и переменную Integer.
- Вывести значение переменной TData.
- Вызвать функцию Del, передав в нее созданную переменную TQueue, значение переменной TData и переменную Integer.
- Вывести значение переменной TData.
- Вызвать функцию Print, передав в нее созданную переменную TQueue.
- Вызвать функцию Free, передав в нее созданную переменную TQueue.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д