第三章栈与队列总结

第三章栈与队列总结

栈的定义:

限定仅在表尾进行插入或删除的线性表。   

特殊名词:

栈顶,栈底。

特点:

后进先出(LIFO)(例子:往一个盒子里放东西,只能从底部开始放,过一段时间后,只能从最顶端,一个一个往外拿)

 

队列的定义:

在表的一段插入元素,在另一端删除元素。

特殊名词:

队尾,队头。

特点:

先进先出(FIFO)(例如:排队时,先来的先买东西啥啥的)

 

栈与递归:

(注意返回地址、参数值)

递归的本质:函数调用(自己调用自己)

优点:结构清晰,程序易读

缺点:每次调用都要生成工作记录,保持状态信息入栈;返回时要出栈,恢复状态信息;时间的开销大

例子:分别用递归和叠代写的两个程序去输出10000个数据和100000个数据,递归在100000个数据下就崩溃了

 

图例:

这个表示函数的调用

 

 

关于队列的一些问题:

队列的操作与栈类似,不同的是,删除是在表的头部--队头进行

队列是排队出入,因此要注意队列的两种存储表示,顺序表示和链式表示

 

循环队列:

最需要注意的是,怎么用到它的循环----指针Q.rear = (Q.rear+1)%X,x是最初设置的队列的长度,如果Q.rear = 0,就不会出现假溢出

(原理就是利用数学中的模运算)

 

那么问题来了,假溢出是啥?

 

假溢出:超出数组分配的最大空间,无法继续插入新的队尾元素--因为数组越界而导致的程序的非法操作错误

(受队尾入队,队头出队限制)

链队:

入队时需要将新的结点指向链尾,出队要将队尾的指针指向下一个元素后删除最后一个结点。

 

大致的整体总结:

二者都是相似的,但是要注意空间的分配,以防溢出的情况,注意指针的问题,以防删除后,成为野指针

 

本周学习心态:

逐渐对打代码有了新的认识,需要跟进,然后已经有了一定的信心,不是特别的抗拒了,希望在后面的学习中能够一直将心态调整好。

但是在另外一道题仍然自闭了。

 

下周目标:

对题目进行思考,不怕烦,有问题就及时去解决

还有不要自闭

 

附录:对本周作业题的一些心得,发在另外一篇博客上,https://www.cnblogs.com/JeffKing11/p/10612567.html

 

posted @ 2019-03-31 09:47  青梅茶  阅读(316)  评论(3编辑  收藏  举报