一、功能:
把杨辉三角的数求出来存储到队列里面,然后再从队列里面读取数据并展示。
二、算法分析:
三、代码实现:
#include <iostream>
using namespace std;
static int LEN = 0;
/**
功能:队列实现杨辉三角
@auther :
@date :
*/
class Queue{
private:
int data; //存数据啊
public:
void setData(int data){
this->data = data;
}
int getData(){
return this->data;
}
Queue * next; //类指向
};
class LQueue{
public:
Queue * front; //队列头
Queue * rear; //队列尾
};
//创建队列
LQueue * init(){
Queue * head = new Queue;
head->next = NULL;
LQueue * Q = new LQueue;
Q->front = head;
Q->rear = head;
return Q;
}
//出队列
int pop(LQueue * Q){
Queue * node;
int val;
node = Q->front->next;
val = node->getData();
Q->front->next = node->next;
if(node == Q->rear){ //若队列只有一个元素
Q->rear = Q->front;
}
delete(node);
return val;
}
//入队列
void push(LQueue * Q,int val){
//对尾+1
Queue * node = new Queue;
node->setData(val);
node->next = NULL;
Q->rear->next = node;
Q->rear = node;
}
//计算
void count(LQueue * Q,int h){
int s = 1;
push(Q,1); //先放1进去
for (int i = 2; i <= h; s = 1, i++) // 行数 i 从 2 到层高
{
push(Q,1); // 第一个 1
for (int j = 1; j <= i - 2; j++){ // 列位置 j 绕过第一个直接开始循环
push(Q,s=((i - j) * s / j));
}
push(Q,1); // 最后一个 1,换行
}
}
//展示队列
void show(LQueue * Q){
Queue * q = new Queue;
q = Q->front->next;
cout<<"The queue result is:"<<endl;
do{
cout<<q->getData()<<"-";
q = q->next;
}while(q != Q->rear->next);
cout<<endl;
}
//把队列中的数搞成杨辉三角
void showView(LQueue * Q){
Queue * q = new Queue;
q = Q->front->next;
do{
for(int i=0;i<LEN;i++){
for(int k=0;k<(LEN-i-1);k++){
cout<<" ";
}
for(int j=0;j<=i;j++){
cout<<pop(Q)<<" ";
q = q->next;
}
cout<<endl;
}
}while(q != Q->rear->next);
}
//输入
void input(LQueue * Q){
int num = 0;
int value = 0;
cout<<"Several lines:";
cin>>num;
LEN = num;
count(Q,num);
}
int main(int argc, char** argv) {
LQueue * Q = init();
input(Q);
show(Q);
showView(Q);
return 0;
}
四、结果:
五、声明:
图片参考来源https://baike.baidu.com/item/%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92/215098?fr=aladdin#4_4
六、备注:
转载请声明出处!!!