清空栈
int ClearStack(SeqStack *S){
if(!S)return 0;//设置失败
S->top=0;//栈顶指针修改为0
return 1;
}
此后,新插入的数据元素将会覆盖之前存入的数据元素
判空
bool EmptyStack(SeqStack *S){
if(!S)return false;//栈无效
return (S->top==0);//等于0返回true,不为空返回false;
}
检查栈顶指针是否为0即可
长度计算
int getStackLength(SeqStack *S){
return S->top;
top即栈中元素的个数
遍历
void TraverseStack(SeqStack *S){
for(int i=0;i<S->top;i++){
cout<<S->stackdata[i]<<endl;
}
}
相应的,访问各个栈存储空间的数据(stackdata)即可,范围从0到top-1,top为栈顶的标记
获取栈顶元素
int getTop(SeqStack *S){
if(!S)return 0;//顺序栈无效
if(S->top==0)return 0;//栈空
return S->stackdata[S->top-1];
}
只获取数值而不发生任何变化
元素出栈
在获取栈顶元素的同时还要修改栈顶指针,产生新的栈顶,首先要判空,值得注意的是如果已空,出栈会造成下溢
int popStack(SeqStack *S){
if(!S)return 0;
if(S->top==0)return 0;//栈空
cout<<S->stackdata[--S->top];//top自减,输出元素
return 1;
}
!!元素入栈!!
入栈操作就是在栈顶插入新的元素,使其成为新的栈顶元素
在入栈的时候要判断是否已满,若已满,则会出现上溢,应加入判断,进行空间追加,具体术式如下:
int pushStack(SeqStack *S,Elemtype e){
Elemtype *newStack;
if(!S)return 0;//顺序栈无效
if(S->top==S->stacksize){//栈满,追加
cout<<"栈满,开始分配"<<endl;
newStack=(Elemtype*)realloc(S->stackdata,(S->stacksize+Stack_Increment)*sizeof(Elemtype));
if(!newStack)return 0;//内存分配错误
S->stackdata=newStack;
//S->top=S->stackdata+S->stacksize;
S->stacksize+=Stack_Increment;//修改当前栈的可用空间大小
cout<<"追加完成"<<endl;
}
S->stackdata[S->top++]=e;//将元素e存入栈顶,然后top自增
cout<<"写入完成,当前栈顶top="<<S->top<<endl;
return 1;
}
//1.15
//1.15追加 元素入栈