队列加分项

实验要求

1 用实现循环队列
2 参考PPT用循环队列打印杨辉三角
3 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息
4 把代码推送到代码托管平台
5 把完成过程写一篇博客:重点是单步跟踪过程和遇到的问题及解决过程
6 提交博客链接

实验准备

  • 1、杨辉三角特点
    (1)int数组中元素默认值为 0
    (2)然后每一次打印新的一行的元素的时候:
    新的特定位置的元素 = 该位置原来的元素 + 该位置的前一个位置的值
    (3)参考老师上课给的ppt
    1063500-20171124232844453-210342600.png

  • 2、分别定义行数和列数,每行第一列和最后一列为1

for (int i = 1; i <= n ; i++) {
            for (int j = 1; j < i+1; j++) {
  • 3、设置初始值
arr.enqueue(1);
        arr.enqueue(0);
  • 4、前一行相邻两元素之和
int num1 = (int) arr.dequeue();
                int num2 = (int) arr.first();
                int num = num1 + num2;

实验截图

1063500-20171124230708781-709477778.png

代码实现

public class yhsj {
    public static void main(String[] args) throws Stack.EmptyCollectionException {
        int n = 0;
        CircularArrayQueue arr = new CircularArrayQueue(n + 2);
        System.out.println("how many lines you want:");
        Scanner scan = new Scanner(System.in);
        n = scan.nextInt();

        arr.enqueue(1);
        arr.enqueue(0);
        System.out.print(" "+"\n");
        for (int i = 1; i <= n ; i++) {
            for (int j = 1; j < i+1; j++) {
                int num1 = (int) arr.dequeue();
                int num2 = (int) arr.first();
                int num = num1 + num2;
                System.out.print(num );
                arr.enqueue(num);
            }
            arr.enqueue(0);
            System.out.println();
        }
    }
}

实验中遇到的问题

  • 打印出的杨辉三角存在格式问题,数之间没有间距(如下图)
    1063500-20171124234019734-1173931819.png

  • 解决方法

通过添加一个条件判断语句来解决间距问题,如下图

for(int a = 0; a<j ; a++)
         System.out.print(" ");

1063500-20171124235025484-1968612777.png

转载于:https://www.cnblogs.com/guominxiaocao/p/7712655.html

有限阻塞对列 题目背景: wps文档在线纠错有一种场景,需要把文档内容发送到服务端纠错,纠错完成后返回客户端完成文档纠错。这一过程中,文档中首先需要被‘分句’,文档内容被分成一个一个单句,然后被存放到一个有限大小的队列中等待被执行。如果队列满,添分句的线程被阻塞直到队列非满。 当分句的队列不为空时,说明文档有内容需要被调用纠错,此时需要把分句发送到纠错服务器校验,被校验过后的分句将从队列中将其删除. 如果队列为空,处理分句的线程被阻塞直到队列非空。 功能需求: 请使用c++实现一个拥有如下方法的线程安全有限阻塞队列, class BoundedBlockingQueue(int capacity) 构造方法初始化队列,其中capacity代表队列长度上限 void enqueue(int element) 通过enqueue函数在队列中增一个element. 如果队列满,调用线程被阻塞直到队列非满。 int dequeue() 通过dequeue函数在队列中处理一个element,随之将其从队列中删除. 如果队列为空,调用线程被阻塞直到队列非空。 int size() 返回当前队列元素个数。 该队列将会被多线程同时访问。每一个线程要么是一个只调用enqueue方法的生产元素,要么是一个只调用dequeue方法消化元素。 你需要实现该"有限阻塞队列"类,并且模拟其在多线程环境下的执行情况。 注意事项: 1 如果使用线程间通信,选择你认为最合适的方式并给出理由。 2尽可能使用线程池来提高程序执行效率(分项)。
04-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值