0
点赞
收藏
分享

微信扫一扫

队列应用之打印杨辉三角_legend


(1)图解:


队列应用之打印杨辉三角_legend_杨辉三角



(2)代码实现:


#include <iostream>

using namespace std;

/*

打印杨辉三角;

杨辉三角如:

1

1 1

1 2 1

1 3 3 1

第n行有n个数,两边是1.然后中间的某个数,等于上一行的两个相邻数之和。

*/

#define MaxSize 30

typedef int qElemType ;

class QueueType{

public :

qElemType array[MaxSize];

int front;

int rear;

public:

QueueType(){

front=rear=-1;

}



bool en_queue(qElemType elem){

if(front==(rear+1)%MaxSize){

cout<<"the queue is full"<<endl;

return false;

}

rear=(rear+1)%MaxSize;

array[rear]=elem;

return true;

}



bool de_queue(qElemType & elem){

if(front==rear){

cout<<"the queue is empty "<<endl;

elem=0;

return false;

}

front=(front+1)%MaxSize;

elem=array[front];

return true;

}



bool get_front(qElemType & elem){



if(front==rear){

cout<<"the queue is empty "<<endl;

elem=0;

return false;

}

elem=array[(front+1)%MaxSize];

return true;

}



};



/*

打印杨辉啊三角的前n行:

idea: 第i行中有i个数,两边是1,只需要获得中间的i-1个数。

中间的某个数用第i-1行的两个相邻的数,来获得。

*/

void printYangHuiTriangle(int n){

QueueType queue;

qElemType elem=0,elem1=0;

queue.en_queue(1);/*第一行的1入队列*/



int i ,j;

for(i=2;i<=n;i++){



queue.en_queue(1);/*第i行的第一个元素1入队。*/

/*从i开始,打印每一行*/

for(j=1;j<=i-2;j++){

/*获取第i行的中间的i-2个元素*/

queue.de_queue(elem);

cout<<elem<<" ";/*输出出队的第i-1行的第j-1个元素元素*/

queue.get_front(elem1);/*获取队头,即获得第i-1行的第j个元素*/

elem=elem+elem1;

queue.en_queue(elem);/*获得了i行的j号元素*/

}/*for循环后,第i-1行中的倒数第二个元素已经出队*/



queue.de_queue(elem);/*第i-1行的最后一个元素出队*/

cout<<elem<<endl;

queue.en_queue(1);/*第i行的最后一个元素入队*/

}



}

int main()

{

printYangHuiTriangle(7);

cout << "Hello world!" << endl;

return 0;

}

举报

相关推荐

打印杨辉三角

打印杨辉三角形

杨辉三角.java

杨辉三角(Java)

杨辉三角算法

leetcode:杨辉三角

0 条评论