基于C语言的顺序栈实现

本代码实现了顺序栈的基本操作,包括初始化、判断栈满、判断栈空、获取栈长度、入栈和出栈。

#include 
#include 

#define MAXSIZE 100  // 栈的最大容量
typedef int ElemType; // 定义栈元素类型为int,可根据需要修改

// 定义顺序栈结构体
typedef struct {
    ElemType data[MAXSIZE]; 
    int top;             // 栈顶指针
} SqStack;

// 初始化栈
void InitStack(SqStack *S) {
    S->top = -1; // 初始化栈顶指针为-1,表示空栈
}

// 判断栈是否为空
bool StackEmpty(SqStack *S) {
    return S->top == -1;
}

// 判断栈是否已满
bool StackFull(SqStack *S) {
    return S->top == MAXSIZE - 1; 
}

// 获取栈长度
int StackLength(SqStack *S) {
    return S->top + 1;
}

// 入栈操作
bool Push(SqStack *S, ElemType e) {
    if (StackFull(S)) {
        return false; // 栈满,入栈失败
    }
    S->top++;             
    S->data[S->top] = e; // 元素e入栈
    return true;        // 入栈成功
}

// 出栈操作
bool Pop(SqStack *S, ElemType *e) {
    if (StackEmpty(S)) {
        return false; // 栈空,出栈失败
    }
    *e = S->data[S->top]; // 获取栈顶元素
    S->top--;             // 栈顶指针减1
    return true;        // 出栈成功
}

int main() {
    SqStack S;
    ElemType e;

    InitStack(&S);  // 初始化栈

    // 测试代码
    Push(&S, 10);
    Push(&S, 20);
    Push(&S, 30);

    printf("栈长度:%d
", StackLength(&S)); 

    while (!StackEmpty(&S)) { // 当栈非空时
        Pop(&S, &e);        // 弹出栈顶元素
        printf("弹出栈顶元素:%d
", e);
    }
    return 0;
}

函数说明:

  • InitStack(SqStack *S): 初始化栈,将栈顶指针置为-1。
  • StackEmpty(SqStack *S): 判断栈是否为空,若为空则返回true,否则返回false。
  • StackFull(SqStack *S): 判断栈是否已满,若已满则返回true,否则返回false。
  • StackLength(SqStack *S): 获取栈中元素个数。
  • Push(SqStack *S, ElemType e): 将元素e压入栈中,若入栈成功则返回true,否则返回false。
  • Pop(SqStack *S, ElemType *e): 弹出栈顶元素并将其赋值给e,若出栈成功则返回true,否则返回false。
c 文件大小:2.5KB