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;
}
本文详细介绍了STL中的栈数据结构,包括push()、pop()、top()、empty()、size()和swap()等基本操作的含义和使用。对于顺序栈和链栈两种实现方式,分别阐述了它们的存储结构、初始化、入栈、出栈和取栈顶元素的过程,帮助读者理解栈的内部工作机制。
341

被折叠的 条评论
为什么被折叠?



