数组型队列(queue)的使用(支持自定义数据类型)(C++版)
来源:互联网 发布:ucosiii软件定时器 编辑:程序博客网 时间:2024/05/02 00:23
数组型队列(queue)的使用(支持自定义数据类型)(C++版)
最近用到了数据结构中的queue,标准模板库STL里面的queue是指针型队列,不支持访问队列中的任意元素。故网上找了很多代码,其中
http://blog.csdn.net/juckciy/article/details/23787277
基本实现了我想要的功能,但使用起来比较麻烦。我便在该文代码的基础上,调试了bug,并将代码封装到了一个模板里。
下载链接:http://download.csdn.net/detail/michaelliang12/9511253
使用方法如下:
一、将MyDeque.template文件拷入工程目录
这是我修改的名为MyDeque的队列类,大家可以在此基础上修改。至于为什么没有封装为.cpp和.h,是因为本代码支持自定义的数据类型,需要使用模板,而模板不支持分离编译。可参考
http://blog.csdn.net/checkin001/article/details/26454327
//MyDeque.template#include "stdafx.h"#include <iostream>#include <string>#include <cassert>using namespace std;/*用数组实现循环队列(1)、设一标志位以区别队列是“空”还是“满”(2)、少用一空间,约定“队列头指针在队尾指针的下一位置”上作为队列呈“满”状态的标志*/template <typename T>class MyDeque{public: MyDeque(int n = 10);//构造函数 bool EnterQueue(T element);//向队列插入元素 bool DeleteQueue(T &element);//从队列弹出元素 int GetQueueLength();//返回队列的长度 bool GetQueueValue(T &element, int index);//返回队列的第number个值private: int front; //对头指针 int rear; //队尾指针 T *base; //动态分配的内存指针 int maxsize; //最大队列长度};template <typename T>MyDeque<T>::MyDeque(int n){ base = (T*)new T[n]; assert(base != NULL); memset(base, 0, n); front = rear = 0; //队头和队尾指针分别指向地一个元素 maxsize = n;}template <typename T>bool MyDeque<T>::EnterQueue(T element){ if ((rear + 1) % maxsize == front) //判断队列是否满 { return false; } else { base[rear] = element; rear = (rear + 1) % maxsize; return true; }}template <typename T>bool MyDeque<T>::DeleteQueue(T &element){ if (front == rear)//判断队列是否为空 { return false; } else { element = base[front]; base[front] = NULL; front = (front + 1) % maxsize; return true; }}template <typename T>int MyDeque<T>::GetQueueLength()//获得队列长度{ return (rear - front + maxsize) % maxsize;}template <typename T>bool MyDeque<T>::GetQueueValue(T &element, int index)//获得队列第number个值的大小,0<=index<QueueLength(){ if(index >= GetQueueLength()) { return false; } else { element = base[index]; return true; }}
二、加入头文件#include “MyDeque.template”
mian.cpp 示例函数如下
#include "stdafx.h"#include <iostream>using namespace std;#include "MyDeque.template"void main(){ MyDeque<int> my(10); int i; for (i = 0; i<5; i++) { my.EnterQueue(i + 1); } cout << "队列长度:" << my.GetQueueLength() << endl; int element; if (my.GetQueueValue(element, 2))//0<=index<QueueLength() { cout << "队列的第3个元素为" << element << endl; } else { cout << "不存在此元素!" << endl; } if (my.DeleteQueue(element)) { cout << "删除的元素为" << element << endl; } else { cout << "删除失败!" << endl; } cout << "队列长度:" << my.GetQueueLength() << endl; system("pause");}
三、完整示例程序下载
http://download.csdn.net/detail/michaelliang12/9511253
四、参考博客
http://blog.csdn.net/juckciy/article/details/23787277
http://blog.csdn.net/checkin001/article/details/26454327
0 0
- 数组型队列(queue)的使用(支持自定义数据类型)(C++版)
- 队列(Queue)的C语言实现
- 数据队列 Queue 的使用 (转)
- stl之queue(队列)的使用
- 循环队列Queue--使用顺序存储结构(数组)实现
- 【day0414 C++】queue 队列的使用
- 队列(Queue)-- 数组实现(C++ )
- 基于数组的队列Queue
- 队列(Queue ADT)C语言实现
- 使用数组实现队列(C语言)
- 使用数组实现队列(C语言)
- 消息队列(Message Queue)的简单使用
- (C#)使用队列(Queue)解决简单的并发问题
- Java中的队列(Queue)简单使用
- 栈、队列(自定义队列)、数组
- 单向队列queue的使用
- c# Queue 队列的使用
- STL 队列queue的使用
- Java中使用Jedis操作Redis
- 关于Cocoapods安装的小细节错误
- 计算机视觉--图像导数-图像梯度向量
- 手机安全卫士02
- 素数环问题
- 数组型队列(queue)的使用(支持自定义数据类型)(C++版)
- iOS开发中如何管理多个版本的Cocoapods、gem
- HDU 1754 I Hate It 线段树
- 二叉树遍历
- iOS语言国际化
- 扣丁音乐(一)——闪屏页SplashActivity(欢迎界面)
- cmake 提示gcc或交叉编译 broken
- leetcode(1),reverse(python)
- cf 666A