Реализовать стек и очередь через массивы и через указатели (в виде списка) – т. е. 4 структу - PascalABC.NET
Формулировка задачи:
Для массивов выделить изначально 5 ячеек (при нехватке памяти - выделять дополнительно в 2 раза больше). Пустой ячейкой считать ячейку с нулевым значением, хотя, конечно, в "реальности" - это не правильно.
Наличие меню с такими пунктами:
1. Стек через массив
2. Стек через указатели (односвязным линейным списком)
3. Очередь через массив (в виде кругового буфера)
4. Очередь через указатели (односвязным линейным списком)
В каждом пункте подменю:
1. Вставить
2. Удалить
3. Распечатать
4. Показать верхний
5. Очистить
6. Проверить, пусто ли
7. Выход из пункта
При выводе на консоль печатать, начиная с самого левого элемента и заканчивая самым правым, даже, если там пустые значения
Решение задачи: «Реализовать стек и очередь через массивы и через указатели (в виде списка) – т. е. 4 структу»
textual
Листинг программы
Program List; Uses crt; type node = ^rnode; rnode = record data:integer; next:node; end; var root:node; ans:integer; n,d:integer; b:boolean; procedure add(var r:node;d:integer); var c:node; begin if r=nil then begin new(r); r^.data:=d; r^.next:=nil; end else begin c:=r; while (c^.next<>nil) do c:=c^.next; new(c^.next); c^.next^.data:=d; c^.next^.next:=nil; end; end; procedure delall(var r:node);//удаляем весь список var c,t:node; begin c:=r; while c<>nil do//удаляем как обычный односвязный список begin t:=c; c:=c^.next; dispose(t); end; r:=nil; end; function showlast(r:node):integer; var c:node; begin c:=r; if c<>nil then begin while (c^.next<>nil) do c:=c^.next; showlast:=c^.data; end else showlast:=0; end; procedure dellast(var r:node); var c:node; begin if r<>nil then begin if r^.next<>nil then begin c:=r; while (c^.next^.next<>nil) do c:=c^.next; dispose(c^.next); c^.next:=nil; end else begin dispose(r); r:=nil; end; end; end; procedure show_list(r:node); var c:node; begin if r=nil then writeln('List is empty') else begin c:=r; while c<>nil do begin write(c^.data:8); c:=c^.next; end; writeln; end; end; function isempty(r:node):boolean; begin isempty:=(r=nil); end; begin root:=nil; repeat clrscr; writeln('List:'); show_list(root); writeln('Choose action'); writeln('1 - Enter (to the end)'); writeln('2 - Delete (from the end)'); writeln('3 - Print'); writeln('4 - Show from top'); writeln('5 - Clear'); writeln('6 - Check for empty'); writeln('7 - Exit'); readln(ans); case ans of 1: begin writeln('Enter number'); readln(d); add(root,d); end; 2: dellast(root); 3: begin show_list(root); writeln('Press Enter'); readln; end; 4: begin writeln(showlast(root)); writeln('Press Enter'); readln; end; 5: delall(root); 6: begin if isempty(root) then writeln('List is epty') else writeln('List is not empty'); writeln('Press Enter'); readln; end; end; until ans=7; end.
Объяснение кода листинга программы
- Структура данных для реализации стека и очереди - массивы и указатели (в виде списка).
- Объявлены следующие переменные:
- root: ссылка на вершину стека/очереди;
- ans: переменная для хранения выбора пользователя;
- n, d: переменные для ввода данных пользователем;
- b: флаг для проверки корректности ввода.
- Функция add добавляет элемент в стек/очередь.
- Функция delall удаляет все элементы из стека/очереди.
- Функция showlast показывает последний элемент стека/очереди.
- Функция dellast удаляет последний элемент стека/очереди.
- Функция show_list выводит все элементы стека/очереди.
- Функция isempty проверяет, пуст ли стек/очередь.
- В основном цикле программы пользователю предлагается выбрать действие (ввод с клавиатуры).
- В зависимости от выбранного действия выполняются соответствующие операции (ввод числа, добавление элемента, удаление последнего элемента, вывод списка, проверка на пустоту и т.д.).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д