用循环队列实现打印杨辉三角(数据结构)

打印二项式系数表(即杨辉三角)

                          1

                       1 2 1

                     1 3 3 1

                   1 4 6 4 1

系数表中的第K行有k+1个数,除了第一个数和最后一个数为1外,其余的数则为上一行中位其左右的两数之和。

如果要求计算并输出杨辉三角前N行的值,则队列的最大空间应为n+2(第N行有n+1个数,且根据循环队列的特性:“少用一个元素”,但在这里少用的那个元素用来存放临界值“0”)。

#include"QueueSq.cpp"
void InitQueue(SqQueue &Q,int n)
{
    Q.elem=new QElemType[n];
    //为循环队列分配空间(比实际能用多一个元素)
    Q.queuesize=n;
    Q.incrementsize=QUEUEINCREMENT;
    Q.top=Q.rear=0;
}
void YangHui(int n)
{
    SqQueue Q;
    int i,k;
    for(i=1;i<=n;i++)
        cout<<" ";
    cout<<"1"<
循环队列的基本操作函数:

//在利用顺序分配存储结构实现队列时,除了用一维数组描述队列中的数据元素的存储区域,需设立两个指针Top,rear
//指示队头和队尾的位置,为叙述方便,在此约定:初始化建立空队列时,另top=rear=0,每当插入一个元素后,尾指针rear+1,
//每当删除一个元素时top+1,头指针始终指向队头元素,而尾指针始终指向队尾元素的“下一个”位置。

#include
#include
#include
using namespace std;
typedef int QElemType;
#define QUEUEINCREMENT 10
struct SqQueue
{
    QElemType *elem;
    int top;
    int rear;
    int queuesize;
    int incrementsize;
};
#define QUEUE_INIT_SIZE  100
void InitQueue_Sq(SqQueue &Q)
{
    Q.elem=new QElemType[QUEUE_INIT_SIZE+1];
    //为循环队列分配空间(比实际能用多一个元素)
    Q.queuesize=QUEUE_INIT_SIZE+1;
    Q.incrementsize=QUEUEINCREMENT;
    Q.top=Q.rear=0;
}
void EnQueue_Sq(SqQueue &Q,QElemType e)
{
    //插入元素e为Q的新的队尾元素
    if((Q.rear+1)%Q.queuesize==Q.top)//队满的判断
    {
        QElemType *a;
        a=new QElemType [Q.queuesize+Q.incrementsize];
        for(int k=0;k
该算法的时间复杂度为O(n*n),因为外循环的次数为n-1,内循环的次数分别为3,4,5,............

你可能感兴趣的:(数据结构)