zoukankan      html  css  js  c++  java
  • 20162302队列加分项

    20162302 队列加分项

    主要内容:

    一、补全课上代码,用实现循环队列

    二、循环队列打印杨辉三角

    三、单步跟踪排队情况,画出队列变化图


    一、补全课上代码,用实现循环队列

    这个项目的主要目的是使用循环队列打印出杨辉三角形,所以首先要构建循环队列

    使用数组实现时,循环队列比线性队列要节省很多空间

    课本上也给出了部分代码


    相对于链表而言,循环数组的first()相对复杂,要考虑到front指针指向数组长度之外的位置(比如数组长度为10,指针指向11)的情况:

    • 如果是直接引用queue[front]指向的对象会出现空指针
    public T first() {
            return queue[front];
        }
    
    • 所以就要在front上做一些手脚
    public T first() {
            return queue[front % queue.length];
        }
    
    • dequeue()中引用front的时候也要使用这种操作
    public T dequeue() {
            if (count == 0)
                return null;
            else {
                T data = queue[front% queue.length];
                queue[front% queue.length] = null;
                front++;
                count--;
                return data;
            }
        }
    

    其余部分都和的构建方式差不多,这里就不赘述了。

    二、循环队列打印杨辉三角

    PPT上有关于杨辉三角算法流程的程序框图

    • 首先输入数据0,1,0
    triangle.enqueue(0);
    triangle.enqueue(1);
    triangle.enqueue(0);
    
    • 将队列前面的两个数字相加并放到队列末尾并弹出首位
    s = (Integer) triangle.first();
    triangle.dequeue();
    e = s + (Integer) triangle.first();
    System.out.print(e + "	");
    triangle.enqueue(e);
    
    • 通过一个for循环可以根据条件打印出杨辉三角形的一行
    for (int i = 0; i < j; i++) {}
    triangle.enqueue(0);
    
    • 最后再使用一个for循环循环出阶数就可以实现杨辉三角形的打印了。可以在前面叫上Scanner来让用户决定输出的行数。
    public class PascalTriangle {
        public static void main(String[] args) {
            CircularArrayQueue triangle = new CircularArrayQueue();
            Scanner scan = new Scanner(System.in);
            System.out.print("输入杨辉三角形的阶数:");
            int h = scan.nextInt();
            Integer s;
            Integer e;
            triangle.enqueue(0);
            triangle.enqueue(1);
            triangle.enqueue(0);
            System.out.println("1");
            for (int j = 2; j <= h; j ++) {
                for (int i = 0; i < j; i++) {
                    s = (Integer) triangle.first();
                    triangle.dequeue();
                    e = s + (Integer) triangle.first();
                    System.out.print(e + "	");
                    triangle.enqueue(e);
                }
                triangle.enqueue(0);
                System.out.println();
            }
        }
    }
    

    三、单步跟踪排队情况,画出队列变化图

    断点设置

    • 将断点放在数据增加和减少的地方可以观察队列变化的情况

    单步跟踪

    • 初始值为0,1,0

    循环以下步骤

    • 弹出队列头部

    • 求和并添加到队列尾

    统计到Excel表格

  • 相关阅读:
    .net core 一次坑爹的类库打包过程
    elasticsearch的store属性 vs _source字段
    VMware虚拟机中CentOS设置固定IP
    Elasticsearch 中文分词(elasticsearch-analysis-ik) 安装
    docker之docker-machine用法
    docker之数据卷管理
    docker之Dockerfile实践
    docker之Dockerfile指令介绍
    docker之手动构建新的镜像
    docker之container
  • 原文地址:https://www.cnblogs.com/yangjingdian/p/7710653.html
Copyright © 2011-2022 走看看