问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
.h文件
#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
using namespace std;
template <class T>
class queue
{
private:
int size;
int maxSize;
int front, rear;
T *element;
public:
queue(int mmaxsize);
~queue();
bool isempty();
bool isfull();
bool insert(const T &x);
bool Delete(T &x);
void display();
bool getElement(T &x);
void output(ostream& out);
};
//构造函数
template <class T>
queue<T>::queue(int mmaxsize)
{
size = 0;
maxSize = mmaxsize;
front = 0;
rear = 0;
element = new T[mmaxsize];
}
//析构函数
template <class T>
queue<T>::~queue()
{
delete[] element;
}
//判断是不是空
template <class T>
bool queue<T>::isempty()
{
return size == 0;
}
//判断是不是满
template <class T>
bool queue<T>::isfull()
{
return size = maxSize;
}
//实现入队
template <class T>
bool queue<T>::insert(const T &x)
{
if (isfull())
return false;
else
{
element[rear] = x;
rear = (rear + 1) % maxSize;
size++;
return true;
}
}
//实现出队
template <class T>
bool queue<T>::Delete(T &x)
{
if (isempty())
return false;
else
{
x = element[front];
front = (front + 1) % (maxSize);
size--;
return true;
}
}
//寻找队列里面的头元素
template <class T>
bool queue<T>::getElement(T& x)
{
if(isempty())
return false;
else
{
x = element[front];
return true;
}
}
//实现队列的输出
template <class T>
void queue<T>::output(ostream& out)
{
int index;
index = front;
for(int i = 0;i<size;i++)
{
out << element[index] << endl;
index = (index+1)%maxSize;
}
}
//重载插入运算符
template <class T>
ostream& operator<<(ostream& out,queue<T>& x)
{
x.output(out);
}
#endif
.cpp
#include <iostream>
#include "queue.h"
using namespace std;
void printspace(int n, int k);
void yanghui(int n);
int main()
{
yanghui(4);
return 0;
}
void printspace(int m, int k)
{
for (int i = 0; i < m-k; i++)
cout << ' ';
}
void yanghui(int n)
{
queue<int> Q(n + 2);
int x, y;
printspace(n, 1);
cout << '1' << endl;
Q.insert(0);
Q.insert(1);
Q.insert(1);
for (int j = 2; j <= n; j++)
{
Q.insert(0);
printspace(n, j);
do
{
Q.Delete(x);
Q.getElement(y);
if(y)
cout << y << ' ';
else
cout << endl;
Q.insert(x+y);
}while(y);
}
cout << endl;
}