基于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。
2.5KB
文件大小:
评论区