Динамическая реализация стека на основе списка - C (СИ)
Формулировка задачи:
Реализация стека с помощью динамических структур (списка) . Добавить элемент в стек ,удаление элемента из стека,проверка пустой ли стек ,просмотр элемента в вершине стека без удаления ,очистка стэка.
Решение задачи: «Динамическая реализация стека на основе списка»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> struct node { int value; struct node *next; }; struct myStack { struct node *pointer; int count; }; struct myStack *create_stack() { struct myStack *temp = (struct myStack *)malloc(sizeof(struct myStack)); temp->pointer = NULL; temp->count = 0; return temp; } void delete_element(struct node *elem) { if (elem->next) delete_element(elem->next); free(elem); } void delete_stack(struct myStack *st) { if (!st) return; if (st->pointer) delete_element(st->pointer); free(st); } void push_to_stack(struct myStack *st, int value) { if (!st) return; struct node *temp = (struct node *)malloc(sizeof(struct node)); temp->value = value; if (!st->pointer) { temp->next = NULL; st->pointer = temp; } else { temp->next = st->pointer; st->pointer = temp; } st->count++; } int pop_from_stack(struct myStack *st) { if (!st || !st->pointer) return 0; int value = st->pointer->value; struct node *del = st->pointer; st->pointer = st->pointer->next; free(del); st->count--; return value; } int stack_size(struct myStack *st) { return st->count; } int is_empty(struct myStack *st) { return !st->pointer; } int main() { struct myStack *st = create_stack(); int i; for (i = 5; i < 10; ++i) push_to_stack(st, i); while (!is_empty(st)) { printf("%d\n", pop_from_stack(st)); } delete_stack(st); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем структуру узла списка
- Объявляем структуру стека на основе списка
- Создаем функцию для создания нового стека
- Создаем функцию для удаления элемента из списка (удаляет все элементы до указанного)
- Создаем функцию для удаления стека (освобождает память выделенную под стек)
- Создаем функцию для добавления элемента в стек (используется динамическое выделение памяти под новый узел)
- Создаем функцию для удаления элемента из стека (первый элемент, который встретится при обходе списка, начиная с указанного)
- Создаем функцию для проверки размера стека
- Создаем функцию для проверки на пустоту стека
- В функции main создаем новый стек
- Добавляем элементы в стек
- Пока стек не пуст, выводим его содержимое и удаляем один элемент
- Удаляем стек
- Завершаем программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д