队列的相关操作(队列实现杨辉三角的打印)
队列的相关操作(队列实现杨辉三角的打印)
1.实现队列的一种存储结构
2.实现队列的相关操作
3.利用队列的操作特点,借助进队与出队操作完成打印二项式系数的任务(杨辉三角的打印)
考虑到实现多种数据类型,采用了C++的模板方式编写,并利用了STL库函数的vector容器类来储存数据,该循环队列主要实现了以下函数:
class MyCircularQueue
{
private:
vector<T> data;
int head;
int tail;
int size;
public:
MyCircularQueue() {
data.resize(k);
head = -1;
tail = -1;
size = k;
}
bool setsize(int k);
bool enQueue(const T& value);//进队
bool deQueue(T& x); //出队
T getFront() ;//取队列头部元素
T getRear();//取队列位尾部元素
bool isEmpty();//判断是否为空
bool isFull();//判断是否为满
};
主要函数的相关实现
队列元素进队
/** Insert an element into the circular queue. Return true if the operation is successful. */
template <class T>
inline bool MyCircularQueue<T>::enQueue(const T& value) {
if (isFull()) {
return false;
}
if (isEmpty()) {
head = 0;
}
tail = (tail + 1) % size;
data[tail] = value;
return true;
}
队列元素出队
/** Delete an element from the circular queue. Return true if the operation is successful. */
template <class T>
inline bool MyCircularQueue<T>::deQueue(T& x)
{
x=data[head];
if (isEmpty()) {
return false;
}
if (head == tail) {
head = -1;
tail = -1;
return true;
}
head = (head + 1) % size;
return true;
}
取队列头部元素
/** Get the front item from the queue. */
template <class T>
inline T MyCircularQueue<T>::getFront()
{
if (isEmpty()) {
return -1;
}
return data[head];
}
取队列位尾部元素
/** Get the last item from the queue. */
template <class T>
inline T MyCircularQueue<T>::getRear()
{
if (isEmpty()) {
return -1;
}
return data[tail];
}
测试函数实现杨辉三角的打印
MyCircularQueue<int> queve;
int temp=0,x;
int n;
cin>>n;
int i=1,j,s=0,k=0,t=0,u;
queve.enQueue(i);queve.enQueue(i);
for(i=1;i<=n;i++)
{
cout<<endl;
for (j = 1; j<=n - i ; j++)
{
cout<<setw(3)<<" ";
}
queve.enQueue(k);
for(j=1;j<=i+2;j++)
{
queve.deQueue(t);
u=s+t;
queve.enQueue(u);
s=t;
if(j!=i+2){
cout<<setw(6)<<s;
}
}
}
return 0;