基本概念

1.先进先出
2.两大基本操作:入队(队尾插入元素),出队(队头删除元素)
3.三大属性:first(队头位置),last(队尾位置),total(队列中的数据个数)

应用

1.交给打印机的作业存放在一个队列中
2.图论中的一些算法使用队列提高运行效率(还未知)
3.操作系统中用得比较多
4.不同的硬件设备传输信息时

代码实现

(1)数组实现
1.数组实现使用的是环形队列

//queue.h
#pragma once
#include "includes.h"
#define N 550class queue
{public:queue(void);bool En_queue(string add,string num,string t);bool Del_queue();bool Read_file(string filename);void Print_queue();~queue(void);int q_first;int q_last;int q_total;string q_table[N][3];
};

2.入队,需要判断是否满队,插入即将last后移一个单位,并放入数据

/***@name En_queue:在队列尾部插入数据*@param1 add:插入数据——地址*@param2 num:插入数据——序号*@param3 t:插入数据——时间*@ret:是否插入成功
**/
bool    queue::En_queue(string add,string num,string t)
{if(q_total==N){//此时队列已满cout<<"the queue is full"<<endl;return false;}else{//环形队列,故尾部加1后取余,将头尾串起来q_last=(q_last+1)%N;q_table[q_last][0]=add;q_table[q_last][1]=num;q_table[q_last][2]=t;//队列中的数据加1q_total++;return true;}
}

3.出队,需要判断是否空队,删除即将first后移一个单位

/***@name Del_queue:删除队列首部数据*@ret 是否删除成功
**/
bool queue::Del_queue()
{if(q_total==0){cout<<"no data can be delete"<<endl;return false;}else{//将头部后移一个单位q_first=(q_first+1)%N;//队列中的数据减1q_total--;return true;}
}

4.构造函数初始化,打印函数打印队列中所有数据,读取文件函数将数据从文件中读取后存入队列。

/***@name queue:构造函数,初始化first和last以及total
**/
queue::queue(void)
{q_first=0;q_last=N-1;q_total=0;
}/***@name Print_queue:打印队列所有数据*@ret None
**/
void queue::Print_queue()
{int i,j;if(q_total>0){i=q_first;//首先打印队列中数据数量cout<<"the number of  queue is "<<q_total<<endl;//利用队列中数据数量来控制遍历次数for(j=q_total;j>0;j--){for(int k=0;k<3;k++){//分别打印每一个队列的数据cout<<q_table[i][k]<<" ";}cout<<endl;//i从first开始遍历队列i=(i+1)%N;}}else{cout<<"full queue"<<endl;}
}/***@name Read_file:从文件中读取数据插入队列,共500个数据*@param1 filename:文件名
**/
bool queue::Read_file(string filename)
{ifstream in(filename,ios::in);int i,j;//从文件流中读取数据存入中间变量string temp_add;string temp_num;string temp_t;if(!in.is_open()){cout<<"error"<<endl;}else{for(i=0;i<500;i++){in>>temp_add;in>>temp_num;in>>temp_t;if(!En_queue(temp_add,temp_num,temp_t)){return false;}}}in.close();return true;
}

(2)链表实现
1.链表实现就不需要环形结构了

//queue_list.h
#pragma once
#include "includes.h"
class queue_list
{public:queue_list(void);~queue_list(void);bool En_queue_list(string add, string num,string t);bool Del_queue_list();void Print_queue_list();bool Read_file(string filename);node* ql_first;node* ql_last;int ql_total;
};

2.入队,新建新的节点,并分别考虑队列中无节点和多个节点的情况

/***@name En_queue:在队列尾部插入新的数据节点*@param1 add:插入数据节点——地址*@param2 num:插入数据节点——序号*@param3 t:插入数据节点——时间*@ret:是否插入成功
**/
bool queue_list::En_queue_list(string add, string num,string t)
{node *temp=new node;temp->address=add;temp->number=num;temp->time=t;if(ql_first==NULL){//队列中还没有节点存在时,将first和last同时指向创建的节点ql_first=temp;ql_last=temp;ql_total++;}else{//将尾节点指向新节点,同时last指向新节点ql_last->next=temp;ql_last=temp;ql_total++;}return true;
}

3.出队,考虑无节点、、一个节点和多个节点的情况。

/***@name Del_queue:删除队列首部节点*@ret 是否删除成功
**/
bool queue_list::Del_queue_list()
{if(ql_first==NULL){cout<<"have no data to delete"<<endl;return false;}else if(ql_first==ql_last){//只有一个节点时,直接将first和last都指向NULLql_first==NULL;ql_last=NULL;ql_total--;return true;}else{//存在多个节点时,将first向后移一个节点ql_first=ql_first->next;ql_total--;return true;}
}

4.初始化、打印中的迭代方法有些差异、读取文件数据

/***@name queue:构造函数,初始化first和last以及total
**/
queue_list::queue_list(void)
{//初始化链表 first和last都为空指针ql_first=NULL;ql_last=NULL;ql_total=0;
}/***@name Print_queue:打印队列所有数据*@ret None
**/
void queue_list::Print_queue_list()
{node* i=ql_first;cout<<"the number of  queue_list is "<<ql_total<<endl;for (int j=ql_total;j>0;j--){//输出节点数据并移到下一个节点cout<<i->address<<" "<<i->number<<" "<<i->time<<endl;i=i->next;  }
}/***@name Read_file:从文件中读取数据插入队列,共500个数据*@param1 filename:文件名
**/
bool queue_list::Read_file(string filename)
{ifstream in(filename,ios::in);//从文件流中读取数据存入中间变量string temp_add;string temp_num;string temp_t;for(int i=0;i<500;i++){in>>temp_add;in>>temp_num;in>>temp_t;if(!En_queue_list(temp_add, temp_num,temp_t))return false;}return true;
}

数据结构和算法分析(三)——C++实现队列相关推荐

  1. 数据结构与算法分析(六)队列总结

    一.什么是队列? 1.先进者先出,这就是典型的"队列"结构. 2.支持两个操作:入队enqueue(),放一个数据到队尾:出队dequeue(),从队头取一个元素. 3.所以,和栈 ...

  2. 《数据结构》实验三:栈和队列实验 (实验报告)

    一.实验目的 巩固栈和队列数据结构,学会运用栈和队列. 1.回顾栈和队列的逻辑结构和受限操作特点,栈和队列的物理存储结构和常见操作. 2.学习运用栈和队列的知识来解决实际问题. 3.进一步巩固程序调试 ...

  3. 数据结构与算法分析(C++版)(第二版)

    查看书籍详细信息: 数据结构与算法分析(C++版)(第二版) 内容简介 本书采用程序员最爱用的面向对象C++语言来描述数据结构和算法,并把数据结构原理和算法分析技术有机地结合在一起,系统介绍了各种类型 ...

  4. 数据结构与算法分析c++第四版_研分享 | 人工智能学院数据结构与算法分析考研备考整理...

    数据结构与算法分析 1.在顺序表中插入或删除一个元素,需要平均移动(表中一半)元素,具体移动的元素个数与(表长和该元素在表中的位置)有关. 2.如果有两个数,每个数的所有约数(除它本身以外)的和正好等 ...

  5. python数据结构与算法分析_数据结构和算法分析

    问题引出 假设有一道题目:有一组N个数而要确定其中第k个最大者,我们称之为选择问题,那么这个程序如何编写?最直观地,至少有两种思路: 1.将N个数读入一个数组中,再通过某种简单的算法,比如冒泡排序法, ...

  6. 队列的基本操作_算法与数据结构(五) 栈和队列

    ? 工欲善其事,必先利其器. 栈和队列 - Stack And Queue 栈 如何理解栈呢? 后进者先出,先进者后出,这就是典型的 "栈" 结构. 04_栈和队列-栈结构 从栈的 ...

  7. 计算机考研科目887,2017年华中科技大学887数据结构与算法分析考研试题

    2017年华中科技大学887数据结构与算法分析考研试题本站小编 免费考研网/2020-02-27 一.名词解释(25分,1个5分) 1.1堆分配存储表示 1.2完全图 1.3树的结点层次 1.4拓扑排 ...

  8. 【西电-网信院】数据结构与算法分析2022期末考试

    数据结构与算法分析2022网信院期末考试 一.选择题 二.判断题 三.填空题 四.问题求解 五.算法设计 题型:选择20(2*10)+判断10(1*10)+填空(2*10)+问题求解30(7+7+8+ ...

  9. 数据结构与算法分析 作业讲解文档目录

     参考教材:<数据结构(C语言版 第2版)> 严蔚敏,李冬梅,吴伟民编著,人民邮电出版社,2022年版.   对应的作业题讲解视频: 数据结构与算法分析作业讲解视频合集https://ww ...

  10. Linux无锁共享内存,优秀数据结构学习 - 共享内存无锁队列的实现(二)

    优秀数据结构学习 - 共享内存无锁队列的实现(二) 优秀数据结构学习 - 共享内存无锁队列的实现(二) 1 关键技术 操作系统提供的进程间通信机制有文件.socket.消息队列.管道.共享内存等.其中 ...

最新文章

  1. oracle cdc 提交顺序,Oracle CDC部署流程
  2. 01 手把手带你构建大规模分布式服务--高并发、高可用架构系列,高质量原创好文!...
  3. NeHe教程Qt实现——lesson17
  4. 科大讯飞和百度语音平台语音识别Java调用记录
  5. ElasticSearch评分分析 explian 解释和一些查询理解
  6. Jsp+Servlet+MYSQL注册登录案例(界面难看,ε=(´ο`*)))唉)
  7. 非科班Java尝试全国高校计算机能力挑战赛第三届计挑赛
  8. 面试常考题:不调用库函数,怎样实现字符串操作函数?
  9. 【零基础学Java】—类的定义(七)
  10. Lync Server 2010迁移至Lync Server 2013部署系列 Part10:配置存档、监控服务器
  11. docker的一些使用技巧
  12. 娱乐大数据:《小时代》是属于谁的小时代?
  13. sign-file: certs/signing_key.pem: 解决方法
  14. 开源的 IM 项目 Sealtalk
  15. 关于M1版Macbook Pro 安装JDK 方法
  16. 计算机专业的实验器材,【计算机专业论文】系统观下的计算机专业实验平台建设(共3640字)...
  17. 三轴加速度计测量值生成算法matlab,[算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本...
  18. 体温单开发_产品开发可以从我们的体温调节系统中学到什么?
  19. 如何做年季度月日时的周期性报表的设计
  20. oracle查询历史会话,如何查询以往的session历史信息

热门文章

  1. MySQL表、索引大小查询
  2. python实现人脸识别比对_人脸识别并比对实现(基于face_recognition)
  3. 小企业电脑如何组网_(完整版)中小型企业组网方案
  4. [UE4]需要保存的数据
  5. django--cookie与session
  6. NOIP2016-D2-T2 蚯蚓(单调队列)
  7. Oracle数据库的创建、数据导入导出
  8. Hammock for REST
  9. MS3D model 的 Frame count
  10. java常量池方法区_Java方法区和运行时常量池溢出问题分析