队列

这篇博客主要介绍一下队列的概念,并且采用C语言,编写两种存储实现方式:顺序存储链式存储,当然还有常规的队列基本操作的实现算法

队列基本概念

标准解释:队列(Queue)是有限个*同类型*数据元素的线性序列,是一种先进先出(First In First Out FIFO)的线性表,新键入的数据元素插在队列尾端,出队列的数据元素在队列首部被删除。

教材中给了一个示意图,不错

顺序队列结构类型中有三个域:data、front、rear。

data:一维数组,存储队列中的数据元素 font:指向队列首元素的前一个单元 rear:指向实际的队列尾元素单元

参考示意图

入队列操作可以用两条赋值语句

SQ.rear = SQ.rear+1;
SQ.data[SQ.rear] = x;

出队列操作可以用一条语句完成

SQ.front = SQ.front+1

但是,会出现一些问题,通过示意图说明一下

当然还有一种情况,一边入队列,一边出队列 注意下图,SQ.front下面还有空间

所以为了解决这种假溢出问题,聪明的开发人员,想出来新的解决办法了,造一个环儿~

循环队列

下面看一个图,重点看一下SQ.rear与SQ.front的对应位置

如果上述图翻译成C语言代码,入队核心逻辑为

SQ.rear = (SQ.rear+1) % maxsize ;
SQ.data[SQ.rear] = x;

出队列的核心逻辑为

SQ.front = (SQ.front+1)%maxsize;

你在学习的时候,肯定对SQ.rear+1SQ.front+1有疑问

我们举例来说明一下吧

顺序队列的C语言实现

接下来难度指数上升,开始用C语言编写代码吧

一顿操作之后,还是比较简单的,总之不写链式存储,顺序的还是比较简单的

#include <stdio.h>
#include <stdlib.h>//循环队列最大数据元素个数
const int maxsize = 8; //循环队列的结构体
typedef struct cycqueue{int *data;int front,rear;
} CycQue;//队列初始化
void init(CycQue *CQ){CQ->data = (int *)malloc(maxsize*sizeof(int));CQ->front = 0;CQ->rear = 0;
}//判断队列是否为空
int empty(CycQue *CQ){if(CQ->rear==CQ->front) return 1;else return 0;
}//入队列
int EnQueue(CycQue *CQ,int x){if((CQ->rear+1)%maxsize==CQ->front){printf("队列满");return 0;}else{CQ->rear =(CQ->rear+1) % maxsize;CQ->data[CQ->rear] = x;return 1;}}//出队列
int OutQueue(CycQue *CQ){if(empty(CQ)){printf("队列为空");return 0;}else{CQ->front = (CQ->front+1) % maxsize;return 1;}}int main()
{CycQue CQ;init(&CQ);EnQueue(&CQ,2);EnQueue(&CQ,4);printf("%d",CQ.rear);OutQueue(&CQ);printf("%d",CQ.front);return 0;
}

链式队列的C语言实现

链式队列其实有之前的经验之后,写起来难度系数也不会太高,接下来我们编写一个核心的部分代码

队列的链接实现实际上是用一个带有头结点的单链表来表示队列,成为链队列 头指针指向链表的头结点 单链表的头结点的next域指向队列首结点 尾指针指向队列尾结点,即单链表的最后一个结点

初始化

