一、功能:
把楊輝三角的數求出來存儲到隊列裏面,然後再從隊列裏面讀取數據並展示。
二、算法分析:
三、代碼實現:
#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
六、備註:
轉載請聲明出處!!!