C语言数据结构之顺序队列

tips:前些天学习了顺序表和顺序栈,今天来看看c语言数据结构之队列的基本操作。


队列的特点是先进先出,后进后出。因此我们使用一个队头指针和一个队尾指针分别指向队头元素,以及队尾元素的下一个位置。


首先我们创建一个顺序队列的结构体

#define MaxSize 10 //定义队列中最大元素个数typedef struct {int data[MaxSize];//用静态数组存放队列元素int front, rear;//队头指针和队尾指针,这里队尾指针指向的是队尾元素的下一个位置            //针对这种队列设计方式:队列中元素的个数:(rear+MaxSize-front)%MaxSize,这会浪费一个存储空间}Queue,*pQue;

准备顺序队列元素打印函数


//打印队列中的元素
void print_Queue(pQue q)
{int head = q->front;while (head != q->rear){printf("%d\n", q->data[head]);head++;}printf("---------------------------------\n");
}

1、队列的初始化(InitQueue)

//初始化队列
void InitQueue(pQue q)
{//初始时,队头和队尾指针都指向0号下标q->front = 0;q->rear = 0;
}

2、入队(EnQueue)

思路:

  • 当队列满时,不予入队,注意这里队满的判断条件;
  • 当队列未满时,将元素入队,注意rear指针的移动;

具体实现:

