自建队列,利用队列输出杨辉三角

梦想的初衷 提交于 2020-01-25 12:19:42

题目:依据数据结构队列知识,编写一个算法,采用队列输出杨辉三角
解题思路:
1 自建队列,将杨辉三角的数据放入队列队尾;
2 打印时,将队列头取出打印,并从队列中删除;
代码如下:
队列代码


package queue;
    /**
    * 定义一个队列queue
   */
public class Queue<T> {
        private   Object[] data; //队列中存放的数据
        private int maxSize ; //队列的大小
        private int front ;//指向队列头部的指针
        private int rear ; //指向队列尾部的指针
        public Queue(int size){
            if (size < 0)
                throw new IllegalArgumentException("数据非法: "+
                        size);
            this.maxSize = size;
            this.data = new Object[maxSize];
            front = -1;
            rear = -1;
        }
        /**
         * 判断队列是否已满
         * @return
         */
        public boolean isFull(){
            return rear == maxSize -1 ;
        }

        /**
         * 判断队列是否为空
         * @return
         */
        public boolean isEmpty(){
            return rear == front;
        }

        /**
         * 添加数据到队列
         * @param n
         */
        public void push(T t){
            if(isFull()){
                System.out.println("队列已满,不能添加");
                return;
            }
            data[++rear] = t;
        }

        /**
         * 显示头部数据
         * @return
         */
        public Object head(){
            if(isEmpty()){
                throw new RuntimeException("队列为空");
            }
            Object obj=data[front+1];
            return obj;
            //System.out.println(data[front+1]);
        }

        /**
         * 取出头部数据
         * @return
         */
        public Object pop(){
            if(isEmpty()){
                throw new RuntimeException("队列为空");
            }
            Object obj = data[++front];
            data[front] = null;
            return obj;
        }

        /**
         * 打印全部数据
         */
        public void print(){
            if(isEmpty()){
                System.out.println("队列为空");
                return;
            }
            for(int i=0;i<data.length;i++){
                System.out.printf("array["+i+"]=%d\n",data[i]);
            }
        }
}


打印杨辉三角代码


import queue.Queue;
import java.util.Scanner;

public class YhTrianQueue {
    public static void main(String[] args) {
        System.out.println("How many lines do you want?:");
        Scanner input = new Scanner(System.in);
        //输入杨辉三角的行数
        int lines = input.nextInt();
        //创建二维数组,用于存放数据
        int[][] array=new int[lines][lines];
        //创建队列  队列的长度为杨辉三角中数据的总数(n*(n+1))/2
        Queue<Integer> queueI = new Queue((lines*(lines+1))/2);
        //循环在队列中加入数据
        for (int i=0;i<lines;i++){
            //打印数值
            for (int j=0;j<i+1;j++){
                if ((i >= 2) && (j >= 1)&&(j < i)){
                    array[i][j] = array[i-1][j-1] + array[i-1][j];
                    //在队列中添加数据
                    queueI.push(array[i][j]);
                }
                else {
                    array[i][j] = 1;
                    //在队列中添加数据
                    queueI.push(array[i][j]);
                };
            }
        }
        //打印杨辉三角
        for (int i=0;i<=lines-1;i++) {
            //打印空格
            for (int j=0;j<=lines-i-1;j++){
                System.out.print(" ");
            }
            //打印数值,每行打印的个数为行数的数量
            for (int m=0; m <= i; m++) {
                System.out.print(queueI.head() + " ");
                //队头出队列
                queueI.pop();
            }
            System.out.println();
        }
    }

}


输出
当输入为9行时:
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!