STL栈基本操作及含义
操作 | 含义 |
---|---|
push() | 压入栈顶 |
pop() | 栈顶弹出 |
top() | 获取栈顶 |
empty() | 判断栈是否为空 |
size() | 返回栈大小 |
swap | 交换两个栈的元素 |
顺序栈
存储结构
#define MAXSIZE 100
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
初始化
Status InitStack(SqStack &S){
S.base=new SElemType[MAXSIZE];
if(!S.base)
return (OVERFLOW);
S.top=S.base;
S.stacksize=MAXSIZE:
return OK;
}
入栈
步骤:
- 判断是否栈满
- 栈顶赋值,栈顶指针加一
Status Push(SqStack &S,SElemType e){
if(S.top-S.base==S.stacksize())
return ERROR;
*S.top++=e;
return OK;
出栈
步骤:
- 判断是否栈空
- 栈顶指针减一,取栈顶值
Status Pop(SqStack &S,SElemType &e){
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
取栈顶元素
步骤:
- 判断是否栈空
- 栈顶指针减一,返回栈顶(函数参数不是引用,栈顶指针减一不会导致栈顶元素出栈)
SElemType GetTop(Sqstack S){
if(S.top!=S.base)
return *S.top-1;
}
链栈
存储结构
typedef struct StackNode{
ElemType data;
struct StackNode *next;
}StackNode,*LinkStack;
初始化
Status InitStack(LinkStack &S){
S=NULL;
return OK;
}
入栈
步骤:
- 创建新节点,赋值
- 将新节点插入链栈指针后面,新节点称为栈顶(前插法)
Status Push(LinkStack &S, SElemType e){
StackNode *p=new StackNode;
p->data=e;
p->next=S;
S=p;
reurn OK:
}
出栈
步骤:
- 判断是否栈空
- 取值,临时保存栈顶空间以备释放,栈顶指针指向栈顶下一个元素
Status Pop(LinkStack &S,SElemType &e){
if(S=NULL)
return ERROR:
e=S->data;
StackNode *p=S;//用p临时保存栈顶元素空间,以备释放
S=S->next;
delete p;
return OK;
}
取栈顶元素
SElemType Pop(LinkStack S){
if(S!=NULL)
return S->data;
}