Реализация стек разными способами - C (СИ)
Формулировка задачи:
Требуется реализовать стек разными способами (требуется три программы):
1) Стек фиксированного размера на массиве
2) Динамически растущий стек на массиве
3) Динамически растущий стек на односвязном списке
Для каждого стека нужно реализовать функции заполнение стека значениями, "вталкивания" значений в стек, "выталкивания" значений из стека, очистка стека.
Решение задачи: «Реализация стек разными способами»
textual
Листинг программы
#include <stdio.h> #define STACK_SIZE 10 typedef struct fstack { int arr[STACK_SIZE]; int cnt; } fstack_t; #define fstack_push(s, n)\ if((s).cnt < STACK_SIZE)\ (s).arr[(s).cnt++] = n #define fstack_pop(s)\ if((s).cnt > 0)\ --((s).cnt) #define fstack_init(s) (s).cnt = 0 #define fstack_empty(s) ((s).cnt == 0) #define fstack_top(s) (s).arr[(s).cnt - 1] #define fstack_clear(s) (s).cnt = 0 int main(void){ int i; fstack_t st; fstack_init(st); for(i = 0; i < 10; ++i) fstack_push(st, i); while(! fstack_empty(st)){ printf("%d ", fstack_top(st)); fstack_pop(st); } return 0; }
Объяснение кода листинга программы
- Включаем файл стандартного ввода/вывода
- Определяем размер стека в 10 элементов, используя макро STACK_SIZE.
- Создаем структуру fstack_t, которая представляет стек. Содержимое стека хранится в массиве arr типа int, а переменная cnt отслеживает количество элементов в стеке.
- Макро fstack_push(s, n) добавляет элемент n в стек s. Если размер стека не превышает STACK_SIZE, то n присваивается элементу с индексом cnt в массиве arr и cnt увеличивается на 1.
- Макро fstack_pop(s) удаляет верхний элемент стека s. Если стек не пустой, то уменьшается значение cnt.
- Макро fstack_init(s) инициализирует переменную cnt в стеке s значением 0.
- Макро fstack_empty(s) возвращает 1, если стек s пустой, и 0 в противном случае.
- Макро fstack_top(s) возвращает значение элемента с индексом cnt-1 в массиве arr стека s.
- Макро fstack_clear(s) устанавливает значение cnt в стеке s равным 0.
- В функции main создаем экземпляр стека st типа fstack_t.
- Используя fstack_init(st), инициализируем переменную cnt в стеке st значением 0.
- С помощью цикла for добавляем 10 элементов в стек st, используя fstack_push(st, i).
- Используя цикл while, который выполняется до тех пор, пока стек не пустой, выводим значение верхнего элемента стека, используя fstack_top(st), и удаляем его с помощью fstack_pop(st).
- Завершаем программу, возвращая 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д