//入队
void EnQueue(pQue q, int e)
{if ((q->rear+1)%MaxSize==q->front){printf("队满!\n");}else{q->data[q->rear] = e;q->rear =(q->rear+1)%MaxSize;//队尾指针后移(转圈移动)//rear始终指向队尾元素的下一个位置}
}

3、出队(DeQueue)

思路:

  • 当队空时(front==rear),不予出队;
  • 当队非空时,front指针移动;

具体实现:

//出队
void DeQueue(pQue q)
{if (q->front == q->rear) {printf("队空!\n");}else{q->front = (q->front + 1) % MaxSize;//front指针后移(转圈移动)}
}

4、判断队列是否为空(QueueEmpty)

思路:

  • 当front==rear,队列空,返回1;
  • 当front!=rear,队列非空,返回0;

具体实现:

//判断队列是否为空
int QueueEmpty(pQue q)
{if (q->front == q->rear){return 1;}elsereturn 0;
}

到此,我们就完成了队列的基本操作,还是比较简单的!
我们可以在main()函数中测试一下:

int main()
{Queue que;pQue q = &que;int val;char panduan;//判断是否出队(y/n)InitQueue(q);//循环入队while (scanf("%d", &val) != EOF){//入队 EnQueue(q, val);}//打印队列元素printf("队列中的元素为:\n");print_Queue(q);while (printf("是否出队?y/n:"), scanf("%c", &panduan) != NULL){if (panduan == 'y'){//出队DeQueue(q);//打印元素print_Queue(q);//判断队列是否为空if (QueueEmpty(q)){printf("队列为空!\n");}else{printf("队列不为空!\n");}printf("---------------------------------\n");}else if (panduan == 'n'){break;}}return 0;
}

测试结果:


顺序队列的操作到此已经完成,希望对大家的学习有所帮助,加油!


没有太晚的开始,不如就从今天行动。总有一天,那个一点一点可见的未来,会在你心里,也在你的脚下慢慢清透。生活,从不亏待每一个努力向上的人。

C语言数据结构之顺序队列相关推荐

  1. (c语言数据结构)用顺序队列的方式实现输入12345,输出12345操作——期末数据结构程序设计

    用顺序队列的方式实现输入123456,输出12345操作 文章目录 用顺序队列的方式实现输入123456,输出12345操作 1.队列的定义 2.队列的初始化 3.判空操作 4.入队操作 5. 出队操 ...

  2. 【数据结构】顺序队列的实现(C语言)

    队列的基本概念及其描述 队列是一种特殊的线性表,它的特殊性在于队列的插入和删除操作分别在表的两端进行. 插入的那一端称为队尾,删除的那一端称为队首.队列的插入操作和删除操作分别称为进队和出队. 先进先 ...

  3. 数据结构之顺序队列和链式队列常用的一些操作

    顺序队列是队列的顺序存储结构,顺序队列实际上是运算受限的顺序表.和顺序表一样,顺序队列用一个向量空间来存放当前队列中的元素.由于队列的队头和队尾的位置是变化的,设置两个指针front和rear分别指示 ...

  4. 数据结构之顺序队列的优化

    顺序队列的优化 我们既然想优化顺序队列,首先得知道目前顺序队列的瓶颈在哪里,那样才能对症下药. 顺序队列的瓶颈: 1.线性表的第一个元素作为队头,线性表的最后一个元素作为队尾: 2.入队的新元素是在线 ...

  5. 通过代码快速上手C语言数据结构-栈与队列

    3.1-3.4顺序栈 3.1初始化顺序栈 3.2顺序栈进栈运算 3.3顺序栈出栈运算 3.4顺序栈取栈顶元素运算 顺序栈头文件 #define TRUE 1 #define FALSE 0 #defi ...

  6. 浅谈数据结构之顺序队列(五)

    队列:是指只允许在一端进行插入操作,而在另一端进行删除操作的线性表.队列是一种先进先出的线性表,这与栈的后进先出正好相反:其中允许插入的一端我们称为队尾,允许删除的一端我们称为队头(或队首).假设队列 ...

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

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

  8. 数据结构源码笔记(C语言):顺序查找

    //实现顺序查找的算法 #include<stdio.h> #include<malloc.h> #include<malloc.h>#define MAXL 10 ...

  9. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  10. 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...

    还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...

最新文章

  1. 联想计算机农村,农村的联想
  2. 时序数据-LSTM模型-实现用电量预测
  3. Python编程基础:第四十八节 对象作为参数Objects as Argument
  4. 视觉SLAM总结——视觉SLAM十四讲笔记整理
  5. hdu2121 Ice_cream's world II
  6. 模式识别与机器学习课程笔记——决策树和贝叶斯估计
  7. 假如,绿茶婊的目标变成女生......
  8. 基于python的文件加密传输_基于python实现文件加密功能
  9. mysql sql优化_MySQL优化SQL语句的步骤
  10. C++之String的find方法,查找一个字符串在另一个字符串的什么位置;leveldb字符串转数字解析办法...
  11. 国外注册的域名dns服务器换回国内dns服务器的详细教程!...
  12. python 爬虫抓取网页数据导出excel_如何用excel实现网页爬虫
  13. 数据挖掘导论完整版pdf中文
  14. IDEA环境下yml文件不显示小绿叶(不被识别为配置文件)
  15. win7 计算器 android,强大的Win7计算器
  16. STM8S003F3和N76E003功能引脚对比
  17. C语言选择题知识点整理
  18. 如何隐藏Android模拟器的虚拟按键
  19. 2026年预标准5G营收将达到2000亿美元
  20. 原生js方法购物车完整实现 利用localStorage

热门文章

  1. Linux权限管理 - 特殊权限之sudo权限
  2. 实验11——指针的基础应用
  3. DATAGUARD 添加修改REDOLOG大小
  4. 如何利用百度音乐播放器的API接口来获取高音质歌曲
  5. Rinetd.exe 通过 instsrv.exe/srvany.exe 注册服务实现稳定端口转发
  6. 状态机finite-state machine学习笔记2——按键消抖初步(1)
  7. matlab expotest,软硬件协同开发在电机控制的应用-matlabexpo2019.PDF
  8. wsdl 架构验证警告:来自命名空间_Let it go: DARTS 神经网络可微架构搜索 笔记
  9. 搜题公众号对接题库教程
  10. 视频教程-企业级多语言舆情爬虫系统-Go语言