实现代码:
#include<iostream>
using namespace std;
#define OK 0
#define ERROR 1
#define OVERFLOW -2
#define MAXQSIZE 100//队列可能到达的最大长度
typedef int Status;
typedef int QElemType;
typedef struct
{
QElemType *base;//存储空间的基地址
int front;//头指针
int rear;//尾指针
}SqQueue;
Status InitQueue(SqQueue &Q)
{//构造一个空队列Q
Q.base=new QElemType[MAXQSIZE];
if(!Q.base) exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
int QueueLength(SqQueue Q)
{//返回Q的元素 个数,即队列的长度
return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
Status EnQueue(SqQueue &Q,QElemType e)
{//插入元素e为Q的新的尾元素
if((Q.rear+1)%MAXQSIZE==Q.front)
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
Status DeleteQ(SqQueue &Q,QElemType &e)
{//删除Q的队头元素,用e返回其值
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
QElemType GetHead(SqQueue Q)
{//返回Q的队头元素,不修改队头指针
if(Q.front!=Q.rear)
return Q.base[Q.front];
}
int main()
{ SqQueue Q;
int i,x,n,j,t=0;
cout<<"输入行数n:";
cin>>n;
InitQueue(Q);
EnQueue(Q, 1);
cout<<" ";
for (i=2; i<=n; i++){
EnQueue(Q,1);
for(j=1; j<i-1; j++){
cout<<Q.base[Q.front];
cout<<" ";
x=GetHead(Q);
DeleteQ(Q,t);
x=x+Q.base[Q.front];
EnQueue(Q,x);
}
cout<<Q.base[Q.front]<<endl;
cout<<" ";
DeleteQ (Q,t);
EnQueue(Q,1);
}
while (Q.front!=Q.rear){
cout<<Q.base[Q.front];
cout<<" ";
DeleteQ (Q,t);
}
cout<<endl;
return 0;
}
输出结果: