• 循环队列-队列的顺序表示和实现
    • 循环队列的三种状态
  • 循环队列-队列的顺序实现 (代码演示)
    • CycleQueue.h
    • CycleQueue.cpp
    • main.cpp
    • 测试结果

循环队列-队列的顺序表示和实现

是限制仅在表头删除和表尾插入的顺序表。
利用一组地址连续的存储单元依次存放队列中的数据元素。
因为:队头和队尾的位置是变化的,所以:设头、尾指针。


在顺序队列中,当尾指针已经指向了队列的最后一个位置的下一位置时,若再有元素入队,就会发生“溢出”。

“假溢出”——队列的存储空间未满,却发生了溢出。

解决“假溢出”的问题有两种可行的方法:
(1)、平移元素:把元素平移到队列的首部。效率低。
(2)、将新元素插入到第一个位置上,构成循环队列, 入队和出队仍按“先进先出”的原则进行。 操作效率、空间利用率高。

循环队列的三种状态


解决办法:
(1)、另设一个布尔变量以区别队列的空和满(使用一个计数器记录队列中元素的总数。);

(2)、少用一个元素的空间,约定入队前测试尾指针在循环意义下加 1 后是否等于头指针,若相等则认为队满;

循环队列-队列的顺序实现 (代码演示)

CycleQueue.h

#pragma once#define MAXQSIZE  100        //最大队列长度  typedef int QElemType;      //定义数据类型typedef struct
{QElemType* base;        // 预分配存储空间基址 int  front;             // 头指针,若队列不空, // 指向队列头元素  int  rear;              // 尾指针,若队列不空, // 指向队列尾元素 的下一个位置
} SqQueue;void InitCycleQueue(SqQueue* Q);//初始化循环队列
void DestroyCycleQueue(SqQueue* Q); //销毁循环队列
int LengthCycleQueue(SqQueue Q); //求循环队列的长度
bool InputCycleQueue(SqQueue* Q, QElemType val); //入循环队列
bool OutputCycleQueue(SqQueue* Q, QElemType * val); //出循环队列
void Show(SqQueue Q); //打印循环队列的元素

CycleQueue.cpp

#include "CycleQueue.h"
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>void InitCycleQueue(SqQueue* Q)
{Q->base = (QElemType*)malloc(MAXQSIZE * sizeof(QElemType));if (!Q->base){printf("InitQueue file\n");exit(-1);}Q->front = Q->rear = 0;
}void DestroyCycleQueue(SqQueue* Q) //销毁循环队列
{free(Q->base);
}int LengthCycleQueue(SqQueue Q) //求循环队列的长度
{return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}bool InputCycleQueue(SqQueue* Q, QElemType val)//入循环队列
{if ((Q->rear + 1) % MAXQSIZE == Q->front)return false;Q->base[Q->rear] = val;Q->rear = (Q->rear + 1) % MAXQSIZE;return true;
}bool OutputCycleQueue(SqQueue* Q, QElemType* val) //出循环队列
{if(Q->rear == Q->front)return false;*val = Q->base[Q->front];Q->front = (Q->front + 1) % MAXQSIZE;return true;
}void Show(SqQueue Q)//打印循环队列的元素
{while (Q.front % MAXQSIZE != Q.rear)printf("%d\t", Q.base[Q.front++]);printf("\n");
}

main.cpp

#include "CycleQueue.h"
#include <stdio.h>
int main()
{SqQueue Q;InitCycleQueue(&Q);printf("入循环队列:\n");for (int i = 0; i < 10; i++)InputCycleQueue(&Q, i * 11);Show(Q);QElemType tmp;printf("出循环队列:\n");OutputCycleQueue(&Q, &tmp);Show(Q);printf("出循环队列:\n");OutputCycleQueue(&Q, &tmp);Show(Q);printf("循环队列长度为%d\n", LengthCycleQueue(Q));DestroyCycleQueue(&Q);return 0;
}

测试结果

