数据结构03-栈
顺序栈
1、基本概念
栈是限定仅在表尾进行插入或删除操作的线性表,表末端为栈顶(Top),表头称为栈顶(Bottom),不含元 素称为空战 (用顺序表存储的栈更常见) 因此栈又称为后进先出(Last in First out, LIFO)的线性表。
2、数据类型定义
//顺序栈ADT
typedef struct SequenceStack
{
// 栈底
int *base;
// 栈顶
int *top;
}SequenceStack;
3、功能实现
bool InitStack(SequenceStack &S){
S.base=new int[Maxsize]; //为顺序栈分配一个最大容量为Maxsize的空间
if(!S.base) //空间分配失败
return false;
S.top=S.base; //top初始为base,空栈
return true;
}
bool Push(SequenceStack &S,int e){
if(S.top-S.base==Maxsize) //栈满
return false;
*(S.top++)=e; //元素e压入栈顶,然后栈顶指针加1,等价于*S.top=e; S.top++;
return true;
}
bool Pop(SequenceStack &S,int e){
if(S.top == S.base) //栈空
return false;
e = *(--S.top); //元素e压入栈顶,然后栈顶指针加1,等价于*S.top=e; S.top++;
return true;
}
int GetTop(SequenceStack S){ //取栈顶
if(S.top!=S.base) //栈非空
return *(S.top-1); //返回栈顶元素的值,栈顶指针不变
else
return -1;
}
3、测试代码
int main(){
int n,x;
SequenceStack S;
InitStack(S);//初始化一个顺序栈S
cout<<"请输入元素个数n:"<<endl;
cin>>n;
cout<<"请依次输入n个元素,依次入栈:"<<endl;
while(n--){
cin>>x; //输入元素
Push(S,x);
}
cout<<"元素依次出栈:"<<endl;
while(S.top!=S.base){//如果栈不空,则依次出栈
cout<<GetTop(S)<<"\t";//输出栈顶元素
Pop(S,x); //栈顶元素出栈
}
return 0;
}