C++实现数据结构-队列
2016-09-19 21:07
155 查看
最近学了C++,看了下数据结构的东西,这里就跟大家分享一下自己用C++实现队列的一些思想和经验,适合初学者交流学习。
队列分类
队列在数据结构中分为普通队列和环形队列。首先说说普通队列,就是一种类似隧道的数据结构,对于队列里的数据,是先入先出,这点和栈相反。但是普通队列有些缺点,下面来说说普通队列缺点。
普通队列的数据从对头开始离开的时候,后面一个内存空间会变为新的队头,那么对头离开后剩下的内存空间就被剩下了,这就让内存空间利用率不高。但是环形队列就可以很好的解决这个问题,但是有点难哈。
所以,下面编程都是围绕环形队列展开(环形队列就是一个换,这个环里可以分配内存空间,数据在环里进行排队,对头删了,又可以加上新的数据变为队伟,这样内存的使用率就增加了)
C++类中定义的函数分析
各个成员函数的实现
下面是主函数,在主函数中实例化对象,就可以对环形队列进行操作。
上述代码产生的环形队列中数据是int类型,在C++面向对象思想下,可以将int型数据变为自己想要的类型,下篇博客将分享一个比int行更加实用的数据类型,进行遍历环形队列。
队列分类
队列在数据结构中分为普通队列和环形队列。首先说说普通队列,就是一种类似隧道的数据结构,对于队列里的数据,是先入先出,这点和栈相反。但是普通队列有些缺点,下面来说说普通队列缺点。
普通队列的数据从对头开始离开的时候,后面一个内存空间会变为新的队头,那么对头离开后剩下的内存空间就被剩下了,这就让内存空间利用率不高。但是环形队列就可以很好的解决这个问题,但是有点难哈。
所以,下面编程都是围绕环形队列展开(环形队列就是一个换,这个环里可以分配内存空间,数据在环里进行排队,对头删了,又可以加上新的数据变为队伟,这样内存的使用率就增加了)
C++类中定义的函数分析
#ifndef Queue_h_ #define Queue_h_ class Queue { public: Queue(int QueueCapaticy);//构造函数来产生一个内存空间,用来存放队列 ~Queue();//析构函数用来释放内存空间 void clearQueue();//清楚队列里的数据 bool emptyQueue() const;//判断队列是否为空队列 int QueueLen();//返回值为队列长度 bool enterQueue(int element);//数据进入队列 bool deleteQueue(int element);//删除队列里的数据 bool fullQueue();//判断队列是否满状态,满了就不能插入数据了 void travelQueue();//遍历数列里的数据 private: int m_iQueueCapaticy;//队列存储内存空间大小 int m_iQueueLen;//记录队列长度 int m_iHead;//队列头 int m_iTail;//队列尾 int* m_pQueue;//队列指针 }; #endif
各个成员函数的实现
#include <iostream> using namespace std; #include "Queue.h" Queue::Queue(int QueueCapaticy)//分配内存空间存储队列 { m_iQueueCapaticy = QueueCapaticy; m_pQueue = new int[m_iQueueCapaticy];//堆上分配内存空间 m_iHead = 0; m_iTail = 0; m_iQueueLen = 0; } Queue::~Queue() { delete[]m_pQueue; m_pQueue = NULL; } void Queue::clearQueue() { m_iQueueLen = 0; m_iHead = 0; m_iTail = 0; } bool Queue::emptyQueue() const { return m_iQueueLen == 0 ? true : false; } int Queue::QueueLen()//返回值为队列长度 { return m_iQueueLen; } void Queue::enterQueue(int element)//数据进入队列 { if (fullQueue()==false) { m_pQueue[m_iTail] = element; m_iTail++; m_iTail = m_iTail%m_iQueueCapaticy; m_iQueueLen++; } } void Queue::deleteQueue(int element)//删除队列里的数据 { if (emptyQueue() == false) { m_pQueue[m_iHead] = element; m_iHead++; m_iHead= m_iHead%m_iQueueCapaticy; m_iQueueLen--; } } bool Queue:: fullQueue()//判断队列是否满状态,满了就不能插入数据了 { return m_iQueueLen == m_iQueueCapaticy ? true : false; } void Queue::travelQueue()//遍历数列里的数据 { for (int i = m_iHead; i < m_iHead + m_iQueueLen; i++) { cout << m_pQueue[i%m_iQueueCapaticy] << endl; } }
下面是主函数,在主函数中实例化对象,就可以对环形队列进行操作。
#include <iostream> #include "Queue.h" using namespace std; int main() { Queue *p = new Queue(4); p->enterQueue(1); p->enterQueue(2); p->enterQueue(3); p->enterQueue(4); p->deleteQueue(5); //p->deleteQueue(6); cout << p->QueueLen() << endl; p->enterQueue(6); p->travelQueue(); delete p; p = NULL; system("pause"); return 0; }
上述代码产生的环形队列中数据是int类型,在C++面向对象思想下,可以将int型数据变为自己想要的类型,下篇博客将分享一个比int行更加实用的数据类型,进行遍历环形队列。
相关文章推荐
- 数据结构学习之链队列c++实现
- C++数据结构--循环队列的实现
- 几种简单的数据结构的C++实现,树,图,链表,环形队列,栈等---栈篇
- [数据结构]队列的实现-C++
- 《C++实现数据结构》:优先权队列
- 数据结构学习之循环队列的另一种c++实现
- 【c++版数据结构】链队列的实现
- c++ 数据结构 用循环队列实现杨辉三角形的打印
- 数据结构队列C++代码实现
- c++数据结构 链队列的实现
- 数据结构(6) 顺序队列 c++ 模板实现
- 简单数据结构之队列(C++模板库实现)
- 数据结构——顺序队列的C++实现
- 【数据结构】实现大小堆也叫二叉堆(类似c++中的优先队列)
- [数据结构]C++队列实现和队列简介
- 数据结构(7) 链队列 c++ 模板实现
- 数据结构队列C++实现 链式和循环
- 数据结构队列C++实现 链式和循环
- 【算法和数据结构】线性表(四)用两个栈来实现队列(C++实现)
- 数据结构学习之队列的链式存储的C++实现