顺序栈
顺序存储:给各个数据元素分配连续的存储空间,大小为 Maxsize*sizeof(elemtype)。
栈顶指针:int top;
void initstack(sqstack &s){
s.top=-1;
} //初始化栈顶指针
void teststack(){
sqstack s; //声明一个顺序栈(分配空间)
initstack(s);
//后续操作...
#define maxsize 10
//入栈操作
bool push(sqstack &s,elemtype x){
if(s.top==maxsize-1) //栈满报错
return false;
s.top=s.top+1; //指针先加1
s.data[s.top]=x; //新元素入栈
//或者s.data=[++s.top]=x;
return ture;
}
//出栈操作
bool pop(sqstack &s,elemtype &x){
if(s.top==-1)//栈空报错
return false;
x=s.data[s.top];//栈顶元素先出栈
s.top=s.top-1;//指针再减1
//或者可以这样写x=s.data[s.top--];
return ture;
}
//读取栈顶元素
bool gettop(sqstack,elemtype &x){
if(s.top==-1)
return false;
x=s.data[s.top];
return ture;
}
top指针可以指向0的位置,top是关键,一定要分析明白top是指向0还是-1
共享栈:两个栈共享同一片空间
提高资源的利用率
栈满条件 :top0+1==top1;
typedef struct{
elemtype data[maxsize];
int top0;
int top1;
}shstack;
//初始化栈
void initstack(shstack &s){
s.top0=-1;
s.top1=maxsize;
} //总而言之一个从上自下,一个自下往上;
栈的基本操作都是O(1)的时间复杂度