Создать стек со случайными целыми числами. Удалить минимальный элемент - Free Pascal
Формулировка задачи:
Создать стек со случайными целыми числами. Удалить минимальный элемент.
Решение задачи: «Создать стек со случайными целыми числами. Удалить минимальный элемент»
textual
Листинг программы
type titem = integer; pstack = ^tstack; tstack = record data : titem; next : pstack; end; procedure push(var s : pstack; X : titem); var q : pstack; begin new(q); q^.next := s; q^.data := X; s := q; end; function pop(var s : pstack) : titem; var q : pstack; begin result := s^.data; q := s; s := s^.next; dispose(q); end; procedure print(s : pstack); begin while s <> nil do begin write(s^.data:4); s := s^.next; end; writeln; end; var s1 : pstack; s2 : pstack ; i, min_i : integer; it, min : titem; begin s1:=nil; s2:=nil; randomize; for i := 1 to 10 do push(s1, random(50)); print(s1); min := 50; i := 0; while (s1<>nil) do begin it := pop(s1); inc(i); if it < min then begin min_i := i; min := it; end; push(s2, it); end; while (s2<>nil) do begin it := pop(s2); if i <> min_i then push(s1, it); dec(i); end; print(s1); end.
Объяснение кода листинга программы
В данном коде используется стек, созданный на основе динамического массива, который содержит случайные целые числа. В этом коде есть следующие процедуры и функции:
- push: Эта процедура добавляет новый элемент в стек. Она создает новый указатель на стек, присваивает его полю
nextнового элемента и присваивает значение поляdataнового элемента. - pop: Эта функция удаляет верхний элемент из стека и возвращает его значение. Она получает указатель на верхний элемент стека, сохраняет его значение в переменной типа
titem, удаляет текущий элемент и возвращает сохраненное значение. - print: Эта процедура выводит все элементы стека. Она проходит через каждый элемент стека, начиная с верхнего, и выводит значение каждого элемента.
- s1: Это переменная типа
pstack, которая является стеком для хранения чисел. - s2: Это переменная типа
pstack, которая используется для хранения чисел во время процесса поиска минимального числа. - i: Это переменная типа
integer, которая используется для отслеживания индекса текущего элемента в стеке. - min_i: Это переменная типа
integer, которая используется для хранения индекса минимального числа в стеке. - it: Это переменная типа
titem, которая используется для временного хранения значения текущего элемента при его удалении из стека. - min: Это переменная типа
titem, которая используется для хранения минимального числа. Вот список действий, выполняемых в коде: - Создается новый стек
s1и инициализируется как пустой. - В цикле добавляются 10 случайных чисел в стек
s1с помощью функцииpush. - Выводится содержимое стека
s1с помощью функцииprint. - Инициализируется переменная
minзначением 50 и переменнаяiзначением 0. - В цикле, пока стек
s1не пуст, происходит следующее:- Значение текущего элемента (определенного как
it) удаляется из стекаs1с помощью функцииpop. - Переменная
iувеличивается на 1. - Если значение
itменьше значенияmin, то обновляются значенияmin_iиminдля хранения индекса и значения минимального числа соответственно. - Значение
itдобавляется в стекs2с помощью функцииpush.
- Значение текущего элемента (определенного как
- В цикле, пока стек
s2не пуст, происходит следующее:- Значение текущего элемента (определенного как
it) удаляется из стекаs2с помощью функцииpop. - Если значение
iне равно значениюmin_i, то значениеitдобавляется в стекs1с помощью функцииpush. - Переменная
iуменьшается на 1.
- Значение текущего элемента (определенного как
- Выводится содержимое стека
s1с помощью функцииprint.