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

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

教材学习内容总结

队列

  • 概述

    • 队列是一种线性集合,其元素从一端加入,从另一端删除
    • 队列的元素是按FIFO方式处理的。第一个进入的元素,也就是第一个退出的元素
  • 用链表实现队列

    • 除了一个指向链表首元素的引用(称为head)之外,还需要跟踪另一个指向链表末元素的引用(称为tail),还要用一个整型变量count来跟踪队列中的元素数目。

    • 如果是往链表前端添加新结点,那么就把该新结点的next指针设置为指向链表的head变量,把head变量设置为指向新结点。如果是往链表的末端添加新结点,那么就把链表末端结点的next指针设置为指向新结点,然后把链表的tail设置为指向新结点。

    • 链表实现队列的其他操作相当简单,它们类似于栈的相应操作。只要返回一个指向队列前端元素的引用即可实现first操作。当元素数目为0时isEmpty操作返回true,否则返回falseosize操作只要返回队列中的元素数目即可。

  • 用数组实现队列

    • 基于数组的队列实现策略就是将队列的某一端(比如前端)固定在数组的索引0处。所有元素会不间断地存放在数组中。

    • 与ArrayStack实现中的top变量类似,整型变量rear用于表明数组中的下一个空闲单元。注意,rear还表示了队列中的元素数目。

    • 由于队列操作会修改集合的两端,因此将一端固定于索引0处要求移动元素。

    • 把数组看作是环形的,可以除去在队列的数组实现中把元素移位的需要·

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

这周内容和上周差不多 在队列的理解和实现没遇到什么困难,具体的问题也只有双向队列的实现问题,解决方案已在下文给出

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

 public void addFirst(Item item) {
        if (item == null)
            throw new NullPointerException("can't add null element!");
        Node first = new Node();
        first.item = item;
        first.prev = nil;
        first.next = nil.next;
        nil.next.prev = first;
        nil.next = first;
        n++;
    }

    public void addLast(Item item) {
        if (item == null)
            throw new NullPointerException("can't add null element!");
        Node last = new Node();
        last.item = item;
        last.next = nil;
        last.prev = nil.prev;
        nil.prev.next = last;
        nil.prev = last;
        n++;
    }

    public Item removeFirst() {
        if (isEmpty())
            throw new NoSuchElementException("Can't remove from empty deque");
        Node del = nil.next;
        Item item = del.item;
        del.next.prev = nil;
        nil.next = del.next;
        n--;
        return item;
    }

    public Item removeLast() {
        if (isEmpty()) throw new NoSuchElementException("Stack underflow");
        Node del = nil.prev;
        Item item = del.item;
        del.prev.next = nil;
        nil.prev = del.prev;
        n--;
        return item;
    }

上周考试错题总结

上周没有进行测试,所以没有错题总结

代码托管

点评过的同学博客和代码

  • 本周结对学习情况
    • 20172312
    • 结对学习内容
      • 课本第五章

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 8/8
第二周 500/500 1/2 15/ 23
第五周 802/1302 1/3 12/35

参考资料

原文地址:https://www.cnblogs.com/m1sty/p/9707213.html