用循環隊列輸出楊輝三角形貌似有點小題大做,但主要是為了練習隊列應用嘛。說實在這個小程序也讓我調試了很長時間.
用這個程序用戶就可以自行輸入想要的楊輝三角形的行數了。
//YHTriangle.cpp
//輸出楊輝三角形
//算法思想:首先在循環隊列中存放第三行的 1,2,1和第四行的1.
//若循環隊列隊頭元素和隊頭第二個元素均為1,則從隊頭刪除一個1,在隊尾插入兩個1.
//若不然,將隊對頭元素和隊頭第二個元素相加,將和值插入到隊尾,刪除對頭一個元素。
//若想輸出楊輝三角形n行,將循環隊列長度設置成 n+2。
//輸出:前兩行直接輸出。定義了print函數控制后面每行輸出的元素個數
#include "Queue.h"
#include "CycQueue.h"
#include <iostream>
using namespace std;
//輸出n個空格
void print_space(int n);
//n行楊輝三角形的輸出格式
void print(int k, int n);
int main()
{
int n;
cout << "Please enter the YangHui Triangle row number n:";
cin >> n;
CycQueue<int> YHTri(n+2);
YHTri.push(1);
YHTri.push(2);
YHTri.push(1);
YHTri.push(1);
//輸出前兩行
print(1,n);
print(1,n);
print(1,n);
while( !YHTri.full())
{
int a,b;
//若隊頭元素和隊頭第二個元素均為1
if( (YHTri.top() == 1) && (YHTri.second() == 1))
{
a = YHTri.pop_top();
YHTri.push(1);
YHTri.push(1);
print(a,n);
}
//若不然
else
{
a = YHTri.pop_top();
b = YHTri.top();
YHTri.push(a + b);
print(a,n);
}
}
//輸出循環隊列中留存的元素
while( !YHTri.empty())
{
print(YHTri.pop_top(),n);
}
system("pause");
return 0;
}
void print_space(int n) //輸出n個空格
{
while(n--) cout << " ";
}
int i = 1, j = 0;
void print(int k, int n) //n行楊輝三角形的輸出格式
{
if( i==1 ) print_space(n);
if(j++ != i) ;
else
{
cout << endl;
print_space(n-i);
++i;
j = 1;
}
cout << k <<" ";
}
//循環隊列的模板類聲明
#ifndef CYCQUEUE_H
#define CYCQUEUE_H
#include <iostream>
using namespace std;
template<class T>
class CycQueue:public Queue<T>
{
public:
CycQueue(int maxsz = 100):len(maxsz)
{
elems = new T[maxsz];
front = rear = 0;
};
~CycQueue(){delete[] elems; };
void clear() {rear = front = 0;};
int size()const
bool full()const
bool empty()const
bool push(const T& item);
bool pop();
T top()const;
T pop_top();
T second()const;
protected:
private:
int front;
int rear;
int len;
T* elems;
};
#include "CycQueue.cpp"
#endif
循環隊列主要注意不要忘記%len,不然就都是莫名錯誤啦!

文章來源:http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!271.entry