栈的顺序存储表示
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define STACK_INT_SIZE 100
#define STACKINCREMENT 10;
typedef struct
{
int *base;
int top;
int stacksize;
}sqstack;
构造一个空栈
在定义了栈的基本结构后,按照设定的分配量size分配结点指针所指的内存的空间,base名为栈底指针,指向栈底部元素的内存。top名为栈顶指针,初始化与base指针指向相同,栈的内存设置为size变量。插入与删除元素之时,仅仅需要移动栈顶指针即可。由栈的指针的结构可以看出,非空栈的栈顶指针始终指向的是栈顶元素的上一个位置,这与顺序表插入节点的操作也是类似的。顺序栈的结构初始化代码如下:
status InitStack(sqstack&s)
{
s.base=(int*)malloc(STACK_INT_SIZE*sizeof(int));
if(!s.base)
exit(0);
s.top=s.base;
s.stacksize=STACK_INT_SIZE;
return 1;
}
入栈
先检查栈是否已满,若已满则继续申请空间,然后在使元素入栈
status push(sqstack&s,int &e)
{
if(s.top-s.base>=s.stacksize)
{
s.base=(int*)realloc((s.stacksize+STACKINCREMENT)*sizeof(int));
if(!s.base)
exit(-2);
s.top=s.base+s.stacksize;
s.stacksize=s.stacksize+STACKINCREMENT;
}
*s.top++=e;
}
出栈
status pop(sqstack &s,int &e)
{
if(s.top==s.base)
return 0;
e=*--s.top;
return 1;
}
返回栈顶元素
status gettop(sqstack &s,int &e)
{
if(s.top==s.base)
return 0;
e=*(s.top-1);//必须加括号
return 1;
}
栈是否为空
bool stackempty(sqstack &s)
{
if(s.top==s.base)
{
return true;
}
else
{
return false;
}
}