数据结构——栈

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;
}

入栈

步骤:

  1. 判断是否栈满
  2. 栈顶赋值,栈顶指针加一
Status Push(SqStack &S,SElemType e){
	if(S.top-S.base==S.stacksize())
		return ERROR;
	*S.top++=e;
	return OK;

出栈

步骤:

  1. 判断是否栈空
  2. 栈顶指针减一,取栈顶值
Status Pop(SqStack &S,SElemType &e){
	if(S.top==S.base)
		return ERROR;
	e=*--S.top;
	return OK;

取栈顶元素

步骤:

  1. 判断是否栈空
  2. 栈顶指针减一,返回栈顶(函数参数不是引用,栈顶指针减一不会导致栈顶元素出栈)
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;
}

入栈

步骤:

  1. 创建新节点,赋值
  2. 将新节点插入链栈指针后面,新节点称为栈顶(前插法)
Status Push(LinkStack &S, SElemType e){
	StackNode *p=new StackNode;
	p->data=e;
	p->next=S;
	S=p;
	reurn OK:
}

出栈

步骤:

  1. 判断是否栈空
  2. 取值,临时保存栈顶空间以备释放,栈顶指针指向栈顶下一个元素
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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值