一、何为队列?

队列 (Queue) :是一种先进先出 (First In First Out ,简称 FIFO) 的线性表,也是运算受限的线性表。只允许在表的一端进行插入,而在另一端进行删除。

队首 (front) :允许进行删除的一端称为队首。

队尾 (rear) :允许进行插入的一端称为队尾。

队列中没有元素时称为空队列。在空队列中依次加入元素 a 1 , a 2 , …, a n 之后, a 1 是队首元素, a n 是队尾元素。显然退出队列的次序也只能是 a 1 , a 2 , …, a n ,即队列的修改是依先进先出的原则进行的,如图 3-5 所示。

二、基本操作创建新队列

判空

进队

出队

清空队

获得队头元素

遍历队

销毁队

队长

三、队列的存储实现及运算实现

与线性表、栈类似,队列也有顺序存储和链式存储两种存储方法。

1.顺序队列

循环队列的类型定义如下:

#define MAXQSIZE 100 //最大队列长度

typedef struct {

QElemType *base; //动态分配存储空间

int front; //头指针,若队列不空,指向队列头元素

int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置

} SqQueue;

下面是循环队列上基本操作的实现。

(1)入队:

int EnQueue (SqQueue &Q, QElemType e) {

if((Q.rear+1)%MAXQSIZE == Q.front) return ERROR;

Q.base[Q.rear] = e;

Q.rear = (Q.rear+1) % MAXQSIZE;

return OK;

}

(2)出队:

int DeQueue (SqQueue &Q, QElemType &e) {

if (Q.front = = Q.rear) return ERROR;

e = Q.base[Q.front];

Q.front = (Q.front+1) % MAXQSIZE;

return OK;

}

(3)求循环队列元素个数:

int QueueLength(SqQueue Q){

return (Q.rear-Q.front+MAXQSIZE) %MAXQSIZE;

}

2.链队列

链式存储的队称为链队列。和链栈类似,用单链表来实现链队列,根据队的先进先出原

则,为了操作上的方便,分别需要一个头指针和尾指针。

链队列的形式描述如下:

typedef struct QNode { // 结点类型

QElemType data;

struct QNode *next;

} QNode, *QueuePtr;

typedef struct { //链队列类型

QueuePtr front; //队头指针

QueuePtr rear; //队尾指针

} LinkQueue;

定义一个指向链队列的指针:LinkQueue Q;

下面是链队列的基本运算的实现。

(1)入队

int EnQueue (LinkQueue &Q, QElemType e) {

QNode *p;

p = (QNode *)malloc(sizeof(QNode));

p->data = e;

p->next = NULL;

Q.rear->next = p;

Q.rear = p;

return OK;

}

(2)出队

int DeQueue (LinkQueue &Q, QElemType &e) {

if (Q.front == Q.rear) return ERROR; //队空,出队失败

p = Q.front->next;

e = p->data; //队头元素放 e 中

Q.front->next = p->next;

if(Q.rear==p) Q.rear= Q.front; //只有一个元素时,此时还要修改队尾指针

free (p);

return OK;

}

3.除了栈和队列之外,还有一种限定性数据结构是双端队列。

(1)双端队列:可以在双端进行插入和删除操作的线性表。

(2)输入受限的双端队列:线性表的两端都可以输出数据元素,但是只能在一端输入数

据元素。

(3)输出受限的双端队列:线性表的两端都可以输入数据元素,但是只能在一端输出数

据元素。

结束语

