顺序栈的基本操作
0基本操作前的准备
#include
using namespace std;
//两个C语言的头文件库
#include
#include
//以下是宏定义
#define OK 1
#define ERROW 0
#define OVERFLOWE -2
#define TRUE 1
#define FALSE 0
#define INFEASIBLE -1
#define STACK_INIT_SIZE 100//存储空间初始分配量
#define STACKINCREMENT 10//存储空间分配增量
//以下是类型重新定义
typedef int SElemType;//重新定义SElemType为int型
typedef int Status;//重新定义Status为int型
//下面的是栈的定义和基本操作
typedef struct{//重新定义SqStck为结构类型
SElemType *base;//栈底指针
SElemType *top;//栈顶指针
int stacksize;//栈的当前可使用的最大容量
}SqStack;
1构造一个空栈
//1构造一个空栈
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;
}
2判断栈是否为空
//2判断栈是否为空
Status StackEmpty(SqStack S)
{
if(S.base==S.top)
{
return TRUE;
}
else
{
return FALSE;
}
}
3清空一个栈
//3清空一个栈
Status ClearStack(SqStack &S)
{
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
4销毁一个栈
//4销毁一个栈
Status DestroyStack(SqStack &S)
{
delete S.base;
S.base=NULL;
S.top=NULL;
S.stacksize=0;
return OK;
}
5取栈的长度
//5取栈的长度
Status StackLength(SqStack S)
{
return S.top-S.base;
}
6取栈顶的元素
//6取栈顶元素
Status GetTop(SqStack S,SElemType &e)
{
if(S.top==S.base)
{
return ERROW;
}
e=*(S.top-1);
return OK;
}
7出栈
//7出栈
Status Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base)
{
return ERROW;
}
e=*--S.top;
return OK;
}
8进栈
//8进栈
Status Push(SqStack &S,SElemType e)
{
if(S.top-S.base>=S.stacksize)
{
//栈满追加存储空间
SElemType *newbase=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!newbase)
{
exit(OVERFLOW);
}
S.base=newbase;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
9栈元素的遍历
//9栈元素的遍历
Status StackTraverse(SqStack S,Status(*visit)(SElemType))
{
while(S.top>S.base)
{
visit(*S.base++);
}
return OK;
}
//遍历栈元素的输出
Status sc(SElemType i)
{
return i;
}
10主函数
//主函数
int main()
{
SqStack s;
SElemType tp1;
SElemType tp2;
InitStack(s);
cout<<"0-9依次入栈并输出:"<
输出的结果为:
