系列文章目录

数据结构——顺序表的C语言代码实现
数据结构——八种链表的C语言代码实现
数据结构——栈的C语言代码实现
数据结构——队列的C语言代码实现
数据结构——堆的C语言代码实现

文章目录

  • 系列文章目录
  • 前言
  • 一、基础知识
    • 队列的概念(queue)
  • 二、代码实现
    • 1.queue.h
    • 2.queue.c
      • 3.test.c
  • 总结

前言

主要实现链式队列。


提示:以下是本篇文章正文内容,下面案例可供参考

一、基础知识

队列的概念(queue)

援引百科:
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

基于对链表和栈的熟悉,我们可以较为容易认识到队列的特点。
通俗而言:队列是一种较之栈更为公平的结构,它实现了先进先出多的功能。 可以将其比作银行的排队队列,我们只能在人群的末尾排队,在人群的最前端接受服务。

二、代码实现

1.queue.h

注意为了方便在尾部和头部进行操作,我们可以设置头尾指针。对于两个需要设置的指针,如果不想使用全局变量,可以将两个指针结合为一个结构体 ,便于操作。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#include<assert.h>typedef int DataType;
//定义队列
typedef struct QueueNode
{DataType data;struct QueueNode* next;
}QNode;
//设置头尾指针
typedef struct PQueue
{QNode* head;QNode* tail;
}PQueue;//初始化
void QueueInit(PQueue* pq);
//删除队列
void QueueDestroy(PQueue* pq);
//尾插
void QueuePush(PQueue* pq, DataType data);
//头删
void QueuePop(PQueue* pq);
//头结点
DataType QueueFront(PQueue* pq);
//尾节点
DataType QueueBack(PQueue* pq);
//判读队空
bool QueueEmpty(PQueue* pq);
//打印队列
void PrintQueue(PQueue* pq);

2.queue.c

代码如下(示例):

#include"Queue.h"
//初始化
void QueueInit(PQueue* pq)
{pq->head = NULL;pq->tail = NULL;
}
//删除队列
void QueueDestroy(PQueue* pq)
{QNode* p = pq->head;while (p!= NULL){QNode* tem = p->next;free(p);p = tem;}
}
//尾插
void QueuePush(PQueue* pq, DataType data)
{//确保队列初始化成功assert(pq);QNode* tem = (QNode*)malloc(sizeof(QNode));tem->data = data;if (pq->head == NULL){pq->head = pq->tail = tem;}else{pq->tail->next = tem;pq->tail = tem;}
}
//头删
void QueuePop(PQueue* pq)
{//确保队列不为空assert(pq);QNode* tem = pq->head->next;free(pq->head);pq->head = tem;
}
//头结点
DataType QueueFront(PQueue* pq)
{bool ret = QueueEmpty(pq);if (ret){printf("队列为空!\n");exit(-1);}return pq->head->data;
}
//尾节点
DataType QueueBack(PQueue* pq)
{bool ret = QueueEmpty(pq);if (ret){printf("队列为空!\n");exit(-1);}return pq->tail->data;
}
//判读队空
bool QueueEmpty(PQueue* pq)
{if (pq->head == NULL){return true;}elsereturn false;
}
//打印队列
void PrintQueue(PQueue* pq)
{bool ret = QueueEmpty(pq);if (ret){printf("队列为空!\n");return;}QNode* tem = pq->head;while (tem != pq->tail->next){printf("%d ", tem->data);tem = tem->next;}
}

该处使用的url网络请求的数据。

3.test.c

代码如下:

#include"Queue.h"
int main()
{PQueue pq;QueueInit(&pq);QueuePush(&pq, 1);QueuePush(&pq, 2);QueuePush(&pq, 3);QueuePush(&pq, 4);QueuePush(&pq, 5);QueuePop(&pq);PrintQueue(&pq);int ret = QueueFront(&pq);printf("\n%d ", ret);int tem = QueueBack(&pq);printf("\n%d ", tem);return 0;
}

总结

在熟练掌握线性表、链表和栈之后,队列的实现已十分简单。这篇文章只是简单地实现了队列,便于大家更好地理解和认识队列。

