直接上图:


循环队列的声明:
0、循环队列的声明
循环队列的基本操作:
1、InitQueue(&Q)(构造一个空队列)
2、DestroyQueue(&Q)(销毁队列Q)
3、ClearQueue(&Q)(清空队列Q)
4、QueueEmpty(Q)(判断队列是否为空)
5、QueueLength(Q)(求队列的长度)
6、GetHead(Q,&e)(获取对头元素)
7、EnQueue(&Q,e)(入队列)
8、DeQueue(&Q,&e)(出队列)
9、QueueTraverse(Q)(从对头到队尾依次访问队列元素)


循环队列

------- 队列的顺序存储表示 -------回顶部

//关键字宏定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define MAXQSIZE 100//循环队列的最大队列长度
//关键字的类型说明
typedef char QElemType;
typedef int Status;
//数据元素(循环队列)的类型说明
typedef struct{QElemType *base; //初始化的动态分配存储空间 int front;       //头指针 (若队列不空,指向队列头元素) int rear;        //尾指针 (若队列不空,指向队列尾元素的下一个位置)
}SqQueue;

------- 循环队列的基本操作 -------

1、InitQueue(&Q)(构造一个空队列) ----回顶部

//给队列分配空间,让头指针和尾指针都为0
Status InitQueue(SqQueue &Q){  //构造一个空队列Q Q.base = (QElemType*)malloc(MAXQSIZE * sizeof(QElemType)); if(!Q.base)exit(0);Q.front = Q.rear = 0;return OK;
}

2、DestroyQueue(&Q)(销毁队列Q) ----回顶部

Status DestroyQueue(SqQueue &Q){//销毁栈Q if(Q.base)free(Q.base);Q.base = NULL;Q.front = Q.rear = 0;return OK;
}

3、ClearQueue(&Q)(清空队列Q) ----回顶部

Status ClearQueue(SqQueue &Q){//清空栈Q Q.front = Q.rear = 0;return OK;
}

4、QueueEmpty(Q)(判断队列是否为空) ----回顶部

//若头指针和尾指针相等,则队空
Status QueueEmpty(SqQueue Q){ //若队列Q为空,则返回TRUE,否则返回FALSE if(Q.front == Q.rear)  //队列空 return TRUE;return FALSE;
}

5、QueueLength(Q)(求队列的长度) ----回顶部

