Реализовать простой стек, с функциями добавления и удаления элементов - C (СИ)
Формулировка задачи:
Реализовать простой стек на си, с функциями добавления в стек и удаления из него, а также проверки пустой ли стек.
Решение задачи: «Реализовать простой стек, с функциями добавления и удаления элементов»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#define STACK_MAX_CAPACITY 200
struct Stack_of_char {
char data[STACK_MAX_CAPACITY];
int dest_idx;
};
void stack_of_char_init(struct Stack_of_char* st) {
st->dest_idx = 0;
}
int stack_of_char_push(struct Stack_of_char* st, char ch) {
if(st->dest_idx == STACK_MAX_CAPACITY)
return 0;
st->data[st->dest_idx] = ch;
++st->dest_idx;
return 1;
}
int stack_of_char_pop(struct Stack_of_char* st, char* pch) {
if(st->dest_idx == 0)
return 0;
--st->dest_idx;
if(pch != NULL)
*pch = st->data[st->dest_idx];
return 1;
}
int stack_of_char_empty(const struct Stack_of_char* st) {
return st->dest_idx == 0;
}
int main(void) {
char ch;
struct Stack_of_char st;
stack_of_char_init(&st);
for(ch = 'z'; ch >= 'a'; --ch)
stack_of_char_push(&st, ch);
while(!stack_of_char_empty(&st)) {
stack_of_char_pop(&st, &ch);
putchar(ch);
}
putchar('\n');
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем максимальную вместимость стека (200 элементов)
- Создаем структуру для представления стека: char data[STACK_MAX_CAPACITY]; int dest_idx;
- Инициализируем стек: st->dest_idx = 0;
- Функция stack_of_char_push добавляет элемент в стек: если индекс dest_idx равен максимальной вместимости стека, возвращает 0; записывает элемент в массив data; увеличивает значение dest_idx на 1.
- Функция stack_of_char_pop удаляет элемент из стека: если индекс dest_idx равен 0, возвращает 0; уменьшает значение dest_idx на 1; если указанный указатель pch не равен NULL, записывает в него удаленный элемент;
- Функция stack_of_char_empty проверяет, пуст ли стек: возвращает 1, если стек пуст (dest_idx равен 0), иначе возвращает 0.
- В функции main создаем экземпляр стека и инициализируем его
- Добавляем элементы в стек с помощью функции stack_of_char_push, используя цикл for
- Пока стек не пуст, удаляем его элементы с помощью функции stack_of_char_pop и выводим их на экран с помощью функции putchar
- Выводим символ новой строки с помощью функции putchar
- Возвращаем EXIT_SUCCESS.