第三章栈与队列总结
第三章栈与队列总结
栈的定义:
限定仅在表尾进行插入或删除的线性表。
特殊名词:
栈顶,栈底。
特点:
后进先出(LIFO)(例子:往一个盒子里放东西,只能从底部开始放,过一段时间后,只能从最顶端,一个一个往外拿)
队列的定义:
在表的一段插入元素,在另一端删除元素。
特殊名词:
队尾,队头。
特点:
先进先出(FIFO)(例如:排队时,先来的先买东西啥啥的)
栈与递归:
(注意返回地址、参数值)
递归的本质:函数调用(自己调用自己)
优点:结构清晰,程序易读
缺点:每次调用都要生成工作记录,保持状态信息入栈;返回时要出栈,恢复状态信息;时间的开销大
例子:分别用递归和叠代写的两个程序去输出10000个数据和100000个数据,递归在100000个数据下就崩溃了
图例:
这个表示函数的调用
关于队列的一些问题:
队列的操作与栈类似,不同的是,删除是在表的头部--队头进行
队列是排队出入,因此要注意队列的两种存储表示,顺序表示和链式表示
循环队列:
最需要注意的是,怎么用到它的循环----指针Q.rear = (Q.rear+1)%X,x是最初设置的队列的长度,如果Q.rear = 0,就不会出现假溢出
(原理就是利用数学中的模运算)
那么问题来了,假溢出是啥?
假溢出:超出数组分配的最大空间,无法继续插入新的队尾元素--因为数组越界而导致的程序的非法操作错误
(受队尾入队,队头出队限制)
链队:
入队时需要将新的结点指向链尾,出队要将队尾的指针指向下一个元素后删除最后一个结点。
大致的整体总结:
二者都是相似的,但是要注意空间的分配,以防溢出的情况,注意指针的问题,以防删除后,成为野指针
本周学习心态:
逐渐对打代码有了新的认识,需要跟进,然后已经有了一定的信心,不是特别的抗拒了,希望在后面的学习中能够一直将心态调整好。
但是在另外一道题仍然自闭了。
下周目标:
对题目进行思考,不怕烦,有问题就及时去解决
还有不要自闭
附录:对本周作业题的一些心得,发在另外一篇博客上,https://www.cnblogs.com/JeffKing11/p/10612567.html