文章目录

  • 循环队列
    • 存储结构
    • 初始化
    • 求队列长度
    • 入队
    • 出队
    • 取队头元素
  • 链队
    • 存储结构
    • 初始化
    • 入队
    • 出队
    • 取队头元素

循环队列

在顺序分配的队列中,会出现假溢出的情况。
当我们将顺序队列变为一个环状的空间,我们就不会出现假溢出的情况,这种队列称为循环队列。

存储结构

typedef struct{QElemType *base;//存储空间的基地址 int front;//头指针 int rear;//尾指针
}SqQueue;

初始化

Status InitQueue(SqQueue &Q){Q.base=new QElemType[MAXQSIZE];//为队列分配一个大小为MAXSIZE的数组空间 if(!Q.base) exit(OVERFLOW);//储存分配失败 Q.front=Q.rear=0;//头指针和尾指针置位零,队列为空 return OK;
}

求队列长度

int QueueLength(SqQueue Q){return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}

头指针尾指针只差就是队列长度,但是可能为负数所以需要加上MAXQSIZE结果求余即可。

入队

Status EnQueue(SqQueue &Q,QElemType e){if((Q.rear+1)%MAXQSIZE==Q.front)//尾指针+1后等于头指针说明队满return ERROR;Q.base[Q.rear]=e;//新元素插入队尾 Q.rear=(Q.rear+1)%MAXQSIZE;//队尾指针+1 return OK;
}

出队

Status DeQueue(SqQueu &Q,QElemType &e){if(Q.front==Q.rear) return ERROR;//队空 e=Q.base[Q.front];//保存队头元素 Q.front=(Q.front+1)%MAXQSIZE;//队头指针+1 return OK;
}

取队头元素

QElemType GetHead(SqQueue Q){if(Q.front!=Q.rear)//队列非空 return Q.base[Q.front];//返回队头元素的值,队头指针不变
}

链队

存储结构

typedef struct QNode{QElemType data;//结点数据域 struct QNode *next;//结点指针域
}QNode,*QueuePtr;
typedef struct{QueuePtr front;//队头指针 QueuePtr rear;//队尾指针
}LinkQueue;

初始化

Status InitQueue(LinkQueue &Q){Q.front=Q.rear=new QNode;//生成新结点作为头结点,队头和队尾指针指向此结点 Q.front->next=NULL;//头结点的指针域置空 return OK;
}

入队

Status EnQueue(LinkQueue &Q,QElemType e){QNode p;p=new QNode;//用p指针指向新的入队元素 p->data=e;//将p指针的数据域置为e p->next=NULL;//将新结点插入到队尾 Q.rear->next=p;Q.rear=p;//修改队尾指针 return OK;
}

出队

Status DeQueue(LinkQueue &Q,QElemType &e){QNode p;if(Q.front==Q.rear) return ERROR;//队非空 p=Q.front->next;//p指向队头元素 e=p->data;//e保存队头元素的值 Q.front->next=p->next;//修改头结点的指针域 if(Q.rear==p) Q.rear=Q.front;//最后一个元素被删除队尾指针指向头结点 delete p;//释放空间 return OK;
}

取队头元素

QElemType GetHead(LinkQueue Q){if(Q.front!=Q.rear)//队列非空 return Q.front->next->data;
}

参考自《数据结构》严蔚敏版,学习中…

