码迷,mamicode.com
首页 > 其他好文 > 详细

20172312 2018-2019-1 《程序设计与数据结构》第3周学习总结

时间:2018-09-26 22:43:15      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:info   class   解决   block   方案   前端   style   数组   链表   

教材学习内容总结

第五章

队列

1.队列是先进先出的数据结构(FIFO)与栈不同,队列的两端可分别进行操作

2.first与front相同,返回首段的值

3.API中的队列方法,有add,element,offer,peek,poll,remove

4.用链表实现队列时,enqueue和dequeue的算法复杂度均为O(1)

5.用数组实现队列时,enqueue和dequeue的算法复杂度均为O(n),因为无论将索引值定为头或者尾,插入或删除时,总会使得所有元素位置发生改变。

6.非环形数组实现的元素位移,将产生O(n)的复杂度。

7.由数组实现的队列中,rear和栈中的top类似,表示队列中的元素个数,以及数组中下一个空闲单元。

技术分享图片

 

用数组实现队列

  • 基于数组的队列实现策略就是将队列的某一端(比如前端)固定在数组的索引0处。所有元素会不间断地存放在数组中。
  • 与ArrayStack实现中的top变量类似,整型变量rear用于表明数组中的下一个空闲单元。
  • 注意:rear还表示了队列中的元素数目。

     

    技术分享图片

     技术分享图片

    技术分享图片

     

用链表实现队列

  • 除了一个指向链表首元素的引用(head)之外,还需要跟踪另一个指向链表末元素的引用(tail),还要用一个整型变量count来跟踪队列中的元素数目。
  • 往链表前端添加新结点,应该将该新结点的next指针设置为指向链表的head变量,把head变量设置为指向新结点。
  • 往链表的末端添加新结点,应该将把链表末端结点的next指针设置为指向新结点,然后把链表的tail设置为指向新结点。

 

技术分享图片技术分享图片

技术分享图片

 

 

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

  • 问题1:dequeue的操作复杂度为何为O(1).
  • 问题1解决方案:当调用 .dequeue() 时,会从序列中删除下一个函数,然后执行它。该函数反过来会(直接或间接地)引发对 .dequeue() 的调用,这样序列才能继续下去。——摘自百度百科

  • https://www.cnblogs.com/wust221/p/5396263.html)1.每次  新元素进栈的时候,栈里面的元素需要排序2.让最小的或者最大的元素位于栈顶,这样就可以在O(1)时间内获得最小或者最大的值了,3.上面的想法  不能保证,进栈(进了队列)之后 ,出去的元素的顺序,因此只有一个栈是不行的4.要有个保存最小或者最大的元素,每次进栈的时候,跟这个数比较,存起来,5.但是有个问题,就是你最大的元素(或者最小的元素出去)了之后,你该怎么去更新这个值呢,6.就是只  维持一个变量是不够的7.最小元素或者最大元素出栈之后,要能够保证次小元素立马填补现在这个位置,也就是说,我们需要把次小元素和最小元素都保存起来,放到另外的一个辅助栈里面。

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

          具体没有什么特别的问题,只有一些代码的不规范问题。(大小写已经成为习惯,希望我不会被枪杀。)

码云链接

 

结对及互评 —— 见下方评论

参考资料

https://www.cnblogs.com/wust221/p/5396263.html

20172312 2018-2019-1 《程序设计与数据结构》第3周学习总结

标签:info   class   解决   block   方案   前端   style   数组   链表   

原文地址:https://www.cnblogs.com/silver-1029/p/9710441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!