震惊篇(一)——如何通过面向对象的思想实现环形队列
来源:互联网 发布:影视鉴赏网络课答案16 编辑:程序博客网 时间:2024/05/22 11:47
从今天开始写数据结构的博文了,为什么呢?作者还是一个小小的大学生,因为数据结构实在是晦涩难懂,所以想在课下总结一下,写的有点low勿喷撒。
今天我们通过类的思想来实现环形队列。
首先谈一下什么是队列。在百度百科上是这样定义的:“队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。”
队列之所以称做是一种数据结构,是因为他有规定的操作方法,即First In First Out(FIFO),先进先出,也就是我们日常生活中排队的思想。
环形队列是一种特殊的队列,顾名思义,它是一个环状的,秩序记录头尾即可操作。他可以减少内存资源的浪费,是一种绿色方法。
如果通过类的思想实现一个环形队列,那就需要考虑到它需要哪些成员变量、哪些成员函数。本次通过数组来实现。
下面通过代码来展示他的成员变量和成员函数:
class MyQueue{public:MyQueue(int queueCapacity);//构造函数,用于定义一个新的队列,并初始化队列virtual ~MyQueue();//析构函数用于清除占用的内存void ClearQueue();//将队列元素全部清空bool QueueEmpty() const;//用于判断队列是否为空bool QueueFull() const;//用于判断队列是否为满int QueueLength() const;//用于测量队列长度bool EnQueue(int element);//队列入列bool DeQueue(int &element);//队列处理void QueueTraverse();//队列遍历private:int *m_pQueue;//队列指针,用于检索队列属性和方法int m_iQueueLen;//队列长度属性int m_iQueueCapacity;//队列容量属性int m_iHead;//队头位置int m_iTail;//队尾位置};
相应的成员变量和成员函数就是以上。
先看一下成员变量:
为了便于操作,队列的头位置、尾位置需要记录。
需要一个队列指针用于检索成员变量和函数。
需要记录队列长度和队列上限。
对于成员函数:
创建队列、删除队列、入列、出列、遍历、判空判满、获取队列当前长度、清空队列,这些函数是基本的实现成员函数。
再看一下实际代码,具体实现方法:
#include "MyQueue.h"#include <iostream>using namespace std;//构造函数MyQueue::MyQueue(int queueCapacity)//传入队列初始化容量{//将队列容量赋值给属性m_iQueueCapacity = queueCapacity;//给出内存m_pQueue = new int[m_iQueueCapacity];//清除内部元素ClearQueue();}MyQueue::~MyQueue(){//清除内存delete[]m_pQueue;//指针指向null;m_pQueue = NULL;}//清除队列元素void MyQueue::ClearQueue(){m_iHead = 0;m_iTail = 0;m_iQueueLen = 0;}bool MyQueue::QueueEmpty() const{if (m_iQueueLen == 0){return true;}else{return false;}//return m_iQueueLen == 0 ? true : false;}bool MyQueue::QueueFull() const{if (m_iQueueLen == m_iQueueCapacity){return true;}else{return false;}}int MyQueue::QueueLength() const{return m_iQueueLen;}bool MyQueue::EnQueue(int element){if (QueueFull()){cout << "The queue is full! EnQueue failed!" << endl;return false;}else{m_pQueue[m_iTail] = element;m_iTail=(m_iTail++)%m_iQueueCapacity;m_iQueueLen++;return true;}}bool MyQueue::DeQueue(int &element){if (QueueEmpty()){cout << "DeQueue failed!The queue is empty!" << endl;return false;}else{element = m_pQueue[m_iHead];m_iQueueLen -- ;m_iHead = (m_iHead++) % m_iQueueCapacity;return true;}}void MyQueue::QueueTraverse(){for (int i = m_iHead; i < m_iHead + m_iQueueLen; i++){cout << m_pQueue[i % m_iQueueCapacity];}}
1.创建队列时,通过构造函数传入队列上限,实例化一个队列,申请内存,将队列清空初始化。
2.删除队列时,通过析构函数释放内存。
3.清空队列,即将队头队尾初始化为起始位置,将队列长度置为0。
4.判空,即判断队列长度是否是0,是0为空,否则为非空。
5.判满,即判断队列长度是否为队列上限,是则满,否则非满。
6.入列,出列,遍历要注意队列长度、队头队尾索引大小的逻辑问题,这里请各位自行理解代码。
结束啦啦啦啦啦啦啦~请多多支持~~~~~~~~~~~
1 0
- 震惊篇(一)——如何通过面向对象的思想实现环形队列
- 面向对象思想(一)
- 面向对象思想(一)
- 环形队列的实现
- 用面向对象的思想简化MIS系统中的查询代码(一)——问题
- 数据结构——环形队列的原理(模拟环形队列)
- 数据结构之循环队列(面向对象思想c++实现)
- 对象和类(一)——面向对象设计的基本思想和特点
- 面向对象思想的头脑风暴(一)
- 一)面向对象思想的核心概念
- javascript中面向对象思想的体现(一)
- 面向对象思想的头脑风暴(一)
- OC学习--<猜拳游戏> 之 通过面向对象思想实现
- 数据结构学习日记(3)——环形队列的代码实现
- 环形消息队列的实现
- 环形队列的c++实现
- 环形队列的C++实现
- 环形队列的实现原理
- 链表划分
- B1001. 害死人不偿命的(3n+1)猜想(15')
- JavaScript eval() 函数详解
- 边做边爱(1)——mapbox帮对象做分析图
- poj 2724 二分图匹配
- 震惊篇(一)——如何通过面向对象的思想实现环形队列
- [蓝桥杯]-振兴中华
- 【Bzoj1196】公路修建问题
- 【TV Picture Quality
- NYOJ-1015(判断是否为二分图)
- 2017/3/31-代码修改的流程问题
- Linux的版本
- 一种在windows和linux间传文件的方法
- Mac系统配置