循环队列和链队的表示和实现相关推荐

  1. 【数据结构】队列-顺序队列、循环队列、链队、双端队列

    定义 队列是只允许在一端进行插入,而在另一端进行删除的线性表. 队头(Front):允许删除的一端,又称为队首. 队尾(Rear): 允许插入的一端. 先进入队列的元素必然先离开队列,即先进先出(Fi ...

  2. C语言 队列(循环队列和链队初始化进出队等基本操作)

    目录 一.队列的定义 二.循环队列 1. 循环队列的储存结构 2.初始化 3.输出队列元素 4.入队 5.出队 6.取队头元素 7.求队列长度 8.源代码 三.链式队列 1.队列的链式存储结构表示 2 ...

  3. c语言循环队列入列算法,C语言——循环队列和链队列的基本运算

    // 循环队列 #include #include "SeqQue.h" // 循环队列的基本运算 /* const int maxsize = 20; typedef struc ...

  4. 顺序队列,循环队列,链队列

    队列 先看队列接口和结点类 1. 顺序队列 2. 循环队列 3. 链队列 先看队列接口和结点类 package com.lovely.queue;/** * 2020年4月26日下午2:42:44* ...

  5. 【数据结构与算法】循环队列和链队列的比较

    前言 本文原本是一篇随感+笔记,被翻出来后就整理发了博客. 不曾想能上搜索头条,既如此,决定更新一下,加上必要的阐释,避免影响有需求的读者. (我这么理解大家,如果有需要的话,是不是可以考虑点个赞或者 ...

  6. 采用循环队列或链队列实现病人看病的模拟程序

    采用循环队列或链队列实现病人看病的模拟程序 (1)定义队列的存储结构: (2)实现队列的初始化.判断是否为空.入队.出队等基本操作: (3)调用队列的基本操作实现病人看病模拟程序包括排队.就诊.查询. ...

  7. 数据结构与算法(3-2)队列(顺序队列、循环队列与链队列)

    目录 一.顺序队列 1.存储结构 2.入队和出队 总代码 二.循环队列 总代码: 三.链队列 1.存储结构 2.入队和出队 总代码 一.顺序队列 队列特征:先进后出.后进后出. 1.存储结构 //队列 ...

  8. c语言队列(顺序队列,循环队列,链式队列)

    顺序队列 1.初始化: front=-1; rear=-1; 2.判空条件 font=rear; 3.队列已满条件 rear=max-1; 代码: #include<stdio.h> #i ...

  9. Python数据结构与算法基础|第五期:代码实现——循环队列的链式存储结构

    在上一次,我们通过取余等数学方法实现了顺序存储的循环队列.由于我们使用的是Python内置的列表类型作为底层,实际上我们的存储空间并不是首尾相连的.下面,我们使用链式存储结构来实现一个真正首尾相连的循 ...

  10. java先进先出 循环队列_java队列--先进先出(循环队列、链队列)

    队列:只允许在一端进行插入操作(队尾),在另一端进行删除操作(队头). 队列的特征就是: 先进先出. 队列的思想及实现也同样非常简单.在生活中的各种常常都需要排队进行,键盘中缓存区.操作系统中的作业调 ...

最新文章

  1. NB-IoT,你真是太让我失望了
  2. 排序算法——快速排序算法
  3. RabbitMQ 交换器、持久化
  4. 我就改了一行代码,为什么就全超时了?
  5. python显示数据长度_Python使用s来检测数据的长度
  6. 第一阶段SCRUM冲刺 08
  7. FileIo 删除类中的private方法
  8. android 自定义水波纹点击效果Button
  9. ALGO-146算法训练 4-2找公倍数
  10. 基于Matlab的车辆型号识别系统
  11. Pygame详解(七):key 模块
  12. 数字IC设计工程师笔试面试经典100题
  13. 音频播放、录音、视频播放、拍照、视频录制
  14. Angular实战项目(1)
  15. hex文件、out文件、bin文件、map文件解析
  16. WIN7系统 64位出现 Net Framework 数据提供程序要求 Microsoft Data Access Components(MDAC)....
  17. MODISL1B数据FLAASH大气校正
  18. cmu的计算机专业项目有哪些,CMU的ECE「卡内基梅隆大学电气与计算机工程系」
  19. T36 调用ISBN商用API易源数据
  20. java.lang.SecurityException: ...does not have android.permission...

热门文章

  1. ES6新特性总结 一
  2. servlet详细理解
  3. Imc手机连环画PC阅读器
  4. LeetCode_151_python_翻转字符串里的单词
  5. QT、C++面试中的几个问题
  6. python采集人脸_python获取人脸的代码分享
  7. postgresql是如何求年龄的_负债累累如何度过难关?她依靠此法三年还清300多万债务!...
  8. kafka-client 版本兼容问题
  9. sncr脱硝技术流程图_SNCR脱硝技术
  10. python实现isprime函数、参数为整数、要有异常处理_Python期末复习题1