当前位置: 首页 > news >正文

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

目录

  • 1.队列的概念及结构
  • 2.队列的代码实现

正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站。

1.队列的概念及结构

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。
在这里插入图片描述
队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低

2.队列的代码实现

接口声明

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
typedef int QDataType;
// 链式结构:表示队列 
typedef struct QListNode
{struct QListNode* _next;QDataType _data;
}QNode;
// 队列的结构 
typedef struct Queue
{QNode* _front;QNode* _rear;
}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);

接口的实现

#define _CRT_SECURE_NO_WARNINGS 1
#include"Queue.h"
void QueueInit(Queue* q)
{assert(q);q->_front = NULL;q->_rear = NULL;}
void QueuePush(Queue* q, QDataType data)
{assert(q);if (q->_front == NULL){QNode* tmp = (QNode*)malloc(sizeof(QNode));tmp->_data = data;tmp->_next = NULL;q->_front = q->_rear = tmp;}else{QNode* tmp = (QNode*)malloc(sizeof(QNode));tmp->_data = data;tmp->_next = NULL;q->_rear->_next = tmp;q->_rear = tmp;}}
void QueuePop(Queue* q)
{assert(q->_front!=NULL);QNode *tmp=q->_front->_next;free(q->_front);q->_front = tmp;}
QDataType QueueFront(Queue* q)
{assert(q->_front);return q->_front->_data;}
QDataType QueueBack(Queue* q)
{assert(q->_rear);return q->_rear->_data;
}
int QueueSize(Queue* q)
{QNode* tmp = q->_front;int num = 0;while (tmp){num++;tmp = tmp->_next;}return num;}
bool QueueEmpty(Queue* q)
{return q->_front == NULL;}
void QueueDestroy(Queue* q)
{QNode* tmp = q->_front;while (tmp){QNode* next = tmp->_next;free(tmp);tmp = next;}}

结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

http://www.lryc.cn/news/227865.html

相关文章:

  • Android---屏幕适配的处理技巧
  • vmware workstation 与 device/credential guard 不兼容
  • 第7章-使用统计方法进行变量有效性测试-7.2.1-单因素方差分析
  • 黑客技术-小白学习手册
  • 用示波器测量高压电
  • AQS中Node状态
  • STM32 寄存器配置笔记——GPIO配置输出
  • Spring boot 整合grpc 运用
  • C++ 模板保姆级详解——template<class T>(什么是模板?模板分哪几类?模板如何应用?)
  • uni.getLocation() 微信小程序 线上获取失败
  • Pytorch损失函数、反向传播和优化器、Sequential使用
  • css:两个行内块元素和图片垂直居中对齐
  • 从0开始python学习-34.pytest常用插件
  • 初始MySQL(二)(表的增删查改)
  • SLAM从入门到精通(SLAM落地的难点)
  • 通过内网穿透快速搭建公网可访问的Spring Boot接口调试环境
  • 职业迷茫,我该如何做好职业规划
  • 数据结构----顺序栈的操作
  • web3 React Dapp书写订单 买入/取消操作
  • C++学习---信号处理机制、中断、异步环境
  • 机器学习——奇异值分解案例(图片压缩-代码简洁版)
  • 【Go入门】面向对象
  • Asp.Net Core 中使用配置文件
  • 深入理解JVM虚拟机第二十四篇:详解JVM当中的动态链接和常量池的作用
  • QGridLayout
  • 万能在线预约小程序系统源码 适合任何行业在线预约小程序+预约到店模式 带完整的搭建教程
  • Leetcode 2935. Maximum Strong Pair XOR II
  • [直播自学]-[汇川easy320]搞起来(4)看文档 查找设备(续)
  • WebSphere Liberty 8.5.5.9 (四)
  • UE特效案例 —— 角色刀光