用循环队的方式处理杨辉三角形问题(C++)

用循环队的方式处理杨辉三角形问题(C++)

#include <iostream>
#include<malloc.h>
using namespace std;
const int MAX=100;

//循环队列
typedef struct 
{
    int data[MAX];
    int front; //头指针
    int rear;  //尾指针
} SeqQueue;

//初始化循环队列
void InitQueue(SeqQueue *&q) 
{
	q=(SeqQueue *)malloc(sizeof(SeqQueue));
	q->front = q->rear = 0;
}

//入队
bool EnterQueue(SeqQueue *q, int x) 
{
    if ((q->rear+1)%MAX==q->front) 
        return false;
    q->data[q->rear]=x;
    q->rear=(q->rear+1)%MAX;
    return true;
}

//出队
bool DeleteQueue(SeqQueue *q,int &x) 
{
    if (q->front==q->rear)
        return false;
    x=q->data[q->front];
    q->front=(q->front+1)%MAX;
    return true;
}

//取对头元素
bool GetHead(SeqQueue *q,int &x) 
{
    if (q->front==q->rear)
        return false;
    x=q->data[q->front];
    return true;
}

//判断队列是否为空
int IsEmpty(SeqQueue *q) 
{
    if(q->front==q->rear)
        return true;
    return false;
}

//打印杨辉三角
void YangHuiTriangle(int N) 
{
    SeqQueue *q;
    InitQueue(q);
    int n,i,x,temp;
    EnterQueue(q,1); //第一行元素入队
    for (n=2;n<=N;n++)
	{
        EnterQueue(q,1); //第n行第一个元素入队
        for (i=1;i<=n-2;i++)
		{ //利用队中第n-1行元素产生第n行的中间n-2个元素并入队
            DeleteQueue(q,temp);    //出队元素赋给temp
            cout<<temp;       //打印第n-1行的元素
            GetHead(q,x);
            temp=temp+x;      //利用第n-1行元素产生第n行元素
            EnterQueue(q,temp); //可以利用画图理解/
        }

        DeleteQueue(q,x);
        cout<<x; //打印n-1行最后一个元素
        EnterQueue(q,1);
        cout<<endl;
    }
    while (!IsEmpty(q)) { //打印最后一行
        DeleteQueue(q,x);
        cout<<x;
    }
}

int main() {
    int N;
    cout<<"请输入想打印的行数:"<<endl;
    cin>>N; 
    YangHuiTriangle(N);
    cout<<endl;
    return 0;
}

输入:5
输出:
1
11
121
1331
14641

 请输入想打印的行数:
5
1
11
121
1331
14641

--------------------------------
Process exited after 2.028 seconds with return value 0
请按任意键继续. . .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值