数据结构总结系列——循环队列之杨辉三角
Posted ever17
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构总结系列——循环队列之杨辉三角相关的知识,希望对你有一定的参考价值。
今天我们来写一个循环队列的应用哦!
解决的是杨辉三角问题~~
对于这样一个上下多层之间有密切联系的数据,如果只是用数组和循环来解决的话,显然会浪费大量的空间和时间,
所以我们用队列来解决这一问题:
之所以选用循环队列也是因为它对于空间的利用是非常有效的,方便我们的工作:
开始定义结构体:
typedef struct //定义循环队列 int data[MAXMIZE]; int Front; int Rear; RollQueue;
这里的最大值(MAXMIZE)大家可以用宏定义来自己定义想要的限制呦
关于循环队列,由于它没有浪费空间,所以非常有用的背后就是要多计算一点插入的位置:
所以我们之后的判断条件会多一点~
队列相关函数的设置:
由于队列是一种只能从队尾插入,从队头删除的结构,因此简化了我们的操作:
void InitQueue(RollQueue &R)//队列初始化函数 R.Front=R.Rear=0;//博主这里没有用指针,直接用了数组~ void InsertQueue(RollQueue &R,int Data)//插入队尾 //首先判断是否满队列。 if((R.Rear+1)%MAXMIZE==R.Front)//满队列条件 cout << "This queue is full." << endl; else R.data[R.Rear]=Data; R.Rear=(R.Rear+1)%MAXMIZE;//success int DeleteQueue(RollQueue &R,int &Re)//删除队头元素,用re返回 if(R.Rear==R.Front)//判断是否队空 cout << "This queue is empty." << endl; return 0; else Re=R.data[R.Front]; R.Front=(R.Front+1)%MAXMIZE; return Re;
最后是杨辉三角的建立:
void YangHui(int n) RollQueue R; InitQueue(R); InsertQueue(R,1);//预先放入第一行的系数 InsertQueue(R,1);//预先放入第一行的系数 int s=0; for(int i=1;i<=n;i++) cout << endl;//这里换行鸭 InsertQueue(R,0);//开头插入一个0用来进行第一次加法 for(int j=1;j<=i+2;j++)//处理第i行的i+2个系数 int t; DeleteQueue(R,t); InsertQueue(R,s+t);//这里把上一行的两个数据相加得到这一行的数据s s=t; if(j!=i+2) cout << s << ‘ ‘ ;
最后是整个程序:
#include <bits/stdc++.h> using namespace std; #define MAXMIZE 100 typedef struct //定义循环队列 int data[MAXMIZE]; int Front; int Rear; RollQueue; void InitQueue(RollQueue &R)//队列初始化函数 R.Front=R.Rear=0;//博主这里没有用指针,直接用了数组~ void InsertQueue(RollQueue &R,int Data)//插入队尾 //首先判断是否满队列。 if((R.Rear+1)%MAXMIZE==R.Front)//满队列条件 cout << "This queue is full." << endl; else R.data[R.Rear]=Data; R.Rear=(R.Rear+1)%MAXMIZE;//success int DeleteQueue(RollQueue &R,int &Re)//删除队头元素,用re返回 if(R.Rear==R.Front)//判断是否队空 cout << "This queue is empty." << endl; return 0; else Re=R.data[R.Front]; R.Front=(R.Front+1)%MAXMIZE; return Re; void YangHui(int n) RollQueue R; InitQueue(R); InsertQueue(R,1);//预先放入第一行的系数 InsertQueue(R,1);//预先放入第一行的系数 int s=0; for(int i=1;i<=n;i++) cout << endl;//这里换行鸭 InsertQueue(R,0);//开头插入一个0用来进行第一次加法 for(int j=1;j<=i+2;j++)//处理第i行的i+2个系数 int t; DeleteQueue(R,t); InsertQueue(R,s+t);//这里把上一行的两个数据相加得到这一行的数据s s=t; if(j!=i+2) cout << s << ‘ ‘ ; int main() cout << "Input YangHui triangle n:" << endl; int n; cin>> n; YangHui(n); return 0;
那么我们的循环队列应用就讲到这里啦~~
以上是关于数据结构总结系列——循环队列之杨辉三角的主要内容,如果未能解决你的问题,请参考以下文章