杨辉三角c语言程序jian,杨辉三角C语言程序队列实现(带源码+解析)
杨辉三角,即如下
通过学习数据结构,解决杨辉三角,可以使用循环来实现:在循环队列中依次存放第 i-1 行上的元素,然后逐个出队并打印,同时生成第 i 行上的元素并入队。
如果要求计算并输出杨辉三角前 n 行的值,则队列的最大空间应为 n+2。假设队列中已存有第 k 行的计算结果,为了计算方便,在两行之间添加一个 0 作为行界值,则在计算第 k+1 行之前,头指针指向第 k 行的 0,而尾元素为第 k+1 行的0。
实现代码为:
#include
#include
#define MAXSIZE 1000 //队列的最大长度
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];//队列的存储空间
int front,rear;//队列的队头指针和队尾指针
}CyQueue;
//初始化队列
void Init_CyQueue(CyQueue *Q){
Q->front = Q->rear =0;
}
//判断队列是否为空
int Empty_CyQueue(CyQueue *Q){
return Q->rear == Q->front;//为真,返回1 则表示队列为空
}
//数据 e 进队列
void In_CyQueue(CyQueue *Q, int e){
if(Q->rear == MAXSIZE){
return;
}
Q->data[Q->rear] = e;
Q->rear+=1;
}
//数据出队列,通过将出队列数据赋值给 e
void Out_CyQueue(CyQueue *Q,int *e){
//出队之前,先判断队列是否为空
if(Q->rear == Q->front){
return;
}
*e = Q->data[Q->front];
Q->front+=1;
}
//获取队头元素的值
void Front_CyQueue(CyQueue * Q,ElemType *x){
if(Empty_CyQueue(Q)){
return;
}else{
*x=Q->data[Q->front];
}
}
//杨辉三角实现函数
void yanghui(int n){
CyQueue Q;
int i,s,e,k;
//由于杨辉三角越往下,值的位数越多,为了保持输出数据的形状,杨辉三角第一行中的1需要空多个格
for(i=1;i<=n;i++){
printf(" ");
}
//输出 1,需要控制其所占位数
printf("%-5d\n",1);
//初始化队列,同时将三角的第二行作为起始行,向下推导
Init_CyQueue(&Q);
In_CyQueue(&Q,0);
In_CyQueue(&Q,1);
In_CyQueue(&Q,1);
k=1;
while(k
//每往下一行,其第一个数字都需往左移动 1 个占位
for(i=1;i<=n-k;i++){
printf(" ");
}
// 0 作为转行符,入队列
In_CyQueue(&Q,0);
do{
//队头元素出队列
Out_CyQueue(&Q,&s);
//取新的队头元素
Front_CyQueue(&Q,&e);
//如果所取元素非 0,则输出,否则做转行操作
if(e){
printf("%-5d",e);
}else{
printf(" \n");
}
In_CyQueue(&Q,s+e);
}while(e!=0);//一旦 e 值为 0,即做转行操作,退出循环,开始新一行的排列
k++;
}
//出循环后,队列中还存有下一行的数据
Out_CyQueue(&Q,&e);
while(!Empty_CyQueue(&Q)){
Out_CyQueue(&Q,&e);
printf("%-5d",e);
}
}
int main(){
yanghui(10);
return 0;
}
运行结果:
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
1 10 45 120 210 252 210 120 45 10 1
提示:本节代码中,每个输出元素占 5 个占位是针对于百位数来说的,若输出杨辉三角中出现上千的值,就需要进行调整。
杨辉三角c语言程序jian,杨辉三角C语言程序队列实现(带源码+解析)相关推荐
- 用java实现文学研究助手_数据结构文学研究助手 C语言代码实现(带源码+解析)...
文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置.一个实现这一目标的文字统计系统,称为"文学研究助手". 假设英文小说存放在一个文本文件中,每个单词不包含空格且不跨行, ...
- C语言十字消除游戏(超简单详细),详细思路+源码分享
十字消除,休闲小游戏,在规定时间内,只要是十字线能连接到的相同颜色的方块,就能获得相应的得分,如果点击后没有能够消除的方块会扣除时间,是一款益智小游戏. 我们将编写十字消除游戏,用户点击空白方块,沿其 ...
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者"tingsking18"和主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消 ...
- 小程序源码:全网独家小程序版本独立微信社群人脉系统社群空间站最新源码开源+详细教程
功能介绍: 1.微信社群是一个集发布.展示社群信息.人脉推广的裂变工具/平台. 2.通过人脉广场,将商家信息通过名片进行展示,让资源对接.人脉推广更加便捷高效.为平台带来更多流量,让平台更有价值. 3 ...
- 微信小程序仿网易云音乐(使用云开发,提供源码)
微信小程序仿网易云音乐(使用云开发,提供源码)!!!!!!!!!!! 源码: 链接:https://pan.baidu.com/s/1z_ZnRVbT4vjEENimi8yBQQ 提取码:u0o3 一 ...
- C51单片机与PCF8591模块的交互:C语言源码解析
目录 1. PCF8591模块简介 2. C51单片机与PCF8591的连接 3. C51单片机与PCF8591的C语言源码解析 4. 用法示例 5. 总结 6. 参考文献 在微控制器的世界中,C51 ...
- 【微信小程序系列】小程序简单连接后端数据库完整示例(附免费下载的源码)(Servlet)
[微信小程序系列]小程序简单连接后端数据库完整示例(附免费下载的源码)(Servlet) 登录页面 login.wxml <view class="page">< ...
- 【阅读笔记】Taro转小程序编译源码解析
前言 这篇文章的主要是对taro/taro-tarnsformer-wx进行源码解析,对于想要了解Taro或者了解babel的人希望看了能得到一定的启发. 由于我文笔实在太烂,所以整篇文章都是以阅读笔 ...
- 10年大厂程序员是如何高效学习使用redis的丨redis源码分析丨redis存储原理
10年大厂程序员是怎么学习使用redis的 1. redis存储原理分析 2. redis源码学习分享 3. redis跳表和B+树详细对比分析 视频讲解如下,点击观看: 10年大厂程序员是如何高效学 ...
最新文章
- wap开发中取到真实的手机号码
- ArcGIS Engine生成等值线(C#)
- win32应用程序_不是有效的win32应用程序怎么解决
- cortex M内核优先级设置
- 突破Windows下select64的限制
- C. Kefa and Park【树的遍历】
- filepath直接指定到文件名吗_PyTest运行指定的测试集
- html 左边固定右边自动,七种实现左侧固定,右侧自适应两栏布局的方法
- storm中的乐器 wolven_Wolven Storm 风雪狼踪
- VMX虚拟机环境下CentOS扩展home磁盘空间
- python深拷贝和浅拷贝的区别_python 深拷贝与浅拷贝的区别
- Oracle11.2.0.4升级补丁包
- Charles抓包安卓端
- 2017-2018-1 20155228 《信息安全系统设计基础》第一周学习总结
- php 中字符串长度不正确
- 关于pycharm中html在页面访问的记录(授权问题)
- 黑帽SEO主要作弊方法
- 结构体自定义指针函数c语言,C语言结构体指针在函数调用中的使用
- -bash: ./mysqld: No such file or directory
- Windows系统在任务管理器中结束任务后电脑黑屏恢复
热门文章
- Redis 设计与实现 1:数据库 redisDb
- 透过Bigbang《花路》销量战绩看QQ音乐的压倒性优势
- 蔡先生论道大数据之一 : 大数据由来
- 14、Spring Clou14——路由配置细节
- 拓扑排序:绿豆蛙的归宿
- Redis进阶篇:发布订阅模式原理与运用
- 汉家江湖无名幻境服务器找不到,汉家江湖无名幻境怎么打开_汉家江湖无名幻境开启方式攻略_玩游戏网...
- oracle For循环和触发器Tigger
- emeditor文本编辑器 秘钥
- python设计一个动物类_【Python】每日一练:设计圆类计算周长和面积、设计动物类...