1.定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100 //初始量
#define STACKINCREMENT 10 //增量
typedef int Status;
typedef int SElemType; //这里的元素类型设置为int
//类型定义
typedef struct{
SElemType *base;//设置栈底
SElemType *top;//设置栈顶
int stacksize;//当前栈大小
}SqStack;
2.创建空栈
Status InitStack(SqStack &S){//创建空栈 传参为结构体类型
S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base){ //空间分配失败
exit(OVERFLOW);
}
S.top = S.base; //设置栈顶栈顶指针
S.stacksize = STACK_INIT_SIZE; //设置栈的初始大小
return OK;
}
操作结果:创建一个空栈S
3.入栈操作
Status Push(SqStack &S,SElemType e){//入栈操作
if(S.top - S.base >= S.stacksize){//判断栈的空间 进行分配
S.base = (SElemType *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(SElemType));
if(!S.base){
exit(OVERFLOW);
}
S.top = S.base + S.stacksize; //重新设置栈顶
S.stacksize += STACKINCREMENT; //重新设置栈的大小
}
*S.top++ = e;
//等同于 *S.top = e; S.top++;
return OK;
}
操作结果:插入元素e作为新的栈顶元素
4.出栈操作
Status Pop(SqStack &S,SElemType &e){//出栈操作
if(S.top == S.base){ //栈空
return ERROR;
}
e = *--S.top;
//相当于S.top--; e = S.top;
return OK;
}
操作结果:删除栈S的栈顶元素,并用e返回其值
5.获取栈顶元素
Status GetTop(SqStack &S,SElemType &e){ //返回栈顶元素
if(S.top == S.base){ //栈空
return ERROR;
}
e = *(S.top-1);
return OK;
}
操作结果:用e返回栈S的栈顶元素
6.判断栈是否为空
Status StackEmpty(SqStack S){// 判断是否为空栈
if(S.top == S.base){ //栈顶和栈底相同 即为空栈
return TRUE;
}
else
return FALSE;
}
操作结果:若栈空,返回TRUE值,否则返回FALSE
7.判断是否满栈
Status StackFull(SqStack S){//判断是否为满栈
if(S.top - S.base == S.stacksize){
return TRUE;
}
else
return FALSE;
}
操作结果:若栈满,返回TRUE值,否则返回FALSE
8.清空栈
Status ClearStack(SqStack &S){ //清空栈
S.top = S.base; //重新设置栈顶指针
return OK;
}
操作结果:将栈S的元素清空(改变指针)
9.销毁栈
Status DestoryStack(SqStack &S){ //销毁栈
for(int i = 0;i<S.stacksize;i++){ //循环释放空间
free(S.base);
S.base++;
}
S.base = S.top = NULL; //最后设置栈顶栈底指针为NULL
S.stacksize = 0; //栈大小为0
return OK;
}
操作结果:将栈S销毁(释放空间)
10.获取栈的长度
int StackLength(SqStack S){ //获取栈的当前元素容量
return (S.top - S.base);
}
操作结果:返回栈S的当前长度
——————END——————
作者注:
刚开始写文章,能力有限,如果有错误部分,还请大家尽请指出。
有兴趣可以关注博主,以后还会持续更新内容哦~