class Queue
{
private:
struct Node{Item item;struct Node * next;};
enum {Q_SIZE = 10};
Node * front; //前一个数据
Node * rear; //后一个数据
int items; //当前数据的数量
const int qsize; //最大的数量
public:
Queue(int qs):qsize(qs),front(NULL),rear(NULL),items(0)
{
//front = NULL;
//rear = NULL;
//items = 0;
}
~Queue();
bool isempty()const;
bool isfull()const;
int queuecount()const;
bool enqueue(const Item & item);//增至队尾
bool dequeue(Item & item);//队首删除
};
bool enqueue(const Item & item)
{
//满的就退出
if(this->isfull())
{
return false;
}
//空的队列就增加
Node *add = new Node;
if(add == NULL)
return false;//未申请到内存也退出
add->item = item; //add的item就是形参
add->next = NULL;//add结构的next成员指针设为null
items++;
if(front == NULL) //如果队列是空
front = add; //add就为第一个
else
rear->next = add; //否则,当的rear的链接域指向add,
rear = add
C++ PRIMER PLUS 第12章 队列模拟的问题
最新推荐文章于 2021-06-13 22:19:35 发布
在阅读《C++ PRIMER PLUS》第12章关于队列模拟的内容时,遇到了理解难题。经过长时间研究,关键在于理解`rear->next = add; rear = add;`两行代码。`rear`是队列尾部指针,这两行代码首先将队列尾部元素的`next`指向新增节点`add`,然后更新`rear`指向`add`,确保`rear`始终指向队列的最后一个元素。误解这两行代码会导致覆盖前一条指令的错误观念,实际上它们分别作用于不同的结构体地址,不会相互影响。
摘要由CSDN通过智能技术生成