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

【数据结构——队列的实现(单链表)】

数据结构——队列的实现(单链表)

  • 一.队列
    • 1.1队列的概念及结构
  • 二.队列的实现
    • 2.1 头文件的实现——(Queue.h)
    • 2.2 源文件的实现—— (Queue.c)
    • 2.3 源文件的实现—— (test.c)
  • 三.队列的实际数据测试展示
    • 3.1正常出队列入队列
    • 3.2 入队列的同时存在出队列

一.队列

1.1队列的概念及结构

在这里插入图片描述

二.队列的实现

2.1 头文件的实现——(Queue.h)

Queue.h
#pragma once#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>typedef int QDataType;
typedef struct QueueNode
{QDataType val;struct QueueNode* next;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;//初始化/销毁
void QueueInit(Queue* pq);
void QueueDestroy(Queue* pq);//出队/入队
void QueuePush(Queue* pq, QDataType x);
void QueuePop(Queue* pq);
//获取队头元素/队尾元素
QDataType QueueFront(Queue* pq);
QDataType QueueBack(Queue* pq);
//判空/统计队列元素个数
bool QueueEmpty(Queue* pq);
int QueueSize(Queue* pq);

2.2 源文件的实现—— (Queue.c)

Queue.c
#include"Queue.h"//初始化/销毁
void QueueInit(Queue* pq)
{assert(pq);pq->phead = pq->ptail = NULL;pq->size = 0;
}
void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->phead;while (cur){QNode* Next = cur->next;free(cur);cur = Next;}pq->phead = pq->ptail = NULL;pq->size = 0;
}//队尾入队/队首出队
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* Newnode = (QNode*)malloc(sizeof(QNode));if (Newnode == NULL){perror("malloc fail");return;}Newnode->val = x;Newnode->next = NULL;if (pq->phead == NULL){pq->phead = pq->ptail = Newnode;}else{pq->ptail->next = Newnode;pq->ptail = pq->ptail->next;}pq->size++;
}
void QueuePop(Queue* pq)
{assert(pq);assert(pq->phead);QNode* del = pq->phead;pq->phead = pq->phead->next;free(del);del = NULL;if (pq->phead == NULL)pq->ptail = NULL;pq->size--;}//获取队头元素/队尾元素
QDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->phead);return pq->phead->val;
}
QDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->ptail);return pq->ptail->val;}
//判空/统计队列元素个数
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->phead == NULL;
}
int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}

2.3 源文件的实现—— (test.c)

test.c
#include"Queue.h"int main()
{Queue S;QueueInit(&S);QueuePush(&S, 1);QueuePush(&S, 2);printf("%d ", QueueFront(&S));QueuePop(&S);QueuePush(&S, 3);QueuePush(&S, 4);printf("%d ", QueueFront(&S));QueuePop(&S);QueuePush(&S, 5);while (!QueueEmpty(&S)){printf("%d ", QueueFront(&S));QueuePop(&S);}QueueDestroy(&S);
}

三.队列的实际数据测试展示

1.出入队列的方式:队尾进入,对首出队列。
2.出队列和入队列的关系是:一对一的。

3.1正常出队列入队列

在这里插入图片描述

3.2 入队列的同时存在出队列

在这里插入图片描述

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

相关文章:

  • 《LeetCode力扣练习》代码随想录——链表(移除链表元素---Java)
  • linux 安装 mini conda,linux下安装 Miniconda
  • 机器人 Null impedance(零阻抗)梳理
  • MDM9205开发环境搭建与编译调试
  • Linux操作系统使用及C高级编程-D3Linux shell命令(权限、输入输出)
  • 无线充,大功率小家电,智能家居,无人机快速充电等产品供电 LDR6328S芯片TYUPE-C PD诱骗电压 USB-C解决PD电源取电问题
  • 2023数字科技生态大会-数字安全论坛 学习笔记
  • 玩转ChatGPT:ARIMA模型定制GPT-1.0
  • CSDN每日一题学习训练——Java版(字符串相乘、子集、删除链表的倒数第 N 个结点)
  • PostgreSQL 判断JSONB数组是否包含特定的元素
  • idea中搭建Spring boot项目(借助Spring Initializer)
  • acwing算法基础之搜索与图论--染色法判断二分图
  • 塔式服务器是什么服务器?
  • nodejs+express接口全局拦截和环境变量设置
  • 深度学习之基于YoloV5的目标检测和双目测距系统
  • 如何显示标注的纯黑mask图
  • 【算法每日一练]-图论(保姆级教程 篇1(模板篇)) #floyed算法 #dijkstra算法 #spfa算法
  • c语言数据结构---十字链表
  • 使用python电脑轻量级控制手机—adb命令和手机投屏
  • VBA技术资料MF82:替换文件夹中文件名中的字符
  • 如何利用大模型蒸馏出小模型实现降本
  • CentOS 中启动 Jar 包
  • 法治智能起航 | 拓世法宝AI智慧政务一体机重塑法治格局,开启智能司法新篇章
  • 【华为云IaaS基础三件套之----计算ECS、网络EIP、存储EVS】
  • c语言数据结构---广义表
  • 2023.11.12使用flask对图片进行黑白处理(base64编码方式传输)
  • MATLAB中Filter Designer的使用以及XILINX Coefficient(.coe)File的导出
  • js 深度学习(四)
  • leetcode刷题日记:121. Best Time to Buy and Sell Stock( 买卖股票的最佳时机)
  • Mac 本地部署thinkphp8【部署环境以及下载thinkphp】