特殊的线性表--栈和队列介绍

一种操作受限制的线性表,遵从LIFO原则。
是不是听起来很高端呢,其实就是 last in first out (后进先出)
想想小时候的玩具手枪弹夹,就是这个道理。

栈的结构就是线性表,两端分别叫做栈顶和栈底,插入和删除只允许在栈顶进行。

存储结构
1.数组:
比较好处理,以数组的最后为栈顶进行操作(如果是a[1]的话插入删除绝对要人命)
a[0]一般是不用,刚好来存储最后一位的下标。
2.链表:
相对于表尾,一个带表头的链表的前端更适合作为栈顶,免去了找最后一个的麻烦。
有时候也会额外整一个整型变量记录个数。

ADT操作
此时的线性表就没有之前那么多*事了,也就是插入删除、创建销毁之类的。

应用
栈在递归函数方面是很用用处的,另外因为这个原则,所以在一些需要将输出反向的时候,这个就很有用了。
在后面的几篇文章(其实已经是前面的了,雾)我会介绍一下栈的应用。

队列

再一次打出我们高端的原则:FIFO(first in first out)
啥意思,就是食堂排队打饭,那肯定是先到的人先打饭了。

存储结构
和上面一样,也是分两种情况

链表结构的队列比较简单,主要是分清楚谁是头谁是尾,在头节点插入删除都方便,但是在尾节点删除一个。。。
emmm反正我是头大,所以就头是头,尾是尾,这样操作更加方便。
如果嫌找尾节点不好找,需要遍历也可以自己加一个指针专门指向尾节点,记得初始是头节点,随时更新就行了。
队头的删除也一样,不过小心将最后一个结点删除了,尾节点要进行修改。

如果使用数组来存储,事情就比较多了,因为在出队时,如果没有元素的移动,前面的坑就没人填,空间就浪费了,容易造成假溢出(看着是数组不够用,其实前面都没有用)
当然可以删除一个元素就移动一次,如果想要效率搞一点,就要涉及到循环队列了。

别看了,下面没有循环队列
因为这个东西足够单独拿出来讲一下了,不然字数太多看着发困(尤其是今天刚码了一个小3000的阿克曼函数非递归),还有一个原因就是考完试忘差不多了,老菜鸡了需要复习一下(枯了)。

ADT操作
置空、判空、插入删除。
因为是需要这个结构处理问题,而不是需要他干一些很麻烦的事情,如果有其他需要直接用链表就完了么,所以在ADT上还是比较简单的。

应用
emm这个应用目前见到的不是很多,接下来我会发一个题目来讲一下应用吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值