杨辉三角队列实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

杨辉三角显示实验报告
1.问题描述:
编写程序,根据输入的行数,屏幕显示杨辉三角。

2.基本要求:
(1)行数不大于20行。

(2)基于队列的操作来实现杨辉三角的不断生成过程。

(注:不要用其它的公式计算的方法或者二维数组来实现)
(3)基于数组实现队列的物理数据结构
3.需求分析:
1、输入形式:输入一个整数n ,0<=n<=20
2、输出形式:打印出来前(n+1)行的杨辉三角数列
3、功能实现:输出前20层的杨辉三角序列
4、样例输入输出:(数据加强版)
输入:10
输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
5、效率分析:O(n)
4.概要设计:
利用到队列先进先出的性质(First In First Out),基本的算法实现是利用已经进队的元素在其出队之前杨辉三角的下一行数列,----即利用要出队的元素来不断地构造新的进队的元素,即在第N行出队的同时,我们来构造杨辉三角的第N+1行,从而实现打印杨辉三角的目的。

5.详细设计:
算法思想已经在概要设计中提到了,现在通过基于队列基本操作的函数以及程序的模块化思想来实现杨辉三角的打印输出问题。

算法函数描述:
队列类:
队列类的数据成员:
int front,rear,//ront和rear分别是指向队头和队尾的指针
maxsize;//队列中的元素数
int* listArray //存放队列中的元素
队列的基本操作:
V oid Queue(int ) function://构造一个空队列
V oid EnQueue(,int x) :function://将元素x入队
V oid outQueue():function://删除队头元素,并用x返回其值
int getvalue()/取得队头的值
int length()//返回队列中元素的个数
通过在main函数中首先打印处第一二行并将大二行的数据存入队列中,根据用户输入的行数n;在for循环中反复的调用V oid EnQueue(,int x)、V oid outQueue()、int getvalue()等函数来实现杨辉三角的打印.
调试分析:
调试了很久,主要是在答应第二行以后的数列时的算法有点差错,最后,在队列类添加了int getvalue()函数,解决了算法的不足;还有运行时出现的错误,内存溢出,最后发现在对rear和front进行操作时没有除maxsize取余导致内存溢出;
6.测试数据:
7.实验心得
这次试验中做的相对比较轻松,因为在上机课上之前我看了下题目,想了下这个题目的大概算法,并且上网查了些资料,所以上课之前有了大概的思路,所以半个小时左右就做出来了。

所以课前预习是个不错的方法,而且自己思考的时间也会长一点,收获还是挺多的。

相关文档
最新文档