//获取队列长度
int QueueLength(SqQueue Q){  //返回Q的元素个数,即队列的长度 return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}

6、GetHead(Q,&e)(获取对头元素) ----回顶部

//获取对列的头元素
Status GetHead(SqQueue Q, QElemType &e){ //若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR if(QueueEmpty(Q)) return ERROR;e = Q.base[Q.front];return OK;
}

7、EnQueue(&Q,e)(入队列) ----回顶部

//入队列,当队列不满,则在队尾插入元素
Status EnQueue(SqQueue &Q,QElemType e){  //插入元素e为Q的新的队尾元素 if((Q.rear + 1) % MAXQSIZE == Q.front) //队列满 return ERROR;Q.base[Q.rear] = e;Q.rear = (Q.rear + 1) % MAXQSIZE; //入队列 return OK;
}

8、DeQueue(&Q,&e)(出队列) ----回顶部

//出队列,当队列不空,则让队列第一个元素出队列
Status DeQueue(SqQueue &Q, QElemType &e){  //若队列不空,则删除Q的对头元素,用e返回其值,并返回OK;否则返回ERROR; if(Q.front == Q.rear) //队列空 return ERROR;e = Q.base[Q.front];Q.front =  (Q.front + 1) % MAXQSIZE; //出队列 return OK;
}

9、QueueTraverse(Q)(从对头到队尾依次访问队列元素) ----回顶部

//当队列不空,则从对头开始遍历,直至队尾。
Status QueueTraverse(SqQueue Q){  //若队列为空,则返回ERROR,否则遍历队列 if(QueueEmpty(Q)) return ERROR;int i;for(i=Q.front; i<Q.rear; i++){printf("%c",Q.base[i]);}return OK;
}

参考文献:
[1] 严蔚敏,吴伟民 ,《数据结构(C语言版)》.
[2] 程杰,《大话数据结构》,清华大学出版社,2011出版年.
[2] 明日科技,《C语言 从入门到精通》,清华大学出版社,2019年版

数据结构之【队列】的基本操作C语言实现相关推荐

  1. 队列的基本操作c语言代码大全,数据结构――队列(循环队列)的基本操作(实现链队列逐一取出c语言代码)...

    队列 队列是一种重要的线性结构,与栈相同也需要顺序表或者链表作为基础.队列是先进先出(first in first out)FIFO的线性表. 所有数据从队列的一端进入,从另一端离开. 队列中允许插入 ...

  2. 队列的基本操作(C语言实现)

    本篇博客带来栈的好兄弟--队列. 目录 一. 队列的概念与结构 二. 队列的框架定义 三. 队列的功能实现 3.1 队列的初始化 3.2 队列的销毁 3.3 队列插入数据 3.4 队列删除数据 3.5 ...

  3. 数据结构 | 链表队列(基本操作及图示)

    -------------------------------------------- 基本概念: 和栈相反,队列是一种先进先出(FIFO)的线性表.只允许在一端插入,在另一端删除. 允许插入的叫& ...

  4. 数据结构源码笔记(C语言):链接队列

    /* LinkQueue.c*/ /*链接队列:函数实现*/#include <stdio.h> #include <stdlib.h>typedef int DataType ...

  5. 数据结构源码笔记(C语言):栈的基本操作

    #include <stdio.h> #define MaxSize 100typedef char ElemType;typedef struct {char stack[MaxSize ...

  6. 数据结构源码笔记(C语言):二叉排序树的基本操作算法

    //二叉排序树的基本运算算法#include<stdio.h> #include<malloc.h>#define MaxSize 100typedef int KeyType ...

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

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

  8. 【数据结构】队列(链队列、循环队列)的存储结构及基本运算(C语言)

    目录 1. 队列基本概念 2. 链队列 2.1 代码+注释 2.2 运行结果 3. 循环队列 3.1 代码+注释 3.2 运行结果 1. 队列基本概念 队列(Queue)是一种限定性线性表,它只允许在 ...

  9. 数据结构——链式队列解析(C语言版)

    摘自:数据结构学习--链式队列解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:07:08 网址:https://blog.csdn.net/chinesekobe/articl ...

最新文章

  1. hdu2594 简单KMP
  2. 第十章 基本数据结构——链表
  3. c 编程 mysql结果集_使用mysql C语言API编写程序—MYSQL数据库查询操作(执行查询操作,获取查询结果的字段数,记录行数,...
  4. JAVA script 循环 图片_深入分析JavaScript 事件循环(Event Loop)
  5. jQuery 源码系列(四)Tokens 词法分析
  6. 组策略:交互式登录:不显示最后的用户名
  7. 注解的DI以及动态代理
  8. 深入了解前端开发中的高度、宽度问题
  9. Golang map有序化
  10. oracle 有if语句吗,oracle的if语句
  11. html 超链接 中文转码,html和Url转码与解码
  12. Pytorch unfold和fold
  13. [转载]教师节献礼-关于大学的一点思考
  14. c语言程序设置存根,gmock可以用于存根C函数吗?
  15. 微信公众平台开发入门教程
  16. ISO14229 理解(一)
  17. 拖拉机服务器不稳定,手扶拖拉机机油指示不稳定现象分析
  18. 共享纸巾“初纸”获数千万元A轮融资,水滴石基金领投
  19. 基于不同策略的英文单词的词频统计和检索系统(C++)
  20. 错误1053:服务没有及时响应启动或控制请求

热门文章

  1. ceph rados命令使用
  2. valgrind 使用 kcachegrind 查看函数运行时间
  3. Data - 深入浅出学统计 - 下篇
  4. dataTable 从服务器获取数据源的两种表现形式
  5. TCP/IP 协议理解
  6. Objective-C 什么是类
  7. va_start() va_end()函数应用
  8. Microsoft .NET Pet Shop 4 架构与技术分析
  9. SQL SERVER中带参数的返回
  10. WMI技术介绍和应用——查询桌面信息