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

#define MAXSIZE 100

typedef struct {
    int data[MAXSIZE];
    int top;
} SeqStack;

// 初始化顺序栈
void InitStack(SeqStack *s) {
    s->top = -1;
}

// 判断栈是否为空
int IsEmpty(SeqStack *s) {
    return s->top == -1;
}

// 判断栈是否为满
int IsFull(SeqStack *s) {
    return s->top == MAXSIZE - 1;
}

// 入栈
void Push(SeqStack *s, int item) {
    if (IsFull(s)) {
        printf('Stack is full\n');
        return;
    }
    s->data[++s->top] = item;
}

// 出栈
void Pop(SeqStack *s) {
    if (IsEmpty(s)) {
        printf('Stack is empty\n');
        return;
    }
    s->top--;
}

// 取栈顶元素
int Top(SeqStack *s) {
    if (IsEmpty(s)) {
        printf('Stack is empty\n');
        return -1;
    }
    return s->data[s->top];
}

// 遍历栈
void Traverse(SeqStack *s) {
    if (IsEmpty(s)) {
        printf('Stack is empty\n');
        return;
    }
    for (int i = 0; i <= s->top; i++) {
        printf('%d ', s->data[i]);
    }
    printf('\n');
}

// 置空栈
void ClearStack(SeqStack *s) {
    s->top = -1;
}

int main() {
    SeqStack s;
    int choice, item;
    
    InitStack(&s);
    
    while (1) {
        printf('1. Push\n');
        printf('2. Pop\n');
        printf('3. Top\n');
        printf('4. Traverse\n');
        printf('5. ClearStack\n');
        printf('0. Exit\n');
        printf('Enter your choice: ');
        scanf('%d', &choice);
        
        switch (choice) {
            case 0:
                exit(0);
            case 1:
                printf('Enter the item to push: ');
                scanf('%d', &item);
                Push(&s, item);
                break;
            case 2:
                Pop(&s);
                break;
            case 3:
                item = Top(&s);
                if (item != -1) {
                    printf('Top element: %d\n', item);
                }
                break;
            case 4:
                Traverse(&s);
                break;
            case 5:
                ClearStack(&s);
                break;
            default:
                printf('Invalid choice\n');
                break;
        }
    }
    
    return 0;
}
C语言顺序栈实现及操作示例:入栈、出栈、遍历等

原文地址: https://www.cveoy.top/t/topic/f3yl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录