用队列方法输出杨辉三角

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*

用队列方法输出杨辉三角。

*/

#include

#include

#include

#define ElemType int

/*-----LNode的结点类型定义-----*/

struct LNode

{

ElemType data; //值域

LNode* next; //链接指针域

};

/*-----队列的链接存储结构的定义-----*/

struct LinkQueue

{

LNode* front; //队首指针

LNode* rear; //队尾指针

};

/*------1.初始化链队-----*/

void InitQueue(LinkQueue& HQ)

{

HQ.front=HQ.rear=NULL; //把队首和队尾指针置为空

}

/*-----2.向链队中插入一个元素------*/

void EnQueue(LinkQueue& HQ, ElemType item)

{

LNode* newptr=new LNode; //得到一个新的结点

newptr->data=item; //把item 的值赋给新结点的值域

newptr->next=NULL; //把新结点的指针域置为空

if(HQ.rear==NULL) //若链队为空,则新结点既是队首又是队尾{

HQ.front=HQ.rear=newptr;

}

else //若链队非空,则新结点被链接到队尾并修改队尾指针{

HQ.rear=HQ.rear->next=newptr;

}

}

/*-------3.从队列中删除一个元素-------*/

ElemType OutQueue(LinkQueue& HQ)

{

if(HQ.front==NULL) //若链队为空则终止运行

{

cerr<<"链队为空,无法删除!"<

exit(1);

}

ElemType temp=HQ.front->data; //暂存队首元素以便返回

LNode* p=HQ.front; //暂存队首指针以便收回队首指针

HQ.front=p->next; //使队首指针指向下一个结点

if(HQ.front==NULL) //若删除后链队为空,则使队尾指针为空{

HQ.rear=NULL;

}

delete p; //回收原队首结点

return temp; //返回被删除的队首元素

}

void YanyHuiTriangular(LinkQueue& HQ, int n)

{

int i,j; //i,j 都是循环变量

int first,second; //first,second 分别记录上一行的两个累加数EnQueue(HQ,1);

for(i=1; i

{ //第 0 至 n-1 行元素分别入列,并输出;最后第 n 行入列

first=0; second=0;

//控制每行前头空格的输出

for(j=0; j

{

cout<

}

for(j=0; j

{

second=OutQueue(HQ);

cout<

EnQueue(HQ,first+second);

first=second;

}

cout<

EnQueue(HQ,second);

}

//最后输出最后一行元素(即第 n 行出列)

for(j=0; j

{

cout<

cout<

}

void main()

{

LinkQueue LQ;

InitQueue(LQ);

cout<<"用队列输出杨辉三角!"<

cout<<"请输入要输出多少行杨辉三角:"; cin>>n;

YanyHuiTriangular(LQ,n);

}

相关文档
最新文档