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

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

  1. Включаем необходимые заголовочные файлы
  2. Объявляем структуру узла списка
  3. Объявляем структуру стека на основе списка
  4. Создаем функцию для создания нового стека
  5. Создаем функцию для удаления элемента из списка (удаляет все элементы до указанного)
  6. Создаем функцию для удаления стека (освобождает память выделенную под стек)
  7. Создаем функцию для добавления элемента в стек (используется динамическое выделение памяти под новый узел)
  8. Создаем функцию для удаления элемента из стека (первый элемент, который встретится при обходе списка, начиная с указанного)
  9. Создаем функцию для проверки размера стека
  10. Создаем функцию для проверки на пустоту стека
  11. В функции main создаем новый стек
  12. Добавляем элементы в стек
  13. Пока стек не пуст, выводим его содержимое и удаляем один элемент
  14. Удаляем стек
  15. Завершаем программу

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

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