c++ 队列Queue的实现 - 练习题
来源:互联网 发布:律师知乎 编辑:程序博客网 时间:2024/05/29 02:36
#include <iostream>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 "<<val<<" has been deleted!"<<endl;}};ListNode *head;ListNode *tail;const int maxlength; // const常量只能使用列表初始化,(还有引用也是)int length;public:Queue():head(0), tail(0), length(0), maxlength(INT_MAX){}Queue(int sz):head(0), tail(0), length(0), maxlength(sz){}bool isempty(){return !length;}bool isfull(){return length==maxlength;}// 队尾加入节点void push(int v){if(length==maxlength){cerr<<"!reach max length "<<maxlength<<endl;return;}ListNode *tmp = new ListNode(v);if (isempty())head = tmp;elsetail->next = tmp;tail = tmp;length ++;}// 队首移除节点void pop(){if (isempty()){cerr<<"!queue is empty, nothing to pop"<<endl;return;}ListNode *tmp = head;head = head->next;tmp->next = 0;delete tmp; // 释放头指针指向的空间length --;}int front(){if (head)return head->val;elsecerr<<"!queue is empty, cannot get front "<<endl;return -1;}// 获取队列中的元素个数int getNum(){return length;}// 析构函数~Queue(){ListNode *tmp;while (head){tmp = head; // tmp 依次指向每个节点,进行释放head = head->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: "<<q.getNum()<<endl;cout<<"q.front: "<<q.front()<<endl;q.pop();cout<<"q.num: "<<q.getNum()<<endl;cout<<"q.front: "<<q.front()<<endl;}cin.get();}
运行结果如下:
值得注意的几点:
- Queue的 析构函数,如何释放链表所占的内存
- 禁用 复制构造函数 和 =运算符 的方法,c++11中可在函数后加 delete 实现函数禁用!
- 类内嵌套类或结构体,如写在private中则只能类内使用,如写在public中则可以通过 Queue::ListNode 进行访问!
- 对于const常量和引用变量,只能以列表初始化的形式进行初始化!因为在进入构造函数的函数体之前,对象就已经生成了!列表初始化仅用于构造函数!
0 0
- c++ 队列Queue的实现 - 练习题
- 队列(Queue)的C语言实现
- 队列的实现 queue
- queue队列的实现
- C实现消息队列Queue
- 队列(Queue) C 语言实现
- C语言实现队列Queue
- C++实现的队列queue
- 队列(Queue ADT)C语言实现
- C语言队列QUEUE简单实现
- 【day0414 C++】queue 队列的使用
- 循环队列的实现(Queue, C++版)
- jQuery实现的ajax队列(queue)
- jQuery实现的ajax队列(queue)
- 队列(Queue)的python实现及其应用
- 队列 Queue 的定义及实现
- 使用Java实现简单的队列(queue)
- Java实现一个简单的队列---Queue
- intellij idea 集成tfs(teem foundation server)
- Linux中断处理驱动程序编写
- iOS学习笔记:Object-C基础语法(OC介绍与Foundation初步)
- 重置QComboBox项的时候产生currentIndexChanged信号
- widgets之switch和ToggleButton
- c++ 队列Queue的实现 - 练习题
- poj3270cow sorting 置换群裸题
- stl-thread-001
- Lua_第 21 章 操作系统库
- .NET执行sql文件
- Dev之GridControl详解
- codeforces_598D. Igor In the Museum(dfs)
- leetcode——9——Palindrome Number
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND