第三章:队列及其应用之一---输出杨辉三角
2015-01-05 13:00
316 查看
#include <stdio.h> #include <string.h> #define N 100 #define OK 1 #define ERROR 0 int f ={0,1,1,0}; //使用一个队列输出n行杨辉三角; /* 技巧: 为使第i行与第i+1行数据可以区分开,在两行之间放入一个数字0; */ void Print1(int n) { //自己的算法使用一个队列输出杨辉三角; int i,j,m; //n代表打印n行; printf("这是一个打印杨辉三角的函数:\n"); i=1;j=4; /*j=(j+1)%N;*/ while(n--) { do{ int t; if(i==0) t=N-1; else t=i-1; //防止当i=0时,i-1溢出; f[j]=f[i]+f[t]; if(f[j]) printf("%d ",f[j]); i=(i+1)%N;j=(j+1)%N; m=i-1; if(m==-1) m=N-1; }while(f[m]);//当f[m]为0时,计算当下并在后面补0,并退出这一重循环; f[j]=0; j=(j+1)%N; printf("\n"); } } typedef struct LinkList { int *x; int base,top; }LinkList; LinkList L; void ChuShi(LinkList &L) { //初始化队列函数; L.x = new int ; L.top=L.base=0; printf("队列初始化完毕!\n"); } void Jin(LinkList &L,int m) { //将数值m插入队尾; L.x[L.base]=m; L.base=(L.base+1)%N; } void Chu(LinkList &L,int &t) { //最前方的系数出队; t=L.x[L.top]; L.top=(L.top+1)%N; } void yanghui(int n) { //书上的方法,也是使用一个队列输出杨辉三角,但具体操作有所不同! /* 好处: 当你向队列中队尾加入元素的时候,只需要将值得多少传入函数中即可, 而不需要再去记录队尾的位置,这个在队列的结构体中自己有所体现! */ int i,j; Jin(L,1);Jin(L,1); int s=0,t; for(i=1;i<=n;i++) { Jin(L,0);//各行之间插入一个0表示区分; for(j=1;j<=i+2;j++) { //处理第i行的i+2个元素; Chu(L,t); Jin(L,s+t); s=t; if(j!=i+2) printf("%d ",s); } printf("\n"); } } int main() { printf("请输入需要打印的杨辉三角的行数:\n"); int x; scanf("%d",&x); /*自己的方法: printf("1 1\n"); Print1(x); */ //书上的方法: ChuShi(L); yanghui(x); return 0; }
相关文章推荐
- 第三章:队列及其应用之一---输出杨辉三角
- 输出杨辉三角 队列小应用
- 队列的应用—输出杨辉三角
- 输入一个字符串表达式,输出计算结果(队列、栈的应用)
- 队列的简单应用-杨辉三角和约瑟夫环
- 利用队列输出杨辉三角
- (Erlang语言)运行时中的无锁队列及其在异步线程中的应用
- 浅谈链表 栈 队列 及链表的逆序输出应用
- C队列 输出杨辉三角
- 第三章:顺序栈及其应用之三---数制转换
- 随机过程及其在金融领域中的应用 第三章 习题 及 答案
- 队列应用之打印杨辉三角_legend
- 单调队列 及其应用
- 数据结构学习中的简单问题(一):用链表方式实现的队列输出杨辉三角
- java中无锁并发数组队列及其应用
- 第三章:顺序栈及其应用之一---表达式求值
- 单调队列及其应用
- Mapreduce中的RCFile输出RCFileOutputFormat实现及其应用
- 单调队列及其应用
- C++ STL 优先队列 及其 霍夫曼编码应用示例