c语言中有队列头文件吗,C语言队列学习竟是如此简单!你,懂了嘛?相关推荐

  1. 单片机c语言怎样添加自定义头文件,单片机C语言编程与或|头文件常见问题

    一.常见问题 1.头文件reg51.h和reg52.h其实是一样的,大家两个都可以用. 2.main()前面的void可加可不加,反正都是无返回值函数. 3.不是每一个程序都要用到死循环while(1 ...

  2. C++头文件与C语言头文件的区别

    C++头文件与C语言头文件的区别 C++头文件与C语言头文件的区别: C语言风格的头文件(带.h): #include<stdio.h> //输入/输出函数 #include<str ...

  3. C语言编程规范 — 头文件、函数

    0 编码规范说明 0.1 前言 为了提高产品或项目代码质量,软件开发人员编写出简洁.可靠.可维护.可测试.高效.可移植的代码,树立良好的编程规范是非常有必要的,良好的编程规范能提高编程效率,规避很多编 ...

  4. c语言程序头文件作用,C语言头文件

    C语言头文件教程 C 语言的头文件一般都是 .h 做为结尾的. C语言头文件详解 语法 #include 参数 参数 描述 filename 我们需要引入的头文件的名称. 说明 C 语言的头文件一般都 ...

  5. C语言 define 防止头文件重复包含 - C语言零基础入门教程

    目录 一.头文件重复包含编译器报错 1.简单的理解头文件重复包 2.老流氓的理解头文件重复包 二.通过宏定义解决头文件重复包含 1.通过 #ifndef / #define 解决头文件重复包含 2.通 ...

  6. C语言基础专题 - 头文件引用

    C语言基础专题 - 头文件引用 本文介绍了C语言中头文件的引用方法 阅读本文前推荐阅读C语言预处理 1.

  7. 单片机C语言常用的头文件与库函数

    单片机C语言常用的头文件与库函数 以下头文件与库函数,只用头文件包含以下相应头文件即可调用. 持续更新中 Intrins.h头文件 函数名 函数原型 功能 返回值 _crol_ unsigned ch ...

  8. algorithm头文件下的常用函数-学习笔记

    algorithm头文件下的常用函数-学习笔记 max(x,y),min(x,y),abs(x) swap(x,y) reverse(it,it2) next_permutation() fill( ...

  9. c语言gets函数头文件string.h,string函数头文件

    string.h头文件中有什么函数 string.h头文件中的函数: #include //STL 通用算法 #include //STL 位集容器 #include //复数类 #include / ...

  10. c++头文件被c语言调用需要注意什么_嵌入式C语言之模块化编程

    C语言中的模块化体现在两个方面: 1 函数. 函数是C语言的最小单位,每个函数均实现一个独立的功能,于是每个函数均可以当做是一个最小的功能模块.这样,C语言就实现了最基本的模块化. 2 文件. 在C语 ...

最新文章

  1. Deep Non-Line-of-Sight Reconstruction:深度非视域重建
  2. OKR不但是目标管理工具,也是沟通工具
  3. python怎么导入包-python模块之导入包及模块发布
  4. linux c 定时器
  5. 输入一个数判断是否对称java_判断对称矩阵 - osc_4mawo3g6的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. 大数据平台常用组件_这款大数据智能服务平台火了!全自动化配置30+款开源大数据组件...
  7. 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---10
  8. matlab生成exe失败,求助,m文件生成exe遇到的错误
  9. armbian ubuntu 桌面_Armbian国内源(Ubuntu18.04 Bionic)
  10. 【Linux】 JDK安装及配置 (linux-tar.gz版)
  11. 2008年度最佳开源CMS大奖赛开幕
  12. 服务器控件编程中的控件状态保存机制
  13. BZOJ4293 : [PA2015]Siano
  14. unity之制作二维码扫描
  15. 地图学相关知识(四)
  16. matlib 多种方法实现图像旋转不使用imrotate函数
  17. 量化交易入门阶段——欧奈尔的CANSLIM模型(C 季度每股收益增长)
  18. Kotlin基础2(持续更新)
  19. 金蝶KIS迷你版标准版年度结账
  20. 教育学习类app是怎么开发的

热门文章

  1. NI控制原型平台配置(硬件+软件)
  2. Kindle刷安卓双系统的方法
  3. Oracle 数据库sql语句修改表字段的字段类型和长度
  4. 孪生网络图像相似度_CVPR-2019 更深更宽的孪生网络实时追踪
  5. SQL连接表(内连接、左连接、右连接、交叉连接、全外连接)
  6. svnadmin服务安装
  7. Visual SVN Server
  8. MT6763/P23处理器资料介绍
  9. Cocos2d-x 3.17.2 集成X5WebView内核方法,完美运行
  10. 看拉扎维《模拟CMOS集成电路设计》的一些总结和思考(十)——稳定性与频率补偿