8 线性表-循环队列-顺序存储
这几天犹豫了一下要不要上机实现数据结构的代码
一轮复习已经结束了
第二次看还是觉得光看书实在太无感了
于是决定来上机 顺便加深印象
即使考不上 记录一些基础的知识 以后找工作也有用……
好 就这样决定咧!不能偷懒!
1、循环队列:
实际上是把顺序队列臆造成一个环状的空间。
把存储队列元素的表从逻辑上看成一个环,称之为循环队列。
初始化时队首指针和队尾指针指向同一个存储空间,每次前进/后退一个位置都要进行(加减单位长度)%maxsize的处理
2、为了区分队空还是队满的情况有三种处理方式:
1)牺牲一个单元来区分队空或者队满的情况(下面算法就采用这个方式)
队满条件:(Q.rear+1)%maxsize==Q.fron
队空条件:Q.fron==Q.rear
队列中元素的个数:(Q.rear-Q.fron+maxsize)%maxsize
2)在类型中增设表示元素个数的数据成员。
队空的条件变为Q.size==0,队满的条件为Q.size==maxsize。
3)类型中增设tag数据成员,以区分队满还是队空。
tag=0:若是因为删除的情况导致Q.fron==Q.rear,队空
tag=1:若是因为增加的情况到时Q.fron==Q.rear,队满
3、注:出队要判空,入队要判满。一定要记住。
4、代码实现
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<iostream> 4 using namespace std; 5 #define TRUE 1 6 #define FALSE 0 7 #define OK 1 8 #define ERROR 0 9 #define OVERFLOW -2 10 //#define STACK_INIT_SIZE 100//存储空间的初始分配量 11 //#define STACKINCREMENT 10//存储空间分配增量 12 #define maxsize 4 13 typedef struct 14 { 15 int data[maxsize]; 16 int fron,rear; 17 } SqQueue; 18 19 /*队列的初始化*/ 20 /*注:出队前判队空,入队前判队满*/ 21 void showmessage(int flag) 22 { 23 if(flag==1) 24 cout<<"the queue is already full, there is no place to put the data."; 25 else if(flag==2) 26 cout<<"there is no data in the queue."; 27 else cout<<"you were put the data successful!"<<endl; 28 } 29 void InitQueue(SqQueue *Q) 30 { 31 Q->rear=Q->fron=0;//初始化队首队尾指针 32 } 33 /*判断队是否为空*/ 34 bool isEmpty(SqQueue *Q) 35 { 36 if(Q->rear==Q->fron)return TRUE; 37 else return FALSE; 38 } 39 bool EnQueue(SqQueue *Q,int x) 40 { 41 if((Q->rear+1)%maxsize==Q->fron) //如果此时已经到了队尾/采用(牺牲一个单元来区分队空或者队满的方法来区分队空或者队满的状态) 42 { 43 showmessage(1); 44 return 0; 45 } 46 else 47 { 48 Q->data[Q->rear]=x; 49 Q->rear=(Q->rear+1)%maxsize; 50 showmessage(3); 51 } 52 return OK; 53 } 54 55 bool DeQueue(SqQueue *Q,int &ans) 56 { 57 if(isEmpty(Q)) 58 { 59 showmessage(2); 60 return 0; 61 } 62 else 63 { 64 ans=Q->data[Q->fron]; 65 Q->fron=(Q->fron+1)%maxsize; 66 } 67 return OK; 68 } 69 int main() 70 { 71 SqQueue *Q=(SqQueue *)malloc(sizeof(SqQueue)); 72 InitQueue(Q); 73 int x; 74 for(int i=0;i<4;i++) 75 { 76 cin>>x; 77 EnQueue(Q,x); 78 } 79 cout<<endl; 80 cout<<"Now show you the data in the queue:"; 81 while(!isEmpty(Q)) 82 { 83 int ans; 84 DeQueue(Q,ans); 85 cout<<ans<<" "; 86 } 87 return 0; 88 }
5、代码实现截图
转载于:https://www.cnblogs.com/AKsnoopy/p/7473711.html
8 线性表-循环队列-顺序存储相关推荐
- 2021 - 9 下旬 数据结构-线性表-循环队列-java实现代码
//循环队列,本质就是用动态数组实现的,且出队入队时间复杂度均O(1)的队列 //相比普通队列,增设一个front指针,代表队头,代表下一个出队的元素 //循环队列的重点在于队头队尾的元素的下标的计算 ...
- 循环队列 (顺序存储)
数组 和 链表是最基本的数据结构,栈.队列.树.图等复杂数据结构都是基于数组或链表方式存储 队列(Queue)特征: 循环队列的顺序存储是基于数组来实现的 队列是一种操作受限的线性表.队列只能在表的一 ...
- c语言用两个栈构造队列伪码,数据结构习题线性表栈队列.doc
数据结构习题线性表栈队列 线性表(58) 1. 在单链表.双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少? 2.设线性表的 ...
- 线性表的顺序存储 c语言表达,线性表的基本操作顺序存储(C语言).doc
线性表的基本操作顺序存储(C语言) #include#include#include#define LIST_INIT_SIZE/*线性表存储空间初始分配量*/#define LISTINCREMEN ...
- 数据结构学习笔记——线性表逻辑结构和顺序存储结构
2.1线性表的逻辑结构 线性表的数据元素的特点:同一数据类型 一.线性表的逻辑定义 线性表是由n个数据元素(结点)a1,a2,-,an组成的有限序列. 二.线性表的基本运算 2.2线性表的顺序存储结 ...
- 1、顺序存储:线性表/栈/队列:理论+C语言实现--详细
文章目录 Data_Structure 绪论 1.逻辑结构 1.集合结构 2. 线性结构 3.树形结构 4.图形结构 2.物理结构 1.顺序存储结构 2.链式存储结构 1 线性表的顺序存储 1.1 线 ...
- 有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...
作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...
- 循环队列 - 顺序存储结构
队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.是一种先进先出的线性表(FIFO).允许插入的一端称为队尾,允许删除的一端称为队头.我们在<栈的顺序存储结构> ...
- 数据结构(线性表,队列,栈,树,图)
数据结构体系图 1.线性表的顺序存储 //<span style="font-size:18px;">线性表顺序存储结构的构建</span> #includ ...
最新文章
- windows下DOS命令关闭占用的端口
- 近场通讯技术 (1)
- ShowAllPic--图片
- mysql 返回随机行_从mysql数据库返回随机行而不使用rand()
- pptx版式验证代码
- 求数组中各个元素的个数?
- 今天看到头条好多新手说摆摊不挣钱
- ArcEngine10.1二次开发错误: 无法嵌入互操作类型,请改用适用的接口
- 基于深度极限学习机DELM的回归预测
- 树莓派3自带了wifi
- 嵌入式研发人员的核心竞争力浅谈
- 使用 Kind 在 5 分钟内快速部署一个 Kubernetes 高可用集群
- 查杀计算机病毒,计算机病毒查杀
- JavaScrupt就这么回事(转)
- Linux software RAID 1 - root filesystem becomes read-only after a fault on one disk
- 完美解决idea2020一直indexing,无法操作的问题
- win7修复计算机无鼠标,win7电脑鼠标不听使唤反应慢如何修复
- 第一章 Java简介
- 国信\教学课程\05.EL进阶:Object-Oriented-EasyLanguage-Concepts-By-Android-Marvin
- 如何debug preloader bootup time 问题以及开机过程中preloader慢抓取 preload模块开机log
热门文章
- jmap在ubuntu上DebuggerException: Can't attach to the process
- android 入门-android自定义控件
- js 字符ascii码转换函数
- Trust is the most important thing to the team!
- discuz!nt论坛搬迁后出错,提示:对象名 'dnt_templates' 无效
- node --- 后端使用body-parse解析Post请求,前端使用axios发送Post请求
- javascript --- 异步工作流的动态排队技术
- vsCode ext install 不工作
- jquery $.trim()方法使用介绍
- 企业生产场景如何对CentOS进行分区