线性关系-栈初步了解

这两种结构也是线性关系的特殊的两种使用结构场景;
栈的特点就是,先进后出,或者说后进先出;
队列的特点就是,先进先出;

1.使用场景:

生活中例如洗盘子,碟盘子,肯定后洗的先出来,类似的概念;
其次,在对源程序编译时类似于表达式括号匹配原则就是栈来实现的,等;

2.例如:

a,b,c依次入栈,后续出栈就是c,b,a;

3.栈的顺序存储结构:顺序栈

本质上还是顺序表的实现,连续的存储单元,通常数组下表为0的为栈底,最后一个存储单元就是top,栈顶,在栈顶进行插入、删除、查询操作,时间复杂度都是o(1);
栈空,top = -1,top = 长度-1;
3.1栈的初始化
new一个空栈,top = -1;
3,2入栈操作
如果top = size -1,栈满,否则额可以进行入栈操作;
入栈就是,数组下一个存储单元存储值即可,data[++top] = 入栈值;
3.3出栈操作
如果top = -1,空栈,不需要进行出栈了
否则,只需取出栈定元素,top-1即可,例如,return data[top–]
3.4顺序栈,两个栈使用时,需要考虑到两栈共享空间的问题;
例如:定义了两个栈,只用了其中的一个,一个栈满了,另一个还在空闲中,这时候提出一个概念,两个栈,例如各初始化5个单元的存储空间,那么两栈共享单元,就是创建一个连续的10单元的空间一起使用;
那么:0下标就是栈1的底,9下标就是栈2的底,两个栈各自入栈,出栈,依次往两者之间的空间进行操作即可;
3.4.1两栈共享空间,入栈
a表示栈1,b表示栈2;
如果topa = topb -1,则栈满
否则,
if(i ==a),data[++topa] = 入栈属性;
if(i ==b),data[–topb] = 入栈属性;
3.4.1两栈共享空间,出栈
a表示栈1,b表示栈2;

if(i ==a),如果topa = -1,则栈空,否则return data[topa–] = 出栈属性;
if(i ==b),如果topb = 9,则栈空,否则return data[topb++] = 入栈属性;

4.栈的链式存储-链栈

和顺序栈基本类似,链栈是以单链表的形式存在,以单链的头部作为栈顶最为合适,进行插入、删除、查询,时间复杂度o(1)

4.1构造空栈
调用初始化方法即可,top为空,链栈不带头节点;
4.2入栈
初始化一个节点a;复制内容以及next,
其次,a.next = top,top=a;
这就完成了在topj后面新增一个节点
4.3出栈
如果top=null.则是空栈
否则,暂存当前节点a;临时变量b存储当前节点值;
a = top,b= top.data;
top = top.next,delete当前节点a,之后返回出栈值 b

总之,顺序栈和来链接栈,时间复杂度都是o(1),唯一区别大的适合,就是顺序栈的是初始化大小,不方便后续扩展,如果这个大小变化较大时,就用链栈即可;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值