用队列方法输出杨辉三角
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); }