循环队列的顺序存储和实现(C语言)【循环队列】相关推荐

  1. 三星手机电池循环清零代码_数据结构(C语言)-循环队列基本操作

    队列是一种先进先出(first in first out,FIFO)的线性表,是一种常用的数据结构. 它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列 ...

  2. c语言有关循环结构运用的题,应用C语言循环结构解决等差数列求和问题微课设计研究...

    高妍 [摘 要]本文以应用C语言循环结构解决等差数列求和问题作为微课主要内容,阐述了对微课设计进行的研究与探索. [关键词]C语言:循环结构:微课 当今,信息化高速发展,数字技术正在影响和改变着我们生 ...

  3. 循环队列的进队算法c语言,循环队列的定义,入队算法,出队算法,遍历算法,及其代码实现-Go语言中文社区...

    队列 的定义: 一种可以是实现"先进先出"的存储结构.数据的进出类似于排队购票.队只允许队尾一端(rear)添加,在另一端队头(front)删除.队有队头(front)和队尾(re ...

  4. c语言双重for循环流程图_第九章、C语言循环之for

    上一章我们讲了while和do...while循环,这一章我们来学习一下C语言中的另外一种循环结构:for循环. 我们先来看一下for循环的结构: for(expression1:expression ...

  5. 数据结构-队列详解(类C语言版)

    目录 队列的相关概念 定义 逻辑结构 存储结构 运算规则 实现方式 队列的基本操作 循环队列--队列的顺序表示和实现 队列的顺序存储结构 假溢出-引出循环队列 判断循环队列队空队满 循环队列的操作 队 ...

  6. 计算机c语言循环作业,计算机C语言循环语句的应用研究

    [摘要]基于计算机C语言循环语句的应用分析,首先要明确C语言应用现状,然后阐述C语言循环语句的分类及特点,最后详细论述循环语句的应用要点,针对while循环语句.dowhile循环语句.for循环语句 ...

  7. 顺序循环队列类c#语言,C#--循环队列的顺序存储

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  8. C语言循环队列的基本操作(init,enquene,dequene)与杨辉三角(C和C++<queue>)

    C语言循环队列的基本操作与杨辉三角(C和C++的表示方法) C语言的表示方法 #include <stdio.h> #include <malloc.h> #define ma ...

  9. 队列的定义、循环队列的顺序存储结构及链式存储结构

    文章目录 1 队列的定义 1.1 文字定义 1.2 代码定义 2 循环队列 2.1 循环队列的定义 2.2 循环队列的顺序存储结构 3 队列的链式存储结构 3.1 链队列的入队操作 3.2 链队列的出 ...

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

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

最新文章

  1. 区块链软件公司:区块链运用在金融上运用的优点有哪些?
  2. setwindowshookex回调函数不执行_不一样的“悬停几秒后执行函数”?一个开源工具函数,请注意查收...
  3. 记一例 ORA-00904:标识符无效
  4. Python实现im2col和col2im函数
  5. Centos7.x 升级svn版本到指定版本
  6. 同学们,看看这里吧!!!
  7. landscape 1
  8. 关于在Mac上安装模拟器的坑比~~~~~
  9. 《工业设计史》第八章:20世纪20、30年代的流行风格
  10. 在韩国5G商用神话中,我们不能学到什么?
  11. php获取steam装备信息,api – 获取某人的Steam库存
  12. 离散数学-图的运算与基本概念、导出子图、路与连通
  13. TensorFlow2.0保存模型
  14. 【自然语言处理】韩语基础与入门(词汇篇)
  15. chi square-卡方分布的定义及性质
  16. Unity接入微信SDK——iOS(接入微信SDK)
  17. 【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码)
  18. JAVA实战——视频管理系统构建common, pojo, mapper和service工程
  19. [Swift]音频循环播放
  20. 读书笔记--《BIM手册》--案例笔记

热门文章

  1. Mysql学习笔记之常用数据类型
  2. 1.11 实例:字符串替换
  3. ACM入门之【二分图】
  4. 【PAT乙级】1035 插入与归并 (25 分)
  5. 4.1.5 文件存储空间管理
  6. 在2003 server上部署DNS服务器
  7. 【学习Python】的网站
  8. javaScript字符串应用
  9. 使用JDBC,完成对如下表的增删改查操作
  10. Spring boot定制错误数据携带出去