Реализация стек разными способами - 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;
}

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

  1. Включаем файл стандартного ввода/вывода
  2. Определяем размер стека в 10 элементов, используя макро STACK_SIZE.
  3. Создаем структуру fstack_t, которая представляет стек. Содержимое стека хранится в массиве arr типа int, а переменная cnt отслеживает количество элементов в стеке.
  4. Макро fstack_push(s, n) добавляет элемент n в стек s. Если размер стека не превышает STACK_SIZE, то n присваивается элементу с индексом cnt в массиве arr и cnt увеличивается на 1.
  5. Макро fstack_pop(s) удаляет верхний элемент стека s. Если стек не пустой, то уменьшается значение cnt.
  6. Макро fstack_init(s) инициализирует переменную cnt в стеке s значением 0.
  7. Макро fstack_empty(s) возвращает 1, если стек s пустой, и 0 в противном случае.
  8. Макро fstack_top(s) возвращает значение элемента с индексом cnt-1 в массиве arr стека s.
  9. Макро fstack_clear(s) устанавливает значение cnt в стеке s равным 0.
  10. В функции main создаем экземпляр стека st типа fstack_t.
  11. Используя fstack_init(st), инициализируем переменную cnt в стеке st значением 0.
  12. С помощью цикла for добавляем 10 элементов в стек st, используя fstack_push(st, i).
  13. Используя цикл while, который выполняется до тех пор, пока стек не пустой, выводим значение верхнего элемента стека, используя fstack_top(st), и удаляем его с помощью fstack_pop(st).
  14. Завершаем программу, возвращая 0.

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

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