#include
using namespace std;
const int maxlen=256;
enum error_code{
success=0,
overflow=1,
underflow=2,
rangeerror=3
};
class queue{
public:
queue();
bool empty()const;
bool full() const;
error_code get_front(int &x)const;//取队头元素
error_code append(const int x);//入队
error_code serve();//出队
private:
int count;
int data[maxlen];
int front,rear;
};
queue::queue()
{
count = 0;
front = rear = 0;
}
bool queue::empty( )const
{
if ( count == 0 ) return true;
return false; //等价于:return front == rear;
}
bool queue::full( )const
{
if ( count == maxlen - 1 ) return true;
return false; //等价于:return ( rear + 1 ) % maxlen == front ;
}
error_code queue::get_front(int &x)const
{
if ( empty() ) return underflow;
x = data[ (front + 1 ) % maxlen ];
return success;
}
error_code queue::append(const int x)
{
if ( full() ) return overflow;
rear = ( rear + 1 ) % maxlen ;
data[rear] = x;
count ++;
return success;
}
error_code queue::serve()
{
if ( empty() ) return underflow;
front = ( front + 1 ) % maxlen;
count --;
return success;
}
int main() // 利用队列Q打印n行杨辉三角形
{
int n,i,j,s1,s2; queue Q; // 用queue代表某种队列类型
error_code Ec; // 定义错误类型代码,以便调用函数时用
cout<
cin>>n;
cout<<1<
Ec=Q.append(1); // 所输出的1入队
for(i=2; i<=n; i++) // 依次计算并输出第2~i行上的数据
{ s1=0; // 存放前一个出队的数
for(j=1; j<=i-1; j++) //计算并输出第i行上前 i-1 个数据
{ Ec= Q.get_front(s2); Ec=Q.serve( ); // 取队头元素
cout<
Ec=Q.append(s1+s2); // 所输出的当前行中的元素入队
s1=s2; // 调整变量的值
}
cout<<1<
Ec=Q.append(1); //本行最后的1入队
}
return 0;
}