C++ PRIMER PLUS 第12章 队列模拟的问题

在阅读《C++ PRIMER PLUS》第12章关于队列模拟的内容时,遇到了理解难题。经过长时间研究,关键在于理解`rear->next = add; rear = add;`两行代码。`rear`是队列尾部指针,这两行代码首先将队列尾部元素的`next`指向新增节点`add`,然后更新`rear`指向`add`,确保`rear`始终指向队列的最后一个元素。误解这两行代码会导致覆盖前一条指令的错误观念,实际上它们分别作用于不同的结构体地址,不会相互影响。
摘要由CSDN通过智能技术生成
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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值