慕课网学习笔记之数据结构队列(C++)
来源:互联网 发布:同志交友软件 编辑:程序博客网 时间:2024/06/02 06:37
什么是队列呢?
是一种先进先出的数据结构
FIFO:first in first out
比如说日常生活中排队,此时的“队”就是队列,先排队的先出队,后排的后出。
相比于普通队列,环形队列对内存的使用更高效,推荐使用。
#ifndef QUEUE_H#define QUEUE_Hclass Queue{ public: Queue(int quequeCapacity); // 创建队列 virtual ~Queue(); // 销毁队列 void ClearQueue(); //清空队列 bool QueueEmpty() const; //判空 bool QueueFull() const; //判满 int QueueLength() const; //获得队列长度 bool EnQueue( int element); //入队 bool DeQueue( int &element); //出队 void QueueTraverse(); //遍历队列 private: int m_iQueueCapacity ; //队列容量 int m_iHead; //队列头 int m_iTail; //队列尾 int m_iQueuelen; //队列长度 int *m_pQueue; //队列指针 };#endif
#include "queue.h"#include <iostream>using namespace std;Queue::Queue(int queueCapacity){ m_iQueueCapacity = queueCapacity;//此处传入队列总容量 m_pQueue = new int [m_iQueueCapacity]; //在堆上申请内存 ClearQueue(); //清空队列}Queue::~Queue(){ delete []m_pQueue; //销毁内存 m_pQueue = NULL; //为了安全指为空}void Queue::ClearQueue() //清空并不需要处理存入数据{ //数据索引与使用依赖头长度 m_iHead =0; //队列头置零 m_iTail = 0; //队列尾置零 m_iQueuelen = 0; } bool Queue::QueueEmpty() const { if(m_iQueuelen == 0) return true; //为空返回true else return false; //否则false } bool Queue::QueueFull() const{ if(m_iQueuelen == m_iQueueCapacity) return true; else return false; }int Queue::QueueLength() const{ return m_iQueuelen;} bool Queue::EnQueue(int element){ if(QueueFull()) //入队先判满 return false; else { m_pQueue[m_iTail] = element;//尾部入队 m_iTail++; //尾变长 m_iTail %= m_iQueueCapacity; //取余实现循环队列 m_iQueuelen++; //长度变长 return true; }}bool Queue::DeQueue(int &element){ if(QueueEmpty()) //出队则判空 return false; else { element = m_pQueue[m_iHead];//头部出队 m_iHead++; //头改变 m_iHead %= m_iQueueCapacity;//取余实现循环 m_iQueuelen--; //长度减一 return true; }} void Queue:: QueueTraverse()//遍历要注意起始于结束{ //从Head开始,共遍历m_iQueuelen个,不能以Tail结尾 //因为Tail是会变化的,这里取余操作也是必不可少的 for(int i=m_iHead;i<m_iQueuelen+m_iHead;i++) { cout<<m_pQueue[i%m_iQueueCapacity]<<endl; }}
以上两段代码分别是queue.h文件与queue.c中的代码,采用分文件定义的形式。
以下的代码为验证代码,为简单起见,队列装的是int型数据,当然队列中可以有更复杂的数据。
#include"queue.h"#include<iostream>using namespace std;int main(){ Queue * p = new Queue(4); p->EnQueue(1); p->EnQueue(11); p->EnQueue(21); p->EnQueue(12); p->QueueTraverse(); int e=0; p->DeQueue(e); cout<< "删除的是:"<<e<<endl; p->QueueTraverse(); p->DeQueue(e); cout<< "删除的是:"<<e<<endl; p->QueueTraverse(); p->DeQueue(e); cout<< "删除的是:"<<e<<endl; p->QueueTraverse(); p->DeQueue(e); cout<< "删除的是:"<<e<<endl; p->QueueTraverse(); p->ClearQueue(); cout <<endl; cout <<"已清空"<<endl; p->QueueTraverse(); cout <<endl; cout <<"再入队"<<endl; p->EnQueue(111); p->EnQueue(112); p->EnQueue(211); p->EnQueue(122); p->QueueTraverse(); delete []p; p=NULL; return 0; }
这是Dev C++编译运行的结果
0 0
- 慕课网学习笔记之数据结构队列(C++)
- 学习笔记--数据结构(之二)队列
- 数据结构学习笔记之队列
- 数据结构学习笔记之队列
- 数据结构学习笔记 --- 队列(链队列)
- 数据结构学习笔记 --- 队列(链队列)
- 数据结构学习笔记之表、栈、队列
- 数据结构之队列和栈学习笔记
- 数据结构学习笔记之队列结构
- 慕课网学习笔记之数据结构栈(C++)
- 慕课网学习笔记之数据结构一单链表(C++)
- 慕课网学习笔记之数据结构树(C++)
- 数据结构学习笔记--队列
- 数据结构学习笔记--队列
- 数据结构学习笔记--队列
- C 队列之数据结构
- 数据结构学习之队列
- 数据结构学习之队列
- 2016中国大学生程序设计竞赛(ccpc 长春)题解报告
- SSH 在页面实现部门树结构
- Cocoa和Cocoa Touch框架浅析
- 26张图看清扎克伯格如何提高工作效率
- #Directx12基本的Graphics概念和Direct3D类型(-)
- 慕课网学习笔记之数据结构队列(C++)
- R语言|数据预处理--5异常值分析及处理
- lamp、lnmp和lnamp,到底应该选择哪个?
- 动态规划_交叉字符串_1
- 据说这是世界上最深的网站,拉到底就算你赢了
- 161004复习与回顾
- 动态内存分配
- Java经典面试题 一
- JAVA进阶6.8——生产消费问题