队列模拟
队列的特点是先进先出, 栈是先进后出
要先定一个一个node, 里面存储的是数据和指向下一个节点的指针
struct Node
{
Item item;
struct Node * next;
}
这里的Item就是队列中需要存放的元素类型
Queue就是我们自己定义的队列对象:
class Queue
{
private:
enum {Q_SIZE = 10};
// 节点信息
struct Node
{
Item item;
struct Node * next;
};
Node * front;
Node * rear;
int items;
const int qsize;
public:
Queue(int qs = Q_SIZE);
~Queue();
bool isempty() const;
bool isfull() const;
int queuecount() const;
bool enqueue(const Item & item);
bool dequeue(Item &item);
}
看下面这个构造函数:
Queue::Queue(int qs)
{
front = rear = NULL;
items = 0;
qsize = qs;
}
其中qsize = qs; 这行代码不能被正确执行, 因为qsize声明为const int, 我们要是想初始化这种成员变量, C++提供了一个叫成员初始化列表的方法: 成员初始化列表由逗号分隔的初始化列表组成, 位于参数列表的右小括号之后, 函数体做大括号之前例如:
Queue::Queue(int qs) : qsize(qs)
{
// 将指针置空
front = rear = NULL;
items = 0;
}
通常, 初值可以是常量或构造函数的参数列表中的参数. 这种方法并不限于初始化常量. 可以将Queue构造函数写成如下格式:
Queue::Queue(int qs): qsize(qs), front(NULL), rear(NULL), items(0)
{
}
只有构造函数可以使用这种初始化列表语法. 对于const类成员, 必须使用这种语法, 另外, 对于被声明为引用的类成员, 也必须使用这种语法:
class Agency{...};
class Agent
{