#include <stdio.h>
#include <stdlib.h>
typedef struct LinkQueueNode{int *data;struct LinkQueueNode *next;
} LkQueNode;typedef struct LkQueue{LkQueNode *front,*rear;
} LkQue;void init(LkQue *LQ){LkQueNode *temp;temp = (LkQueNode *)malloc(sizeof(LkQueNode)); //生成队列的头结点LQ->front = temp;    //队列头指针指向队列头结点LQ->rear = temp;     //队列尾指针指向队列尾结点(LQ->front)->next = NULL;}

核心两个操作入队列出队列

入队列代码如下

//入队列
void EnQueue(LkQue *LQ,int x){LkQueNode *temp;temp = (LkQueNode *)malloc(sizeof(LkQueNode));temp->data = x;temp-next = NULL;(LQ->rear)->next = temp;LQ->rear = temp;
}

出队列这个事情就交给你自己吧,好好理解一下,就可以写出来了

自考要点

在考试中,队列容易出现编码题目,占比在7~10分,所以还是蛮重要的呢!

看到这里,辛苦啦,BYEBYE

struct lnode是什么结构类型_【自考】数据结构第三章,队列,期末不挂科指南,第4篇相关推荐

  1. struct lnode是什么结构类型_练字应该练什么之:汉字基本结构的类型

    [练字应该练什么之:汉字基本结构的类型\部分字例和内容源自钱沛云<硬笔书法五十讲>] 谈到学习书法的结构问题,不由想起这样一句歌词:"最爱写的字啊是先生教的方块字,方方正正做人要 ...

  2. 实验一 线性表的顺序存储与实现_【自考】数据结构中的线性表,期末不挂科指南,第2篇

    线性表 这篇博客写的是线性表相关的内容,包括如下部分,先看下有木有期待 啥是线性表 线性表的顺序存储 线性表的基本运算在顺序表上的实现 线性表的链式存储 线性表的基本运算在单链表上的实现 循环链表与双 ...

  3. c++ 图的连通分量是什么_【自考】数据结构第五章图,期末不挂科指南,第9篇

    图的基本概念 首先,你要明确图是什么样子的,就是下面这个样子的 图的定义与术语 有向图和无向图 直接对比图就可以看出来,有向图和无向图的区别了,这个没有什么难的. 有向图和无向图的表示法有略微的区别, ...

  4. map的key可以试一个数组吗?_【自考】数据结构第三章,数组,期末不挂科指南,第5篇...

     数组 概念如下 数组可以看成线性表的一种推广,其实就是一种线性表,一维数组又称为向量 数据由一组具有相同类型的数据元素组成,并存储在一组连续的存储单元中 若一维数组中的数据元素又是一维数组结构,则 ...

  5. c语言结构类型ppt,C语言 第10章 结构类型与其他构造类型.ppt

    C语言 第10章 结构类型与其他构造类型 第7章 结构类型与其它构造类型 本章的主要内容 1.三种新的复杂数据类型:结构体型.共用体型.枚举型的概念与作用. 2.结构体的定义方法,结构体型变量.数组. ...

  6. 琼斯是计算体心立方弹性模量_固体物体第三章习题

    固体物体第三章习题 第三章 晶体结合 3.1 惰性气体晶体 惰性气体晶体是最简单的分子晶体,原子间的相互作用能可以用勒纳-琼斯势描写 式中r是原子间的距离,A.B是两个常数.第一项代表吸引作用,第二项 ...

  7. 计算机中的无线网卡使用哪两种类型的扩展槽,第三章计算机每一种扩展槽的相关信息.ppt...

    第三章计算机每一种扩展槽的相关信息 Product Department Zhang Yun Yun 2013.NOV 第三章 扩展槽 入琵商要篱邹囱驮飞长洞女阳弄驳成短椰此吴撤踌订览骄驴峰记号惰臻贝 ...

  8. 假设以邻接矩阵作为图的存储结构_学习数据结构第五章:图(图的存储方法)...

    第五章:图(图的存储方法) 1.邻接矩阵法 下面是一个无向图的表示,我们使用一个一维数组存放点集,使用一个二维数组存放边集 二维数组表示边:行号表示其实端点,列号表示结束端点,值表示该边是否存在,以及 ...

  9. mysql long类型_怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!...

    点击上方蓝色"冰河技术",关注并选择"设为星标" 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架 ...

最新文章

  1. MySQL学习笔记之九:MySQL Replication
  2. 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)--转
  3. postman代码没有问题,但是文件上传失败
  4. centos7无法使用ifconfig且无法上网
  5. 如何遍历维数和各维上限未定的多维数组
  6. oracle 字段全大写,Oracle如何批量将表中字段名全转换为大写(利用简单存储过程)...
  7. HashMap深度分析
  8. Bing 和 Cortana 源码遭泄露,网友嘲讽:其实没人想要
  9. 【免费毕设】基于Web的subversion用户管理系统(系统+论文)
  10. oracle 表空间 归档,oracle数据库表空间及归档
  11. 近世代数——Part2 群:基础与子群 课后习题
  12. Protel99SE精彩教程
  13. python官方文档(自翻译)
  14. 【STM32】 STM32单片机IO引脚配置方式
  15. Rendezvous机制完成数据交互。Rendezvous是一个基于—_者一__者模型设计的抽象类。
  16. 记录每天背的单词,准备考研。(2月13日)
  17. 抛物线交点式公式_初一年级二次函数公式:顶点式、交点式、两根式
  18. python抢优惠券程序_python3 优惠券查询GUI程序
  19. 深圳东部公交WIFI试用体验
  20. 打开win10应用商店,提示管理员已阻止这个应用

热门文章

  1. 《大数据》编辑推荐 | 基于遥感大数据的信息提取技术综述
  2. 作者:杨青海(1965-),男,博士,中国标准化研究院高级工程师。
  3. 秦叶阳(1986-),女,就职于北京大学,安徽荣创智能科技有限公司联合创始人...
  4. 字符串的展开(洛谷P1098题题解,Java语言描述)
  5. 【Java】基于分子式求分子量
  6. 100道Go语言面试题
  7. 深入学习Java多线程——并发机制底层实现原理
  8. 在linux程序里面,知道一个函数地址,改函数是属于某个动态库的,怎么样得到这个动态库的全【转】...
  9. 《SolidWorks 2013中文版机械设计从入门到精通》一2.6 几何关系
  10. 如何在Ubuntu中使用root账号登录(新增Ubuntu12.04/14.04)?