Как стек st реализовать с помощью одного списка - C (СИ)
Формулировка задачи:
Как стек st реализовать с помощью одного списка. И записать инструкцию языка Си для получения в переменной m значение с верхушки стека с помощью функции peek. Корректность операции контролировать переменной err.
Решение задачи: «Как стек st реализовать с помощью одного списка»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
struct st {
int value;
struct st* next;
};
//-----------------------------------------------------------------------------
void push(struct st** stack, int value) {
struct st* node = malloc(sizeof(struct st));
node->value = value;
node->next = *stack;
*stack = node;
}
//-----------------------------------------------------------------------------
void print(const struct st* stack) {
for (; stack; stack = stack->next) {
printf("%d ", stack->value);
}
printf("\n");
}
//-----------------------------------------------------------------------------
void peek(const struct st* stack, int* m, int* err) {
*err = (stack == NULL);
if (*err == 0) {
*m = stack->value;
}
}
//-----------------------------------------------------------------------------
int main() {
struct st* stack = NULL;
int i = 10;
int m, err;
while (i--) {
push(&stack, i + 1);
}
print(stack);
peek(stack, &m, &err);
if (err == 0) {
printf("top = %d\n", m);
}
else {
printf("error\n");
}
return 0;
}
Объяснение кода листинга программы
- Структура данных
stобъявлена как стек. - Функция
pushдобавляет новый узел в стек. - Функция
printвыводит значения всех узлов стека. - Функция
peekвозвращает значение вершины стека и проверяет, является ли стек пустым. - В функции
mainсоздается пустой стекstack. - В цикле десять раз вызывается функция
push, чтобы добавить значения от 11 до 20 в стек. - Вызывается функция
print, чтобы вывести значения стека. - Вызывается функция
peek, чтобы проверить, является ли стек пустым. - Если стек не пуст, выводится значение вершины стека.
- Если стек пуст, выводится сообщение об ошибке.
- Программа завершается с возвращаемым значением 0.