【数据结构】【C语言】 栈和队列知识点+笔记

队列的定义:

队列也是一种线性表,逻辑结构与线性表相同,为一对一结构,分为顺序队列和链式队列。队列只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

栈的定义:
栈是一种线性表,限定仅在表尾进行插入和删除操作的线性表,
表尾又称为栈顶。逻辑结构与线性表相同,也为一对一结构。
线性表分为顺序表和链表,同样的栈也可以分为顺序栈和链栈。

顺序栈和链栈的区别:
顺序栈的实现在于使用了数组这个基本数据结构,数组中的元素在内存中的存储位置是连续的,且编译器要求我们在编译期就要确定数组的大小,这样对内存的使用效率并不高。

一来无法避免因数组空间用光而引起的溢出问题
二在系统将内存分配给数组后,则这些内存对于其他任务就不可用;

而对于链栈而言,使用了链表来实现栈,链表中的元素存储在不连续的地址,由于是动态申请内存,所以我们可以以非常小的内存空间开始,另外当某个项不使用时也可将内存返还给系统。

顺序存储结构是在内存中开辟一个连续的空间用来存储数据,因此对于内存的需求和苛刻,必须是连续的空间.在数据查找(特别是不按照规律排列的数据),时间复杂度教少.效率高.

链式存储结构是采取连表指针来指示数据的存储位置,这就可以是在内存中随意的存储,没有必须连续储存空间的要求,对于内存的要求相对教容易.但是要是是从小到大顺序排列的数据。

链式存储结构的时间复杂度教小,效率高.但是要是不规则排布的数据一般时间复杂度较高,效率更低。
总结:顺序栈是数组实现,链式栈是链表实现。 顺序栈内存空间是连续的。链式栈内存空间是不连续的
栈的应用:

  1. 表达式求值:

前缀表达式和后缀表达式的应用:
假如有个表达式 3+4 * ( 3 -2)。现在你想让计算机把这个式子算出来。你怎么办呢?大多数语言可以读一个int,可以读一个char字符,可以读一个字符串(即"3+4*(3-2)"),但是具体的逻辑处理还是要靠我们写。其实这个程序不是很好编写的,可能要用到大量的堆栈处理逻辑,比如如果是+号就入栈,如果是就出栈到某一种东西在栈顶为止,加上括号的存在就更难办了。再考虑一般情况,可能还有各种其他的取余啊什么的符号,还有优先级,很难搞的。但是要是是后缀的就很简单了,比如3,4,3,2,-,,+,程序只要是把遇到的数都存起来,然后遇到符号就计算前两个数的结果就可以了。一个循环就可以搞定要是都是后缀的对计算机多友好啊!但是显然中缀更符合人们的表达习惯。所以要是能把中缀写程序转成后缀就好了。其实到这里已经对后缀的存在合理性有了认识了。用处在于去掉表达式的括号,即隐藏操作符优先级。

  1. 进制转换
  2. 递归调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值