栈和队列在逻辑上也属于线性结构,但是他们在读取的操作上有很大的不同,我们将其称为线性结构中的特殊的限定性结构。 栈: 先进后出 队列:先进后出 *注意对于栈和队列,“出”并不意味一定要把相应位置的内存释放掉,只要通过逻辑和指针明确该位置的元素以出可以放入其他新元素即可。 *随便调用函数会造成空间的浪费 *栈既可以用数组实现也可以用链表实现
递归(链表的定义就是符合递归的) 递归是指在一个函数的调用过程中直接或者间接的调用其本身。 在满足以下三种情况时用递归: 数学定义是递归的, 比如阶乘、斐波拉切数列; 数据结构是递归的,如链表; 问题本身是递归的
分治法(用于递归的方法之一): 使用条件:(1)能拆; (2)拆完更简单; (3)必须要有的出口-递归的边界
*重要 函数的调用过程:
(1)将函数实参与返回地址存在栈空间;
(2)函数给局部变量分配空间;
(3)将控制交给函数入口;
(4)保存计算结果;
(5)释放被调用函数的数据区;
(6)根据函数的地址将控制移回主函数。
*函数在调用是的特点就是先调用后返回,所以这也符合栈的逻辑结构,也是为什么我们可以有递归这种操作。
队列 由于队列的空间都是已经分配好了的,所以当一个元素出队列的时候不用去清理该元素所占的空间,只要我们设置合理的逻辑搭配指针明确该元素已出其空间可放入其他元素即可。
为了合理管理应用队列的空间,防止混淆队列队空和对满的情况,我们会特意空出队列中的一个空间。这个空出来的空间不是固定的会随着情况变动 队空的条件:尾指针 = 头指针 队满的条件:(尾指针 + 1) % maxsize = 头指针