第三章栈与队列总结


第三章栈与队列总结

栈的定义:

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

特殊名词:

栈顶,栈底。

特点:

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

队列的定义:

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

特殊名词:

队尾,队头。

特点:

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

栈与递归:

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

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

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

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

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

图例:

这个表示函数的调用

关于队列的一些问题:

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

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

循环队列:

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

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

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

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

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

链队:

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

大致的整体总结:

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

本周学习心态:

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

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

下周目标:

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

还有不要自闭

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

优质内容筛选与推荐>>
1、java IO流简单测试
2、java中常用工具类
3、Andorid 反编译App
4、VC++实现CD/DVD刻录
5、整数划分问题


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号