Online C Compiler
Открыть в компиляторе

Учебная версия на русском. Код и его вывод сохранены в исходном виде.

Стек на C: принцип LIFO

Реализуйте push, pop и просмотр вершины с явной проверкой границ.

Открыть в компиляторе

Стек на C: принцип LIFO
Реализуйте push, pop и просмотр вершины с явной проверкой границ.

Последний добавленный элемент стека извлекается первым. В реализации на массиве top отмечает вершину или специальное состояние пустого стека. Выберите соглашение и соблюдайте его во всех операциях.

Перед push проверяйте вместимость, перед pop и peek — наличие элемента. По возможности отделяйте статус ошибки от возвращаемого значения, чтобы допустимые данные нельзя было перепутать с ошибкой.

Основные операции требуют O(1). Проверьте полное заполнение, полное опустошение и чередование операций. Стек полезен для отмены действий, разбора выражений и хранения ожидающих вызовов.

Код C

#include <stdio.h>
#define MAX 100

typedef struct {
    int items[MAX];
    int top;
} Stack;

void initStack(Stack *s) { s->top = -1; }
int isFull(Stack *s) { return s->top == MAX - 1; }
int isEmpty(Stack *s) { return s->top == -1; }

void push(Stack *s, int val) {
    if (isFull(s)) {
        printf("Stack Overflow!\n");
        return;
    }
    s->items[++(s->top)] = val;
}

int pop(Stack *s) {
    if (isEmpty(s)) {
        printf("Stack Underflow!\n");
        return -1;
    }
    return s->items[(s->top)--];
}

int peek(Stack *s) {
    if (isEmpty(s)) return -1;
    return s->items[s->top];
}

int main() {
    Stack s;
    initStack(&s);
    push(&s, 10);
    push(&s, 20);
    push(&s, 30);

    printf("Top element: %d\n", peek(&s));
    printf("Popped: %d\n", pop(&s));
    printf("New top: %d\n", peek(&s));
    return 0;
}
Открыть в компиляторе

Ожидаемый вывод

Top element: 30
Popped: 30
New top: 20

Частые вопросы

Почему код и вывод остаются на английском?

Ключевые слова, идентификаторы и строки, проверяемые тестами, сохранены, чтобы не менять программу. Объяснения и элементы управления переведены.