c++ 队列Queue的实现 - 练习题

#include 
using namespace std;

class Queue
{
private:
	Queue(Queue &q):maxlength(0){} // 将这2者私有,从而禁用复构和=号
	Queue& operator=(Queue &q){}

	struct ListNode
	{
		int val;
		struct ListNode* next;
		ListNode(int v):val(v),next(0){}
		~ListNode()
		{
			// next指针指向的内存不能再这里进行删除,需要在下个节点的析构函数中删除
			cout<<"node value "<next = tmp;
		tail = tmp;
		length ++;
	}
	// 队首移除节点
	void pop()
	{
		if (isempty())
		{
			cerr<<"!queue is empty, nothing to pop"<next;
		tmp->next = 0;
		delete tmp; // 释放头指针指向的空间
		length --;
	}
	int front()
	{
		if (head)
			return head->val;
		else
			cerr<<"!queue is empty, cannot get front "<next;
			tmp->next = 0;
			delete tmp;
		}
	}


};

int main()
{
	{
	Queue q(5);
	//Queue w = q; // 这句话会被编译器提示 复构函数 不可访问!
	Queue w;
	//w = q; // 这句话会被编译器提示 operator= 不可访问!
	q.front();
	q.pop();
	for(int i=0;i<8;i++)
		q.push(i);
	cout<<"q.num: "<


运行结果如下:


c++ 队列Queue的实现 - 练习题_第1张图片


值得注意的几点:

  1. Queue的 析构函数,如何释放链表所占的内存
  2. 禁用 复制构造函数 和 =运算符 的方法,c++11中可在函数后加 delete 实现函数禁用!
  3. 类内嵌套类或结构体,如写在private中则只能类内使用,如写在public中则可以通过 Queue::ListNode 进行访问!
  4. 对于const常量和引用变量,只能以列表初始化的形式进行初始化!因为在进入构造函数的函数体之前,对象就已经生成了!列表初始化仅用于构造函数!

你可能感兴趣的:(C++)