打印二项式系数表(即杨辉三角)
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
//在利用顺序分配存储结构实现队列时,除了用一维数组描述队列中的数据元素的存储区域,需设立两个指针Top,rear
//指示队头和队尾的位置,为叙述方便,在此约定:初始化建立空队列时,另top=rear=0,每当插入一个元素后,尾指针rear+1,
//每当删除一个元素时top+1,头指针始终指向队头元素,而尾指针始终指向队尾元素的“下一个”位置。
#include#include#includeusing 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,............