c语言实现队列的创建
前言:
还是一如既往的欢迎大家啦!这一篇是为了简述本次实现队列的c语言操作,话不多说,我们直接入手吧!
队列的性质:
1.应用场景
队列是为了实现公平性或者合理性而存在的,实际的应用场景比如:排队 保持绝对公平性 和广度优先遍历 BFS
2.特点
队列的机制是先进先出,后进后出。可以说和栈完全相反的机制,那么根据这个机制,我们同样可以用数组或者链表来实现这个数据结构,但是由于我们要取头,相对于数组要扩展内存来说链表会更加适合一点,所以这次我用单链表来实现这个队列。
队列的实现:
1.队列函数的声明:
(下面的使用场景在vs2022)
//QListNode.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include <stdbool.h>//队列的实现 先进先出 后进后出
typedef int QDataType;
//使用链表进行实现 如果用数组的话不方便出列
typedef struct QListNode {//首先创建一个类似于单链表的结构
struct QlisNode* next;
QDataType x;}QNode;
//下面在定义一个结构体用来表示队列的结构 即队头和队尾
typedef struct Queue{
QNode* head;
QNode* tail;
}Queue;// 初始化队列
void QueueInit(Queue* q);// 队尾入队列
void QueuePush(Queue* q, QDataType data);// 队头出队列
void QueuePop(Queue* q);// 获取队列头部元素
QDataType QueueFront(Queue* q);// 获取队列队尾元素
QDataType QueueBack(Queue* q);// 获取队列中有效元素个数
int QueueSize(Queue* q);// 检测队列是否为空,如果为空返回非零结果,如果非空返回0
bool QueueEmpty(Queue* q);// 销毁队列
void QueueDestroy(Queue* q);
2.功能的实现:
//QListNode.c
#include"QListNode.h"
void QueueInit(Queue* q)
{
assert(q);
q->head = q->tail = NULL;}
void QueuePush(Queue* q, QDataType data)
{
assert(q);// 尾插 先创建一个节点
QNode* node = (QNode*)malloc(sizeof(QNode));
if (node == NULL)
{
printf("node :: malloc ┭┮﹏┭┮ 没有申请到内存哦~");
exit(-1);
}
node->next = NULL;
node->x = data;//第一次添加
if (q->tail == NULL)
{
q->head = q->tail = node;
}
else//正常尾插
{
q->tail->next = node;
q->tail = node;
}
}void QueuePop(Queue* q)
{
assert(q);
//判断数据是否是空
assert(!QueueEmpty(q));//第一种情况 只剩一个数据了
if (q->head == q->tail)
{
free(q->head);
q->head = q->tail = NULL;
}
else//第二种情况 正常弹出
{
QNode* next = q->head;
q->head = next->next;
free(next);
next = NULL;
}
}//输出头元素 即出列
QDataType QueueFront(Queue* q)
{
assert(q);
assert(!QueueEmpty(q));return q->head->x;
}
//输出尾元素
QDataType QueueBack(Queue* q)
{
assert(q);
assert(!QueueEmpty(q));return q->tail->x;
}//计算队列里的有效数据
int QueueSize(Queue* q)
{
int n = 0;
assert(q);QNode* p = q->head;
while (p != NULL)
{
p = p->next;
n++;
}return n;
}//判断数据是否为空
bool QueueEmpty(Queue* q)
{
assert(q);return q->head == NULL;
}//摧毁队列
void QueueDestroy(Queue* q)
{
assert(q);QNode* p = q->head;
while (p)
{
QNode* tmp = p;
p = p->next;
free(tmp);}
q->head = q->tail = NULL;}
好啦,以上就是队列的简易实现啦!谢谢!
c语言实现队列的创建相关推荐
- c语言建立队列(顺序队列、循化队列和链式队列)
c语言建立队列 一.顺序队列 队列的顺序存储结构 顺序队列的讨论 "下溢"现象 "真上溢"现象 "假上溢"现象 二.如何解决"假上 ...
- Swift3.0语言教程使用编码创建和初始化字符串
Swift3.0语言教程使用编码创建和初始化字符串 使用编码创建和初始化字符串 创建和初始化字符串除了可以使用上文中提到的方法外,还可以使用init(coder:)方法,此方法一般不常使用,其语法形式 ...
- Swift3.0语言教程使用指针创建和初始化字符串
Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例 ...
- Swift3.0语言教程使用字符串创建和初始化字符串
Swift3.0语言教程使用字符串创建和初始化字符串 Swift3.0语言教程使用字符串创建和初始化字符串,在编程语言中,字面值是很常见的数据描述形式.人们可以通过字面所表达的意思,获知其含义,尤其是 ...
- Linux下C语言编程-进程的创建
Linux下C语言编程-进程的创建 作者:hoyt 1.进程的概念 Linux操作系统是面向多用户的.在同一时间可以有许多用户向操作系统发出各种命令.那么操作系统是怎么实现多用户的环境呢?在现代的操作 ...
- C语言实现队列ADT(Queue ADT)接口COMP2521(附完整源码)
C语言实现队列ADT接口COMP2521 QueueRep结构体定义 node结构体定义 实现以下5个接口 完整头文件 完整源文件 QueueRep结构体定义 typedef struct Queue ...
- c语言二叉树的生成,C语言实现二叉树的创建以及遍历(递归)
C语言实现二叉树的创建以及遍历 #include typedef char ElemType; typedef struct BiTNode { ElemType data; struct BiTNo ...
- C语言的特点与创建的基本步骤是什么
C语言的特点与创建的基本步骤是: C 语言特点: 1.C语言是一种成功的系统描述语言,用C语言开发的UNIX操作系统就是一个成功的范例; 2.同时C语言又是一种通用的程序设计语言,在国际上广泛流行.世 ...
- 消息队列控制灯代码_代码实现RabbitMQ死信队列的创建
前言: 之前有写过死信队列的使用场景以及通过管控台创建死信.这次就通过代码实现死信队列的创建,同时也分享一下RabbitMQ封装的类. 准备: 1. 先准备一个死信队列(最后用来消费)的参 ...
最新文章
- 重磅发布!Google语义分割新数据集来啦!又一个分割SOTA模型
- Dynamips和Vmware完成CCVP试验(4)
- 实现 Android 应用在开机时自启动
- CISCO交换机如何删除 Vlan
- 彻底理解宽带信号在频域分解为窄带信号
- WebRTC 音视频开发之路
- Linux无法解析hosts里面绑定域名的排查方法
- POI 导出文件以文件流形式返回
- 炸窝Vector简介
- Jquery getJSON方法分析(二)
- Linux命令之乐--iconv
- iphone怎么换手机铃声?原来方法这么简单,只需要一招 iRingg
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
- [论文写作笔记] C11论文查重原理及降重
- DS1302时钟模块简单介绍
- 通达信版弘历软件指标_弘历主图指标详解 通达信指标
- hyper-v虚拟机驱动_如何在Hyper-V虚拟机中访问本地和USB硬盘驱动器
- url编码 java_java中的url 编码与解码
- 微信小程序实现tab切换
- 【Pytorch论文相关代码】使用SOLD2预训练好的模型检测与匹配线段(自己的数据集)
热门文章
- 话费充值接口文档接口版本:1.0
- nacos/nacos-server:v2.1.2-slim analysis
- (Java多线程常见面试题)ThreadLocal 是什么?有哪些使⽤场景?
- 苹果升级鸿蒙系统,华为正式官宣!首批鸿蒙系统正式版升级大名单出炉:这些用户有福了...
- WPS 批量替换word文字
- Android 面试经验 - 大厂 腾讯 面
- AutoCAD二次开发——框选
- iastora怎么改成ahci_系统重装|电脑硬盘IDE修改为AHCI模式教程
- 使用UnityWebRequest发送Post请求深度解析
- python调用java的方法