Реализовать стек и очередь через массивы и через указатели (в виде списка) – т. е. 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.

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

  1. Структура данных для реализации стека и очереди - массивы и указатели (в виде списка).
  2. Объявлены следующие переменные:
    • root: ссылка на вершину стека/очереди;
    • ans: переменная для хранения выбора пользователя;
    • n, d: переменные для ввода данных пользователем;
    • b: флаг для проверки корректности ввода.
  3. Функция add добавляет элемент в стек/очередь.
  4. Функция delall удаляет все элементы из стека/очереди.
  5. Функция showlast показывает последний элемент стека/очереди.
  6. Функция dellast удаляет последний элемент стека/очереди.
  7. Функция show_list выводит все элементы стека/очереди.
  8. Функция isempty проверяет, пуст ли стек/очередь.
  9. В основном цикле программы пользователю предлагается выбрать действие (ввод с клавиатуры).
  10. В зависимости от выбранного действия выполняются соответствующие операции (ввод числа, добавление элемента, удаление последнего элемента, вывод списка, проверка на пустоту и т.д.).

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


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

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

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