65,206
社区成员
发帖
与我相关
我的任务
分享#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);
}
没有看你打印的算法, 你先把队列改进一下吧.
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未定义.
{
//......
//......