循环队列打印杨辉三角出现问题

wxxslt 2008-11-01 10:56:34
#include<iostream.h>
#include<stdlib.h>
typedef int ElemType;
const int QueueMaxSize=20;

struct Queue{
ElemType *elem;
int rear;
int front;
int queuesize;
};

void InitQueue(Queue &Q,int maxsize)
{
if(maxsize==0)
{
maxsize=QueueMaxSize;
}
Q.elem=new ElemType[maxsize];
if(!Q.elem)
{
cerr<<"allocation failure!"<<endl;
exit(1);
}
Q.queuesize=maxsize;
Q.front=Q.rear=0;
}

bool EnQueue(Queue &Q,ElemType num)
{
if((Q.rear+1)%Q.queuesize==Q.front)
{
cerr<<"Queue overflow!"<<endl;
return false;
}
Q.elem[Q.rear]=num;
Q.rear=(Q.rear+1)%Q.queuesize;
return true;
}


bool GetHead(Queue &Q,int &e)
{
if(Q.front==Q.rear)
{
cerr<<"Queue is empty!"<<endl;
return false;
}

e=Q.elem[Q.front];
return true;
}

bool DeQueue(Queue &Q,ElemType &s)
{
if(Q.front==Q.rear)
{
cerr<<"Queue is empty!"<<endl;
return false;
}
s=Q.elem[Q.front];
Q.front=(Q.front+1)%Q.queuesize;
return true;
}

bool QueueEmpty(Queue &Q)
{
return Q.front==Q.rear;
}

void Triangle(int n)
{
Queue Q;
int e,s;
for(int i=1;i<=n;i++)
{
cout<<' ';
}
cout<<'1'<<endl;
InitQueue(Q,n+2);
EnQueue(Q,0);
EnQueue(Q,1);
EnQueue(Q,1);
int k=1;
while(k<n)
{
for(i=1;i<=n-k;i++)
{
cout<<' ';
}

EnQueue(Q,0);

do
{
DeQueue(Q,s); //0
GetHead(Q,e); //0下一个
if(e)
{
cout<<e<<' '; //若e为非行界值0,则打印输出 e 的值并加一空格
}
else
{
cout<<endl;
}

EnQueue(Q,s+e);

}while(e!=0);

k++; //换行
}

DeQueue(Q,e);

while(!QueueEmpty(Q))
{
DeQueue(Q,e);
cout<<e<<' ';
}
}

void main()
{
int m;
cout<<"输入三角的行数:"<<endl;
cin>>m;
cout<<"结果为:"<<endl;
Triangle(m);
}



出现死循环?为什么?帮帮忙,程序是我参照写的,哪里错了。
...全文
738 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxxslt 2008-11-01
  • 打赏
  • 举报
回复
算法是对的,程序也可以运行,e和s有没有初始化都一样,运行了一直循环,不知道怎么回事?
你可以运行下看看
Vegertar 2008-11-01
  • 打赏
  • 举报
回复

没有看你打印的算法, 你先把队列改进一下吧.
void InitQueue(Queue &Q,int maxsize)
{
if (maxsize==0)
{
maxsize=QueueMaxSize;
}
Q.elem=new ElemType[maxsize];
if (!Q.elem)
{
cerr<<"allocation failure!"<<endl;
exit(1);
}
Q.queuesize=maxsize;
Q.front=Q.rear=0; //这里有问题
}

bool EnQueue(Queue &Q,ElemType num)
{
// 若queuesize == 1; 那么就不会添加元素.
if ((Q.rear+1)%Q.queuesize==Q.front)
{
cerr<<"Queue overflow!"<<endl;
return false;
}
Q.elem[Q.rear]=num;
Q.rear=(Q.rear+1)%Q.queuesize;
return true;
}

void Triangle(int n)
{
Queue Q;
int e,s; // 未初始化.
for(int i=1;i<=n;i++)
{
cout<<' ';
}
cout<<'1'<<endl;
InitQueue(Q,n+2);
EnQueue(Q,0);
EnQueue(Q,1);
EnQueue(Q,1);
int k=1;
while(k<n)
{
for(i=1;i<=n-k;i++) // i未定义.
{
//......
//......


Vegertar 2008-11-01
  • 打赏
  • 举报
回复
先mark, 看看再说.
wxxslt 2008-11-01
  • 打赏
  • 举报
回复
希望有人能给出答案,谢谢
wxxslt 2008-11-01
  • 打赏
  • 举报
回复
没人……
继续顶
wxxslt 2008-11-01
  • 打赏
  • 举报
回复
我觉得都是对的,怎么会出现死循环……
奇怪,头大,下线了。希望帮我解决下。

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