Как стек st реализовать с помощью одного списка - C (СИ)

Формулировка задачи:

Как стек st реализовать с помощью одного списка. И записать инструкцию языка Си для получения в переменной m значение с верхушки стека с помощью функции peek. Корректность операции контролировать переменной err.

Код к задаче: «Как стек st реализовать с помощью одного списка - C (СИ)»

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;
}

10   голосов, оценка 3.900 из 5


СОХРАНИТЬ ССЫЛКУ