本章我可能会犯错、要注意的点:
- 栈本质上是线性表,只不过比较特殊,是一种只允许在一端操作的受限制的线性表。
- 选数组栈而不选链式栈的原因是:因为数组在尾上插入数据的代价比较小。
- 出栈、取栈顶元素需要先判断是否栈【空】 。如果栈空,则不能操作,会崩。需要断言:assert(!StackEmpty(ps));
- 销毁栈很有必要,要防止内存泄漏。因为StackPop只是把数据弹栈,并没有把空间还回去。
- 栈使用顺序结构(数组栈);而队列使用链式结构(链式队列)。
- 为什么队列还要再单独定义head,tail?而单链表不需要? ———— 因为队列只能一边进,另一边出。所以定义head,tail,可以很好地体现价值;而单链表不需要定义
- 入队 <==> 尾插 ; 出队 <==> 头删
- 出队( 注意: 1. 判断队列是否被删完了 2. tail野指针问题 )。
目录