iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言数据结构不挂科指南之队列详解
  • 593
分享到

C语言数据结构不挂科指南之队列详解

2024-04-02 19:04:59 593人浏览 独家记忆
摘要

目录队列队列基本概念循环队列顺序队列的 C 语言实现链式队列的 C 语言实现自考要点队列 这篇博客主要介绍一下队列的概念,并且采用 C 语言,编写两种存储实现方式:顺序存储和链式存储

队列

这篇博客主要介绍一下队列的概念,并且采用 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 分,所以还是蛮重要的呢!

到此这篇关于C语言数据结构不挂科指南之队列详解的文章就介绍到这了,更多相关C语言 队列内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言数据结构不挂科指南之队列详解

本文链接: https://www.lsjlt.com/news/168723.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言数据结构不挂科指南之队列详解
    目录队列队列基本概念循环队列顺序队列的 C 语言实现链式队列的 C 语言实现自考要点队列 这篇博客主要介绍一下队列的概念,并且采用 C 语言,编写两种存储实现方式:顺序存储和链式存储...
    99+
    2022-11-13
  • C语言数据结构不挂科指南之栈&队列&数组详解
    目录学习目标栈基本概念栈的基本运算栈的顺序实现双栈栈的链接实现考试要点小结学习目标 自考重点、期末考试必过指南,这篇文章让你理解什么是栈、什么是队列、什么是数组 掌握栈、队列的顺序存...
    99+
    2022-11-13
  • C语言数据结构不挂科指南之线性表详解
    目录基本概念线性表的顺序存储线性表的顺序存储的时间复杂度线性表的链接存储线性表在单链表上实现基本运算初始化初始化成功,开始插入元素单链表的时间复杂度循环链表双向循环链表期末考试基本概...
    99+
    2022-11-13
  • C语言数据结构之队列算法详解
    目录一、前言二、基本概念三、顺序队列四、链队列五、循环队列六、总结与提高一、前言 队列在程序设计中经常出现,如:操作系统中的排队问题。 这篇文章主要介绍了队列的...
    99+
    2022-11-12
  • c语言数据结构之栈和队列详解(Stack&Queue)
    目录简介栈一、栈的基本概念1、栈的定义2、栈的常见基本操作二、栈的顺序存储结构1、栈的顺序存储2、顺序栈的基本算法3、共享栈(两栈共享空间)三、栈的链式存储结构1、链栈2、链栈的基本...
    99+
    2022-11-13
  • C语言数据结构与算法之队列的实现详解
    目录队列的概念及结构队列的实现Queue.hQueue.cTest.c队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FI...
    99+
    2022-11-13
    C语言数据结构 队列 C语言 队列实现 C语言 队列
  • C利用语言实现数据结构之队列
    目录一、链队列二、链队的表示三、链队的基本操作1. 链队的初始化2. 链队的销毁3. 入队4. 出队四、顺序队列五、循环队列1. 初始化2. 求队列长度3. 入队4. 出队 前言: ...
    99+
    2022-11-12
  • 详解C语言数据结构之栈
    目录栈的链式实现主要内容代码实现:总结栈的链式实现 主要内容 (1) 栈包含7个元素,依次是67,3,88,6,1,7,0,采用尾插入法创建 栈,为该栈设置两个指针,一个bottom...
    99+
    2022-11-12
  • C语言数据结构之队列的定义与实现
    目录一、队列的性质二、队列的结构三、代码实现头文件功能函数一、队列的性质 上次我们学习栈,了解到栈储存释放数据的方式是:先进后出 而队列与其相反,队列是:先进先出,后进后出。 二、队...
    99+
    2022-11-13
  • C语言数据结构之链队列的基本操作
    目录1.队列的定义2.队列的表示和实现(1)初始化操作(2)销毁队列(3)入队操作(4)出队操作附录完整代码:总结1.队列的定义 队列 (Queue)是另一种限定性的线性表,它只允许...
    99+
    2022-11-12
  • C语言数据结构进阶之栈和队列的实现
    目录栈的实现:一、栈的概念和性质二、栈的实现思路三、栈的相关变量内存布局图四、栈的初始化和销毁五、栈的接口实现:1.入栈2.出栈3.获取栈顶的数据4.获取栈的元素个数5.判断栈是否为...
    99+
    2022-11-12
  • C语言数据结构之栈与队列的相互实现
    目录一、用对列实现栈代码实现二、用栈实现队列代码实现一、用对列实现栈 题干要求: 细节分析:队列是先进先出; 要实现的栈是先进后出。 解题思路:假设:先用一个队列储存数据 N 个,...
    99+
    2022-11-13
  • C语言数据结构之队列怎么定义与实现
    今天小编给大家分享一下C语言数据结构之队列怎么定义与实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、队列的性质上次我们...
    99+
    2023-07-02
  • C语言数据结构之栈与队列怎么相互实现
    本篇内容介绍了“C语言数据结构之栈与队列怎么相互实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、用对列实现栈题干要求:细节分析:队列是...
    99+
    2023-07-02
  • C语言数据结构算法基础之循环队列示例
    目录说明示例代码1. 首先定义结构体:2. 定义各种算法:3. 测试:4. 最后的结果:说明 循环队列是一种先进先出的,首尾相连的队列。 大致的结构如下图: 用数组来抽象的表示一下...
    99+
    2022-11-13
  • C语言数据结构之堆排序详解
    目录1.堆的概念及结构2.堆的实现2.1 堆的向下调整算法2.2 堆的向上调整算法2.3 建堆(数组)2.4 堆排序2.5 堆排序的时间复杂度1.堆的概念及结构 如果有一个关键码的集...
    99+
    2022-11-13
  • C语言数据结构之二叉树详解
    目录1. 树概念及结构1.1树概念1.2树的表示2. 二叉树概念及结构2.1概念2.2数据结构中的二叉树2.3特殊的二叉树2.4二叉树的存储结构2.5二叉树的性质3. 二叉树顺序结构...
    99+
    2022-11-13
  • C语言数据结构之二分法查找详解
    问题:在有序数组中查找给定元素的下标goal。 在查找一个数组元素的下标,可以用循环来解决,但是如果一个数足够大,比如说手机的价格,用循环来查找,就相当于叫一个人猜,从0开始,需要猜...
    99+
    2022-11-13
  • C语言数据结构之单链表存储详解
    目录1、定义一个链表结点2、初始化单链表3、输出链表数据4、完整代码如果说,顺序表的所占用的内存空间是连续的,那么链表则是随机分配的不连续的,那么为了使随机分散的内存空间串联在一起形...
    99+
    2022-11-13
  • C语言数据结构之单链表操作详解
    目录1、插入操作2、删除操作3、查找操作4、修改操作5、完整代码1、插入操作 (1)创建一个新的要插入的结点 (2)将新结点的 next 指针指向插入位置后的结点 (3)将插入位置前...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作