由于y不断变化,导致无限生成,在不改判断满的语句的情况下,如何修改?
//LinearList.h
#include<iostream>
using namespace std;
template<class T>
class LinearQueue
{
public:
LinearQueue(int LQMaxSize);
~LinearQueue();
bool IsEmpty();
bool IsFull();
bool Insert(T x);
bool Delete(T& x);
bool GetElement(T &x);
private:
int front,rear;
T*element;
int Maxsize;
};
template<class T>
LinearQueue<T>::LinearQueue(int LQMaxSize)
{ Maxsize=LQMaxSize;
element=new T[Maxsize];
front=0;
rear=0;}
template<class T>
LinearQueue<T>::~LinearQueue()
{ delete []element;}
template<class T>
bool LinearQueue<T>::IsEmpty()
{ if(front==rear)
return true;
else return false;}
template<class T>
bool LinearQueue<T>::IsFull()
{
if((rear+1)%Maxsize==front)
return true;
else
return false;}
template<class T>
bool LinearQueue<T>::Insert(T x)
{ if(IsFull())
{cout<<"此栈已满,无法添加"<<endl;
return false;}
else
{ element[rear]=x;
rear=(rear+1)%(Maxsize);
return true;}
}
template<class T>
bool LinearQueue<T>::Delete(T& x)
{ if(IsEmpty())
{cout<<"此栈是空"<<endl;
return false;}
else
{ x=element[front];
front=(front+1)%(Maxsize);
return true;}}
template<class T>
bool LinearQueue<T>::GetElement(T &x)
{ if(IsEmpty())
return false;
else
{
x=element[front];
return true;}
}
// 13.3.3.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"LinearList.h"
#include<iostream>
using namespace std;
void YangHui(int n);
void PrintSpace(int n,int k)
{ for(int i=1;i<=n-k;i++)
cout<<' ';
}
int main()
{ int n;
cout<<"请输入杨辉三角的行数"<<endl;
cin>>n;
YangHui(n);
system("pause");
return 0;
}
void YangHui(int n)
{
LinearQueue<int>Q(n+2);
int x,y;
PrintSpace(n,1);
cout<<'1'<<endl;
Q.Insert(0);
Q.Insert(1);
Q.Insert(1);
for(int i=2;i<=n;i++)
{ Q.Insert(0);
PrintSpace(n,i);
do
{Q.Delete(x);
Q.GetElement(y);
if(y)
cout<<y<<' ';
else
cout<<endl;
Q.Insert(x+y);}
while(y);}
cout<<endl;}
将队列大小放大到足够大就可以了。比如:LinearQueue<int>Q(n+3);
代码中的实现依赖y=0来结束循环,但是如果队列满了,0结束标记就无法加入到队列中,于是就陷入了死循环。
主函数对应的文件改成这样。
当队列满的时候就停止循环:break。
// 13.3.3.cpp : 定义控制台应用程序的入口点。
//
#include"LinearList.h"
#include<iostream>
using namespace std;
void YangHui(int n);
void PrintSpace(int n, int k)
{
for (int i = 1; i <= n - k; i++)
cout << ' ';
}
int main()
{
int n;
cout << "请输入杨辉三角的行数" << endl;
cin >> n;
YangHui(n);
system("pause");
return 0;
}
void YangHui(int n)
{
LinearQueue<int>Q(n + 2);
int x, y;
PrintSpace(n, 1);
cout << '1' << endl;
Q.Insert(0);
Q.Insert(1);
Q.Insert(1);
for (int i = 2; i <= n; i++)
{
Q.Insert(0);
PrintSpace(n, i);
do
{
Q.Delete(x);
Q.GetElement(y);
if (y)
cout << y << ' ';
else
cout << endl;
if (Q.Insert(x + y)==0) {
break;
}
} while (y);
if (Q.IsFull()) {
break;
}
}
cout << endl;
}