c 语言顺序栈typedef struct SqStack { SElemType* base; SElemType* top; int stacksize; }SqStack; 怎么实现
时间: 2024-09-27 13:08:28 浏览: 110
在C语言中,给定的结构体`SqStack`是一个用于表示顺序栈的数据结构,它包含了三个成员变量:
1. `base`: 指向栈底元素的指针,初始化时通常是NULL,表示栈为空。
2. `top`: 当前栈顶的指针,当栈未满时,指向下一个将要插入元素的位置;当栈满时,等于`base`,表示栈已满。
3. `stacksize`: 表示栈的最大容量。
下面是一个基本的顺序栈实现,包括了常见的操作:初始化、入栈(push)、出栈(pop)、查看栈是否为空(isEmpty)以及查看栈是否已满(isFull):
```c
#include <stdio.h>
#include <stdlib.h>
// 定义SElemType,你可以自定义这个类型
typedef int SElemType;
// 定义顺序栈结构体
typedef struct {
SElemType* base; // 栈底指针
SElemType* top; // 栈顶指针
int stacksize; // 栈的大小
} SqStack;
// 初始化栈
void initStack(SqStack* s, int sz) {
s->base = (SElemType*)malloc(sz * sizeof(SElemType));
s->top = s->base;
s->stacksize = sz;
}
// 入栈(如果栈不满)
void push(SqStack* s, SElemType e) {
if (s->top - s->base < s->stacksize) {
*(s->top++) = e;
} else {
printf("Stack overflow\n");
}
}
// 出栈(如果栈非空)
SElemType pop(SqStack* s) {
if (s->top == s->base) {
printf("Stack underflow\n");
return -1; // 返回特殊值,表示栈空
} else {
SElemType res = *(--s->top);
return res;
}
}
// 判断栈是否为空
int isEmpty(SqStack* s) {
return s->top == s->base;
}
// 判断栈是否已满
int isFull(SqStack* s) {
return s->top == s->base + s->stacksize;
}
// 释放栈内存
void destroyStack(SqStack* s) {
free(s->base);
s->base = NULL;
s->top = NULL;
s->stacksize = 0;
}
阅读全文