数据结构-栈

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、栈的定义:

堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈的存储

由于栈其实是一种特殊的线性表,于是栈也有顺序存储和链式存储两种实现方式。

二、顺序栈

存储方式:同一般线性表的顺序存储结构完全相同,利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。栈底一般在低地址段。
设top指针,指示栈顶元素在顺序栈中的位置
设base指针,指示栈底元素在顺序栈中的位置
用stack size表示栈可用的最大容量
//但是,为了方便操作,通常指针指向真正栈顶元素之上的下标地址。

2.顺序栈的表示

1.空栈
在这里插入图片描述

//base==top 是空栈表示

2.进栈
在这里插入图片描述

3.栈满
在这里插入图片描述
//top-base == stack size 是栈满表示

4.栈满的处理方法

1。报错,返回操作系统
2.分配更大空间,作为栈的存储空间,将原栈的内容移入新栈.

三、链栈

//链栈是运算受限的单链表,只能在链表头部进行操作。

1.链栈的表现

1.链表的头指针就是栈顶。
2.不需要头结点。
3.基本不存在栈满的情况
4.空栈相当于头指针向空
5.插入和删除仅在栈顶处执行

2.链栈的初始化

void initStack(LinkStack &S ) //构造一个空栈,栈顶指针置为空
{
S=NULL;
return OK;
}

3.判断链栈是否为空

Status StackEmpty(LinkStack S)
if (S==NULL) return TRUE;
else return FALSE;
}

4.链栈的入栈

Status Push(LinkStack &S ,SElemType e)
{
p=new StackNode; //生成新结点
p->data=e; //将新结点数据域置为
p->next=S;//将新结点插入栈顶
S=p;//修改栈顶指针
return OK;
}

5.链栈的出栈

Status Pop (LinkStack &S,SElemType &e)
{
if (S==NULL) return ERROR;
e= S-> data;
p=S;
S= S->next;
delete p;
return OK;
}

总结

感谢各位的认真阅读,如果感觉以上内容对大家的学习有所帮助的话,希望大家可以点赞支持一下,谢谢大家!

  • 22
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值