学不会的时候,只要微笑就好了
上一单元总结链接:ch2线性表总结
一、栈:
☺栈是一种只能在一端进行插入或删除操作的线性表。
☺栈只能选取同一个端点进行插入和删除操作
定义:
☺允许进行插入、删除操作的一端称为栈顶。
☺表的另一端称为栈底。
☺当栈中没有数据元素时,称为空栈。
☺栈的插入操作通常称为进栈或入栈。
☺栈的删除操作通常称为退栈或出栈。
由于栈中元素之间的逻辑关系与线性表相同,所以可以采用和线性表相同的存储结构
【问】栈和堆有什么区别:参考解释
两栈共享:
从两端同时开始操作
首先明确:该方案采用的是头插法,判空机制是利用top->next是否为空指针。
将多个链栈的栈顶指针放在一个一维数组里来统一管理,从而实现管理和使用多个栈,叫做多栈运算,而哈希表就是其经典使用案例。
栈的应用举例:☺表达式求值:无括号算术表达式求值(详情可以看一下我的另一篇转载内容)
递归就像套娃,经过层层调用到最底层的数值,再利用他一层层回来求更复杂的值;比如斐波那契数列就是一个典型的有递归特性的数列。
教材上举例用了汉诺塔,但是光给了代码,说明不是很清楚。首先我们看一下四个环时该怎么移动……
(来源于网络,侵删)
相信聪明如你肯定幼儿园就已经看破了,那么其实五个环甚至更多的环操作都是一样的:移动n个环,其实只要把最大的——即第n个环先看作底座的一部分不去理会,剩下n-1个环按n-1的方法去移动,最后再考虑多出的第n个环——以此类推,这其实就是不断调用前项的结果的递归算法。
不过既然每次计算都会向前不断自身调用,递归算法的耗时也是异常地感人……
二、队列:
相对于栈单进单出,先进后出;队列一般是先进先出
不过对于队列,元素往往是从尾巴上怼进去的
- 把进行插入的一端称做队尾(rear)。
- 进行删除的一端称做队首或队头(front)。
- 向队列中插入新元素称为进队或入队,新元素进队后就成为新的队尾元素。
- 从队列中删除元素称为出队或离队,元素出队后,其后继元素就成为队首元素。
- 队列具有先进先出 (Fist In Fist Out,缩写为FIFO)的特性
2.2 队列的表示与实现:
逻辑关系上仍与线性表相同,故仍可用1、顺序队列和2、链队列两种存储结构
循环链表:
这里通过取模使得下标数值永远不超过最大下标值。