前言

这次是数据结构课的第三次实验报告中的题,要求是使用数据结构中的队列实现杨辉三角,在这里我记录一下遇到的问题。
Snipaste_2019-10-20_21-31-12.png

什么是杨辉三角

要想完成这次作业,首先得明白什么是杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
每个数是由它肩膀上的俩个数之和,由此得到的数字三角形。

运行结果

Snipaste_2019-10-20_21-30-46.png

代码

#include <iostream>
#define MAXSIZE 100//最大队列数
using namespace std;
typedef struct {
    int *data; //初始化的动态分配空间
    int front; //头指针
    int rear; //尾指针
}SqQueue;

void Init_queue(SqQueue &Q){
    Q.data = new int[MAXSIZE]; //为队列分配一个最大容量为MAXSIZE的数组空间
    if(!Q.data)
        cout<<"空间分配失败"<<endl;
    else{
        Q.front = 0;
        Q.rear = 0;
    }
}

void Enter_queue(SqQueue &Q,int e){

    if((Q.rear+1)%MAXSIZE==Q.front)
    cout<<"队满\n";
    else{
        Q.data[Q.rear]=e;
        Q.rear=(Q.rear+1)%MAXSIZE;
    }
}

void Delete_queue(SqQueue &Q,int &e){
    if(Q.front == Q.rear)
        cout<<"队空";
    else{
        e=Q.data[Q.front]; //保存队头元素
        Q.front=(Q.front+1)%MAXSIZE; //队头指针加一
    }
}

void Getfront_queue(SqQueue Q,int &e){
    if(Q.front == Q.rear)
        cout<<"队空";
    else{
        e=Q.data[Q.front];
    }
}
void YHtriangle(int n){
    SqQueue Q;
    int a1,a2;
    Init_queue(Q);
    Enter_queue(Q,1); //让1入队
    for(int i=1;i<n;i++){
        Enter_queue(Q,0); //让0作为第一个入队
        for(int j=0;j<i;j++){
            Delete_queue(Q,a1);
            Getfront_queue(Q,a2);
            cout<<a1+a2<<'\t';
            Enter_queue(Q,a1+a2);
        }
        cout<<endl;
    }
}
int main() {
    int n;
    cout<<"请输入杨辉三角形的行数n:"<<endl;
    cin>>n;
    cout<<"杨辉三角形为:"<<endl;
    YHtriangle(n+1);
    return 0;
}

总结

刚开始因为老师之前写的演示代码的误会,一直卡了好久,总是得不到想要的结果,然后我从头开始梳理,通过一点点注释掉一些语句,然后运行,最后找到了问题的关键。数据结构这一块,我还是很薄弱,还得多练习。

Last modification:May 27th, 2020 at 02:08 pm
如果觉得我的文章对你有用,请随意赞赏