📄 stack.h
字号:
#include "common.h"
#define STACK_INIT_SIZE 100//定义栈的初始长度
#define STACKINCREMENT 10 //定义栈每次追加分配的长度
//实现栈的数据类型
typedef struct{
SElemType *elem;
int top;
int stacksize;
}Stack;
//栈的各项操作的实现
status InitStack(Stack &s){
//初始化栈
s.elem=new SElemType[STACK_INIT_SIZE];
if (!s.elem) return OVERFLOW;
s.top=-1;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
status DestroyStack(Stack &s){
//销毁栈
delete s.elem;
s.top=-1;s.stacksize=0;
return OK;
}
status ClearStack(Stack &s){
//当栈存在时将栈清空
//当栈不存在时返回出错信息
if (!s.elem) return ERROR;
s.top=-1;
return OK;
}
status StackEmpty(Stack &s){
//判断栈空与否,空时返回TRUE,否则返回ERROR.
//当栈不存在时返回出错信息
if (!s.elem) return ERROR;
if (s.top<0) return TRUE;
return FALSE;
}
int StackLength(Stack s){
//返回栈的长度
//当栈不存在时返回出错信息
if (!s.elem) return ERROR;
return s.top+1;
}
status GetTop(Stack s,SElemType &e){
//当栈存在且不空时返回栈顶元素
//当栈不存在或栈空时返回出错信息
if (!s.elem) return ERROR;
if (s.top<0) return ERROR;
e=s.elem[s.top];
return OK;
}
status Push(Stack &s,SElemType e){
//当栈存在时压栈
//当栈不存在时返回出错信息
if (!s.elem) return ERROR;
if ((s.top+1)==s.stacksize){ //当栈的初始空间已满
SElemType *temp=s.elem; int i; //为栈重新分配存储空间
s.stacksize+=STACKINCREMENT;
s.elem=new SElemType[s.stacksize];
if (!s.elem) return OVERFLOW; //当分配失败时返回出错信息
for(i=0;i<=s.top;i++) s.elem[i]=temp[i];
delete temp;
}// if
s.top+=1;
s.elem[s.top]=e;
return OK;
}
status Pop(Stack &s,SElemType &e){
//当栈存在且不空时退栈
//当栈不存在或栈空时返回出错信息
if(!s.elem) return ERROR;
if(s.top<0) return ERROR;
e=s.elem[s.top];
s.top-=1;
return OK;
}
status StackTraverse(Stack s,int (*visit)(SElemType &e)){
//当栈存在且不空时调用visit函数对栈作由底到头的遍历
//当visit函数调用失败返回错误信息
//当栈不存在或栈空时返回出错信息
int i;
if (!s.elem) return ERROR;
if (s.top<0) return ERROR;
for(i=0;i<=s.top;i++) visit(s.elem[i]);
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -