链队列实现杨辉三角c++实现(数据结构)

一、功能:

把杨辉三角的数求出来存储到队列里面,然后再从队列里面读取数据并展示。

二、算法分析:

图片来源:https://baike.baidu.com/item/%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92/215098?fr=aladdin#4_4
算法来源 1-1

三、代码实现:
#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

六、备注:

转载请声明出处!!!

发布了21 篇原创文章 · 获赞 2 · 访问量 6487

猜你喜欢

转载自blog.csdn.net/weixin_43386443/article/details/101803994