说明:

时间关系,这里只给出代码及注释,有空的时候再详细介绍一下代码的实现流程。


1.代码及注释

如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct {
   ElemType  *elem;  // 存储空间的基址
   int front;        // 队头位标
   int rear;         // 队尾位标,指示队尾元素的下一位置
   int maxSize;      // 最大长度
} SqQueue;
#define OVERFLOW -1
#define OK 1
#define ERROR 0    
#define TRUE 2
#define FALSE -2
typedef int Status;
Status InitQueue_Sq(SqQueue &Q, int size) { // 构造一个空队列
   Q.elem = (ElemType *)malloc(size*sizeof(ElemType));
   Q.maxSize = size;
   Q.front = Q.rear = 0;
   return OK;
Status QueueEmpty_Sq(SqQueue Q){ // 判断队列Q是否空,若空则返回TRUE,否则FALSE
   if(Q.front == Q.rear)
      return TRUE;
   else  
      return FALSE; 
}
Status EnQueue_Sq(SqQueue &Q, ElemType e) {
        // 若当前队列不满,在队列的尾元素之后,插入元素 e 为新的队列尾元素
   if(Q.front == (Q.rear + 1)%Q.maxSize)
       return ERROR;
   Q.elem[Q.rear] = e;
   Q.rear = (Q.rear + 1)%Q.maxSize;
   return OK;
}
Status DeQueue_Sq(SqQueue &Q, ElemType &e) {
        // 若队列不空,则删除队列Q中的头元素,用 e 返回其值
   if(Q.front == Q.rear)
      return ERROR; // 队空报错
   e = Q.elem[Q.front];
   Q.front = (Q.front+1)%Q.maxSize; // Q.front循环加1
   return OK;
}
int main(void) {    
    SqQueue Q;
    ElemType e;
    Status result1, result2;
     
    //1. 初始化一个size为5的循环队列Q
    InitQueue_Sq(Q, 5);
    EnQueue_Sq(Q, 'A'); 
    EnQueue_Sq(Q, 'B'); 
    EnQueue_Sq(Q, 'C');    
    EnQueue_Sq(Q, 'D');
    DeQueue_Sq(Q, e);   
    EnQueue_Sq(Q, 'E');  
    DeQueue_Sq(Q, e);   
    EnQueue_Sq(Q, 'F');   //出现了要用求余确定来确定新进队列的元素位置,
                          //即“循环使用空间的情况”   
    result1 = EnQueue_Sq(Q, 'G');   //满了,放不下
    
    printf("result1 = %d\n", result1);
                                                
    DeQueue_Sq(Q, e);   
    DeQueue_Sq(Q, e);   
    DeQueue_Sq(Q, e);   
    DeQueue_Sq(Q, e);   
    result2 = DeQueue_Sq(Q, e);   //空了,return FALSE      
       
    printf("result2 = %d\n", result2);
                                           
     
}


2.执行结果

如下:

1
2
3
result1 = 0
result2 = 0
请按任意键继续. . .


3.研究方法

第2步只是直接给出结果,实际上利用编译器的断点功能可以观察每一步的执行情况,从而加深对循环队列的理解,可以尝试一下。

本文转自 xpleaf 51CTO博客,原文链接:http://blog.51cto.com/xpleaf/1696608,如需转载请自行联系原作者

【数据结构之旅】循环队列相关推荐

  1. 数据结构与算法 | 循环队列

    循环队列 实际中我们还会用到一种队列叫做循环队列,这种队列把存储空间前后连接起来,形成像环一样的结构,解决了内存空间浪费的问题 这里我们用顺序结构来实现,因为为了防止溢出的情况,这里我们需要多开一个数 ...

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

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

  3. 数据结构(c/c++)—循环队列的判断空满方式

    文章目录 前言 队列的数据结构 初始化 一.舍弃空间 二.不舍弃空间 1.计数器 2.设置标志位 前言 我们这里一共三个方法,通过是否舍弃空间来实现队列空满的判断. 队列的数据结构 const int ...

  4. 【数据结构】顺序循环队列及其实现(C语言)

    给定一个大小为MAXSIZE的数组储存一个队列,经过若干次的插入和删除以后,当队尾指针 rear = MAXSIZE 时,呈现队列满的状态,而事实上数组的前部可能还有空闲的位置.为了有效地利用空间,引 ...

  5. 2021 - 9 下旬 数据结构-线性表-循环队列-java实现代码

    //循环队列,本质就是用动态数组实现的,且出队入队时间复杂度均O(1)的队列 //相比普通队列,增设一个front指针,代表队头,代表下一个出队的元素 //循环队列的重点在于队头队尾的元素的下标的计算 ...

  6. 数据结构之顺序循环队列

    顺序循环队列 思维导图: 队列的定义: 队列的特点 队列的基本操作: 顺序循环队列基本操作的实现: 情况一:rear和front指向同一位置时 队列定义: 队列初始化: 入队: 出队: 队列判空: 返 ...

  7. 数据结构基础(7) --循环队列的设计与实现

    队列 队列简称队, 也是一种操作受限的线性表, 只允许在表的一端进行插入, 而在表的另一端进行删除.其特点为"先进先出(FIFO)",故又称为先进先出的线性表,简单队列如图所示: ...

  8. 数据结构初学之循环队列补充

    求循环队列的长度 分析: 1.当队尾指针rear指向的结点的位置下标大于队头指针front指向的结点的位置下标时(即队尾指针在队头指针的后面时), 队列的长度为len = rear - front; ...

  9. 数据结构c语言循环队列代码,数据结构C语言实现----循环队列

    代码如下: #include #include typedef char ElemType; #define MAXQUEUE 100 typedef struct { ElemType *base; ...

  10. 《数据结构》之循环队列及代码

    一.引入 队列的顺序实现指内存中分配一片连续的存储单元用来存放数据,再设两个指针:队头指针front指向队头元素,队尾指针rear指向队尾元素或者队尾元素的下一个位置此处采用指向队尾元素下一个位置为例 ...

最新文章

  1. libjpeg的问题
  2. Servlet的PrintWriter out = response.getWriter()使用
  3. 安装已停止,原因是 ProjectType 值的目录不存在。对于您所安装的 Visual St...
  4. bootstrap-datepicker 日期格式设置
  5. 怎么用odbc连接mysql数据库连接_PowerDesigner通过ODBC来实现Mysql数据库的连接操作...
  6. spring学习(35):c名称空间注入
  7. java中的sql语句书写_Java中sql语句之通配符*
  8. Physically Based Rendering,PBRT(光线跟踪:基于物理的渲染) 笔记
  9. javascript手册安卓版_JavaScript 完全手册(2018版)
  10. 在PPT设计中如何制作有效的图表?
  11. PhpStorm中如何使用Xdebug工具,入门级操作方法
  12. Linux Tools---wireless
  13. 相关系数excel_怎样征服老板?教你用excel找到数据之间隐藏信息
  14. 双11还没完,商家已经被退货“逼疯”了
  15. Unity3D自学笔记
  16. 淘宝怎么寄东西到日本?如何在日本购买国内淘宝上的物品呢?
  17. cgb2107-day08
  18. 抖音评论怎么引流?商家如何利用抖音评论区
  19. js nextSibling属性和previousSibling属性概述及使用注意
  20. Python-easygui模块之插入图片

热门文章

  1. asp页面实现301重定向方法
  2. javascript创建对象过程
  3. 任意半径中值滤波(扩展至百分比滤波器)O(1)时间复杂度算法的原理、实现及效果。
  4. tensorflow.python.framework.errors_impl.NotFoundError: Failed to create a directory: ../user_data\co
  5. ArcGIS学习总结(18)——面要素/矢量拆分
  6. 数据结构-----双向链表笔记
  7. Linux centos6 命令行配置网络连接
  8. Android okhttp https TrustManager简单总结
  9. exclips为什么j创建局java出错_clips.BuildRule出错
  10. 软件开发方法之敏捷开发,你用了么?