数据结构——队列的C语言代码实现相关推荐

  1. 数据结构-单循环链表(C语言代码)

    数据结构纯属新手,小白一枚,欢迎批评指正! 下面这个图是接下来要实现的单循环链表! 直接上代码OVO! 定义结构体 typedef struct Node {int data; //数据域struct ...

  2. 数据结构-单链表(C语言代码)

    数据结构纯属新手,小白一枚,欢迎批评指正! 直接上代码OVO! 定义结构体 typedef struct Node {int data; //数据域struct Node* next; //指针域 } ...

  3. 数据结构——队列的C语言实现

    1.什么是队列? 2.队列的抽象数据类型描述 3.队列之顺序表的C语言实现 #include<stdio.h> #include<stdlib.h>#define MaxSiz ...

  4. 重要的数据结构--队列(C语言实现)

    队列简称队,它也是一种操作受限的线性表,其限制为仅允许在表的一端进行插入操作,而在表的另一端进行删除操作. 把队列的结构类型定义及其基本算法做成头文件 头文件(如果把头文件和程序代码都放在一个工程里, ...

  5. 数据结构——队列(C语言实现)

    直接上代码 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct Node 5 { 6 int data; ...

  6. 数据结构 - 队列简介 及 1个简单的c语言链式队列代码实现

    1. 队列的定义 所谓队列(queue)就是一种能实现"先进先出"的一种线性存储结构. 跟栈有点类似,  例如栈只有1个出入口, 任何元素进入或者离开栈都必须经过同1个出入口(栈顶 ...

  7. 数据结构环形队列学习(c语言)

    数据结构环形队列学习(c语言) 实现效果 效果模型描述 代码设置队列长度为5,数组实际大小为6(队列长度加1) 黄色方格是队列头,灰色是未被使用内存,蓝色是队列元素 Example1: 当队列添加满元 ...

  8. 数据结构队列代码_代码简介:队列数据结构如何工作

    数据结构队列代码 Here are three stories we published this week that are worth your time: 这是我们本周发布的三个值得您关注的故事 ...

  9. 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...

    1.运行环境 这里说明一下这里所有的C语言代码都是基于code::blocks 20.03编译运行的.当然一些其他集成开发环境应该也是可以的,个人不太喜欢功能太过强大的IDE,因为那同样意味着相关设置 ...

最新文章

  1. Josephus Problem的详细算法及其Python, Java语言的实现
  2. 论文阅读 Current Solutions for Web Service Composition
  3. nginx 配置的server_name参数(转)
  4. SQL 实用基础代码
  5. 完美运动框架(js)
  6. java引用类型使用场景_下面有关java的引用类型,说法正确的有?
  7. C#-微信公众平台接口-上传临时素材
  8. python dataframe索引转成列_如何将 Pandas DataFrame 的索引转换为列
  9. 无序数组求第k大的数 python_【python刷题】寻找数组中第K大/小的数
  10. 离散数学杜忠复版答案_离散数学(第二版)课后习题答案详解(完整版)
  11. C++ Http下载文件
  12. 什么叫java方法重载?
  13. 【win+黑苹果双系统②】黑苹果设置开机启动+wifi
  14. 【转】欧姆龙FINS通讯命令实例详解
  15. docker安装shipyard
  16. 四年开发,待业半年本想放弃Java,抱着试试的心态面试某C轮金融科技公司居然过了!
  17. 华为“More Bits, Less Watts”新践行
  18. 老年人也能解决智能技术困难问题
  19. 每日一犬 · 猴头梗
  20. 如何使用抽象类和抽象方法

热门文章

  1. 什么是框架?框架的作用是什么?为什么要学习框架?
  2. Django REST Framework教程(10): 限流(throttle)详解与示例
  3. 单链表的前插法和后插法创建
  4. CRMEB新零售社交会员管理营销电商系统!
  5. Unity_2D点击破碎
  6. layui隐藏表格中的某一列
  7. 图信号处理基础------Foundations in Graph Signal Processing
  8. 内存地址、机器码与汇编指令的三角恋关系
  9. Oracle学习笔记(三)。连接查询。等值连接,非等值连接,自连接,LEFT OUTER JOIN,RIGHT JOIN,FULL JOIN,自然连接,内连接 INNERJOIN
  10. tomcat启动成功但是无法访问8080页面