学号 20172326 《程序设计与数据结构》第三周学习总结

学号 20172326 《程序设计与数据结构》第三周学习总结

教材学习内容总结

  • 队列是先进先出的数据结构(FIFO)与栈不同,队列的两端可分别进行操作
  • first与front相同,返回首段的值
  • API中的队列方法,有add,element,offer,peek,poll,remove
  • 用链表实现队列时,enqueue和dequeue的算法复杂度均为O(1)
  • 用数组实现队列时,enqueue和dequeue的算法复杂度均为O(n),因为无论将索引值定为头或者尾,插入或删除时,总会使得所有元素位置发生改变。
  • 非环形数组实现的元素位移,将产生O(n)的复杂度。
  • 由数组实现的队列中,rear和栈中的top类似,表示队列中的元素个数,以及数组中下一个空闲单元。
  • 为了提高算法的效率, 我们使用环形数组实现队列,同时,为了使rear在循环时始终拥有正确的值,使用
rear = (rear + 1) % queue.length;

来确保。

教材学习中的问题和解决过程

  • 问题1:

(图)add方法与offer方法的区别,以及优先级的体现在哪里?

  • 问题1理解:


(图)可以看出,在api中,offer方法更为全面,对限制大小的队列进行了考虑,使得其不抛出异常,而是抛出false。

  • 问题2:数组队列与链表队列中谁的空间复杂度更差的问题

  • 问题2理解:对于一个数组队列,其空间总是预先分配好的,因此,如果元素个数小于分配的空间,那么势必造成空间的浪费。但同时,链表中没一个节点都存储着对下一个节点的引用,因此,随着存储的元素逐渐增多,占用的空间也将更多,所以,链表队列也存在着空间的浪费问题

  • 问题3:对于deque(双向队列)的理解

  • 理解:对于这个问题,我本来认为,在两端的删除,插入方法,将破坏队列所具有的顺序性。但是我们不妨仔细看一下他们的方法,

(图)可以看到,拥有这些方法后,deque便不再是一个简单的队列,简单的具有FIFO的数据结构。它也可以被当做栈使用,当然,效率会减低。除此之外,还有多线程的部分情况也可以用到deque。

代码调试中的问题和解决过程

  • 问题:

(图)

编写课后习题时,出现了空指针的异常

  • 问题解决方案:问题在于我没有将参数的含义搞清,count表示当前个数,而对于scan这个索引值来说,自然需要减一,否则,出现了指针实际已经遍历,但由于比count少一仍要继续向下,但笑一个为空的情况

代码托管

点评过的同学博客和代码

结对学习内容

  • 第5章 队列

结对及互评

  • 博客中值得学习的或问题:
    排版精美,对于问题研究得很细致,解答也很周全。
  • 代码中值得学习的或问题:
    代码写的很规范,思路很清晰,继续加油!

上周考试错题总结

其他(感悟、思考等,可选)

  • 本周依旧在数组与链表的基础上进行队列的学习,对链表的理解有了进一步的认识,同时,将栈与队列的不同也有了了解。但是,关于链表,我依旧存在一定不足,需要继续练习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 3/3
第二周 409/409 1/2 5/8
第三周 1174/1583 1/3 10/18

附加作业

参考资料

原文地址:https://www.cnblogs.com/326477465-a/p/9704429.html