杨辉三角实验报告
更新时间:2023-07-17 13:43:01 阅读量: 实用文档 文档下载
西安交通大学数据结构实验报告!循环链表,C算法!
---《杨辉三角》
专 业:自动化
班 级:自动化05
姓 名:陈绍清
学 号:10054112
指导教师:蔡忠闵 刘美兰
2011.12.20
西安交通大学数据结构实验报告!循环链表,C算法!
实验目的:逐行打印二项展开式 (a + b)i 的系数
杨辉三角形 (Pascal’s triangle)
1 1 i = 1
1 2 1 2
1 3 3 1 3 1 4 6 4 1 4 1 5 10 10 5 1 5 1 6 15 20 15 6 1 6 问题描述:
编写程序,根据输入的行数,屏幕显示杨辉三角。
基本要求:
(1)
(2) 行数不大于20行。 基于队列的操作来实现杨辉三角的不断生成过程。(注:不要用其它的公式计算的方法或者二维数组来实现)
(3)基于数组实现队列的物理数据结构
需求分析:
1、输入形式:输入一个整数n ,0<=n<=20
2、输出形式:打印出来前(n+1)行的杨辉三角数列
3、功能实现:输出前20层的杨辉三角序列
实验内容:
1. 采用类c语言定义相关的数据类型
ADT Queue {
数据对象:D={ ai | ai ∈ElemSet, i=1,2,...,n, n≥0 }
西安交通大学数据结构实验报告!循环链表,C算法!
数据关系:R1={ <ai-1 ,ai >| ai-1, ai ∈D, i=2,...,n } 约定an端为对列尾,a1端为对列头
基本操作:
{
InitQueue (&Q) //构造一个空对列
DestroyQueue (& Q) //销毁对列
ClearQueue (& Q) //将S清为空对列
QueueEmpty(Q) //判断是否为空对列,是则返回True QueueLength(Q) //返回对列的长度
GetHead (Q, &e) // 返回队头元素
EnQueue (& Q, e) //插入元素e为新的队尾元素 DeQueue (& Q, &e) // 删除队头元素,并用e返回
QueueTraverse(Q, visit()) //对每个元素都调用visit函数,如调用失败,则操作失效
}2.
各模块的流程图及伪码算法
Status InitQueue (SqQueue &Q )
{
Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));
// 分配队列的存储空间;
if ( !Q.base ) exit( OVERFLOW ) ;
Q.front = Q.rear = 0; // 队头、尾指针清0
西安交通大学数据结构实验报告!循环链表,C算法!
return OK;
}
Status EnQueue (SqQueue &Q, QElemType e )
{
if ((( Q.rear + 1) % MAXQSIZE )
return( ERROR ) ;
Q.base [ Q.rear ] = e;
Q.rear = (( Q.rear + 1) % MAXQSIZE );
return OK;
} // EnQueue ;
typedef struct Qnode {
QElemType data;
struct Qnode *next;
} Qnode;
typedef struct {
Qnode *front;
Qnode *rear;
} LinkQueue;
== Q. front )
西安交通大学数据结构实验报告!循环链表,C算法!
void YangHui ( int n ) // n为需要输出的杨辉三角形的行数 { SqQueue q; int s=0, t;
InitQueue(q); EnQueue (q, 1);
EnQueue (q, 1);
for( int i=1; i<=n; i++ ) // 逐行计算
{ printf(“\n”); EnQueue (q, 0);
for ( int j=1; j<=i+2; j++ ) // 根据上行系数求下行系数 { DeQueue (q, t);
EnQueue (q, s+t);
s = t;
if ( j != i+2 ) printf(“%3d”, s); // 不输出每行结尾的0
}
}
}
3.算法思路:
西安交通大学数据结构实验报告!循环链表,C算法!
概要设计:
既然要用到队列来打印杨辉三角,那么肯定会利用到队列FILO的性质(First In Lase Out),由于是要打印一个数列,那么肯定要利用已经进队的元素在其出队之前完成杨辉三角的递归性----即利用要出队的元素来不断地构造新的进队的元素,即在第N行出队的同时,我们来构造杨辉三角的第N+1行,从而实现打印杨辉三角的目的。
详细设计:
算法思想已经在概要设计中提到了,现在通过基于队列基本操作的函数以及程序的模块化思想来实现杨辉三角的打印输出问题。
算法函数描述:
void EnterQueue(Queue &Q,int x)//入队
int DeleteQueue(Queue &Q, int &x) //出队
void GetHead(Queue &Q,int &x) //得到队首元素
西安交通大学数据结构实验报告!循环链表,C算法!
void YangHui (int n) //打印杨辉三角数表
通过在void YangHuiTriangle(int n)中反复的调用void GetHead(Queue &Q,int &x)、int DeleteQueue(Queue &Q, int &x)、void EnterQueue(Queue &Q,int x)来实现打印.
调试分析:
调试了很久很久啊,小的错误总是那么的多,主要遇到的问题有:typedef用法不很清楚,刚开始用指针实现的时候出现了问题;没有在基本操作中采用“传引用”的方式传参,导致很长的时间内,根本就没有相应的输出;刚开始在每一行中总是没有出现最后一个1,导致问题的结果是没有相应的入队操作导致后面的杨辉三角很是紊乱!
实验结果调试:
设 计 总 结
西安交通大学数据结构实验报告!循环链表,C算法!
我的这次数据结构课程设计的题目是:《杨辉三角》,通过对该题目的设计,我加深了对数据结构及存储结构的理解,进一步地理解和掌握了课本中所学的各种数据结构,尤其是对单循环链表上基本运算的实现,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。
在此过程我深深地意识到自己知识的严重不足!不断地充实自己才是目前的当务之急!三周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织起来进行学习,总而言之这三周中我学到很多,收益匪浅同时一定程度上提高了自己程序设计和阅读程序的能力。本次课程设计提高了我们的专业知识,使自己所学的内容运用到实际中来,也增强了实际操作能力,为以后的工作学习提供了一个良好的铺垫。
通过本次课程设计的实践学习,我认识到了学好计算机要重视实践操作,所以在以后的学习过程中,我会更加注重实践操作,使自己更好地学好计算机。
参考文献
西安交通大学数据结构实验报告!循环链表,C算法!
1 严蔚敏,吴伟民.《数据结构(C语言版)》.清华大学出版社.
2 严蔚敏,吴伟民.《数据结构题集(C语言版)》.清华大学出版社.
3 谭浩强.《c语言程序设计》. 清华大学出版社.
4.李春葆编著 《数据结构教程(上机实验指导)》 清华大学出版社
5.叶核亚主编 《数据结构(C++版)》 机械工业出版社
致 谢
西安交通大学数据结构实验报告!循环链表,C算法!
课程设计完成之际,除了感到一种轻松以外,马上想到的就是对老师以及在课程设计过程中帮助我的同学们,因为他们的指导和鞭策,才使我下定决心,集中精力投入到课程设计的建设。
首先感谢我的指导老师刘美兰老师,他在我的课程设计过程中提出了指导性的方案和架构,比如让我把密码设计成自动和手动两种方式,使我在不熟悉的领域中仍能迅速掌握新的技术。
感谢我的数据结构老师蔡忠闵老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。
我的同学在这次课设中也给予了我一些好的建议!在此,也谢谢他们!
西安交通大学数据结构实验报告!循环链表,C算法!
附录一:C程序:
#define MAXSIZE 50
#include<stdio.h>
typedef int datatype;
typedef struct
{ int data[MAXSIZE];
int front;
int rear;
}SeqQueue;
SeqQueue*InitQueue()
{SeqQueue *q;
q=(SeqQueue* )malloc(sizeof(SeqQueue)); q->front=q->rear=0;
return q;
}
void EnQueue(SeqQueue*q,datatype x) {
if((q->rear+1)%MAXSIZE==q->front) {
printf("ERROR");exit(1);
}
q->data[q->rear]=x;
西安交通大学数据结构实验报告!循环链表,C算法!
q->rear=(q->rear+1)%MAXSIZE; }
datatype DeQueue (SeqQueue *q) {
datatype x;
if(q->front==q->rear)
{
printf("\nERROR");exit(1); }
x=q->data[q->front];
q->front=(q->front+1)%MAXSIZE; return x;
}
int QueueEmpty(SeqQueue*q) {
return(q->front==q->rear); }
int GetHead(SeqQueue*q)
{
int e;
if(q->front==q->rear)
e=0;
西安交通大学数据结构实验报告!循环链表,C算法!
else
e=q->data[q->front]; return e;
}
void YangHui (int n)
{
SeqQueue *q;
int i,j,s,t;
for(i=1;i<=n;i++)
printf(" ");
printf(" 1\n");
q=InitQueue();
EnQueue(q,0);
EnQueue(q,1);EnQueue(q,1); for(j=1;j<n;j++)
{
for(i=1;i<n-j;i++) printf(" ");
EnQueue(q,0);
do
{
s=DeQueue(q);
西安交通大学数据结构实验报告!循环链表,C算法!
t=GetHead(q);
if(t)printf("%5d",t); else printf("\n"); EnQueue(q,s+t); }
while(t!=0); }
DeQueue(q);
printf("%3d",DeQueue(q)); while(!QueueEmpty(q)) {
t=DeQueue(q); printf("%5d",t); }
}
main()
{
int n;
scanf("%d",&n);
printf("%d”,n\n");
YangHui (n);
}
正在阅读:
杨辉三角实验报告07-17
上海轨道交通供电系统牵降变及电力监控SCADA系统安装调试指南10-02
通风队队长安全生产责任制05-11
PDMS3D的工程化应用(1)09-23
翻译CC1101中文数据手册06-14
广告交易平台ADX与广告网络的差别04-15
创建平安校园工作领导小组06-08
国企混合所有制改革的案例浅析06-08
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 杨辉三角
- 实验
- 报告
- JAVA 实验报告1040501218 钱胜民
- 汇集2012一级建造师各科的精华资料
- 管道铺设施工检验批质量验收记录表
- 大学物理课后答案第三章
- 温州市卫生村考核标准和申请表及范文
- 互联网监管与网络道德建设___标准答案
- 工业源产排污系数手册(2010修订)中册
- 沪粤版九年级物理下册同步测试--本章核心素养提升19 电磁波与信息时代
- 注册设备监理工程师继续教育试题 答案无
- 兴业研究兴业绿色景气指数(GPI)报告(2018年12月):绿色环保行业景气逆势回升
- 新人版小二(上)数《100以内的加法和减法》单元检测卷(二)
- 港口门座起重机润滑管理
- 人力资源工作总结及计划01
- 翟镇矿选煤厂煤泥干燥系统的优化改造
- 2012年1月广东省技术经济学试题
- C语言三天打鱼两天晒网
- 焦磷酸重量法测游离二氧化硅方法的改进
- 新视野大学英语2_选词填空原文及答案
- 美术教室使用规则
- 急性胰腺炎并发急性肝损伤的临床研究