用循環(huán)隊(duì)列輸出楊輝三角形貌似有點(diǎn)小題大做,但主要是為了練習(xí)隊(duì)列應(yīng)用嘛。說(shuō)實(shí)在這個(gè)小程序也讓我調(diào)試了很長(zhǎng)時(shí)間.
用這個(gè)程序用戶就可以自行輸入想要的楊輝三角形的行數(shù)了。
//YHTriangle.cpp
//輸出楊輝三角形
//算法思想:首先在循環(huán)隊(duì)列中存放第三行的 1,2,1和第四行的1.
//若循環(huán)隊(duì)列隊(duì)頭元素和隊(duì)頭第二個(gè)元素均為1,則從隊(duì)頭刪除一個(gè)1,在隊(duì)尾插入兩個(gè)1.
//若不然,將隊(duì)對(duì)頭元素和隊(duì)頭第二個(gè)元素相加,將和值插入到隊(duì)尾,刪除對(duì)頭一個(gè)元素。
//若想輸出楊輝三角形n行,將循環(huán)隊(duì)列長(zhǎng)度設(shè)置成 n+2。
//輸出:前兩行直接輸出。定義了print函數(shù)控制后面每行輸出的元素個(gè)數(shù)
#include "Queue.h"
#include "CycQueue.h"
#include <iostream>
using namespace std;
//輸出n個(gè)空格
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;
//若隊(duì)頭元素和隊(duì)頭第二個(gè)元素均為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);
}
}
//輸出循環(huán)隊(duì)列中留存的元素
while( !YHTri.empty())
{
print(YHTri.pop_top(),n);
}
system("pause");
return 0;
}
void print_space(int n) //輸出n個(gè)空格
{
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 <<" ";
}
//循環(huán)隊(duì)列的模板類聲明
#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
循環(huán)隊(duì)列主要注意不要忘記%len,不然就都是莫名錯(cuò)誤啦!

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