Implement Stack Using Array with Push and Pop Operations

Code

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX 10 // Tăng lên 100 cho an toàn, 10 hơi ít

typedef struct {
    int arr[MAX];
    int top; // Không gán = -1 ở đây được trong C cũ
} stack;

// Hàm khởi tạo stack (để gán top = -1)
void init_stack(stack *s) {
    s->top = -1;
}

void push_stack(stack *a, int n) {
    if (a->top == MAX - 1) {
        printf("Stack Overflow\n"); // Thêm \n
        return;
    }
    a->top++;
    a->arr[a->top] = n;
}

void pop_stack(stack *a) {
    if (a->top == -1) {
        printf("Stack Underflow\n"); // Thêm \n
        return;
    }
    // Sửa a->arr[top] thành a->arr[a->top]
    printf("%d\n", a->arr[a->top]); 
    a->top--;
}

void process_stack(int n) {
    stack myStack;
    init_stack(&myStack); // Khởi tạo top = -1

    char cmd[10]; // Biến lưu chữ "push" hoặc "pop"
    int val;

    for (int i = 0; i < n; i++) {
        scanf("%s", cmd); // Đọc lệnh

        // So sánh chuỗi lệnh
        if (strcmp(cmd, "push") == 0) {
            scanf("%d", &val); // Nếu là push, đọc thêm số tiếp theo
            push_stack(&myStack, val);
        } 
        else if (strcmp(cmd, "pop") == 0) {
            pop_stack(&myStack);
        }
    }
}

int main() {
    int n;
    if (scanf("%d", &n) != 1) return 0; // Kiểm tra đọc n thành công
    
    process_stack(n);
    
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

5 push 10 push 20 pop pop pop

Expected Output

20 10 Stack Underflow