您的位置:首页 > 其它

顺序栈的基本操作实现

2011-10-15 00:17 357 查看
这些都是头函数里的内容,也就是保存之后,可以直接

对其进行调用。其中的一个变量stacklen是用来记录栈

的长度的,其实,这个变量可以不要,只是刚开始写时

给它加上了,所以就按这样写了,感觉跟顺序表的写法

差不多





#include<iostream>
#include<stdlib.h>
#include<malloc.h>
using namespace std;

typedef int Status;
typedef int SElemType;

# define   OK       1
# define   ERROR    0
# define   TRUE     1
# define   FLASE    0
# define   NULL     0
# define   OVERFLOW  -2

typedef  struct{
SElemType   * base;
SElemType   * top;
int     stacksize;
int     stacklen;
}SqStack;

# define  STACK_INIT_SIZE   100       //存储空间的初始分配量
# define  STACKINCREMENT    10        //存储空间分配增量

Status  InitStack(SqStack &S)         //构造一个空栈S
{
S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base)  exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
S.stacklen = 0;
return OK;
}

Status DestroyStack(SqStack &S)      //销毁栈S,S不在存在
{
free(S.base);
return OK;
}

Status ClearStack (SqStack &S)      //把S置为空栈
{
S.top = S.base;
S.stacklen = 0;
return OK;
}

Status StackEmpty(SqStack &S)       //若S为空栈,则返回TRUE,否则返回FALSE
{
if(S.stacklen == 0)
return TRUE;
else
return FLASE;
}

Status StackLength(SqStack &S)       //返回S的元素个数,即栈的长度
{
return S.stacklen;
}

Status GetTop(SqStack &S, SElemType &e)       //若栈不空,则用e返回S的栈顶元素,
{
if(S.stacklen == 0)
return ERROR;
else
{
e = * (S.top-1);
return OK;
}
}

Status Push(SqStack &S, SElemType &e)         //插入元素e为新的栈顶元素
{
if(S.stacklen == 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.stacklen++;
return OK;
}

Status Pop(SqStack &S, SElemType &e)          //删除栈顶元素并用e返回其值
{
if(S.stacklen == 0)
return ERROR;
e = * --S.top;
S.stacklen--;
return OK;
}

Status DisplayStack(SqStack &S)              //从栈底到栈顶依次对栈的元素进行访问
{
SElemType * p;
p = S.base;
while(p != S.top)
{
cout<<*p<<" ";
p++;
}
cout<<endl;
return OK;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: