C语言实现队列(链表)

c语言实现多线程下的链表队列 项目中需要一个链表,线程A进行入队操作,线程B进行查询出队操作,同时不希望线程B在队列为空时阻塞,降低cpu负载,因此考虑用pthread_cond_wait进行实现: 主要实现功能: 1)出队和入队的加锁 2)当有元素入队时唤醒线程B 3)队列为空时线程B进入休眠 阅读详情

C语言实现队列

 

原理:

  • 通过单链表实现的队列,队列就是一个尾插头删的单链表,先实现一个链表 ,再实现一个队列包括队头指针和队尾指针
  • 图在这里插入图片描述

头文件

#ifndef Queue_h
#define Queue_h

#include <stdio.h>

typedef int QDataType;		//数据类型

typedef struct ListNode		//通过链表实现的
{
    QDataType _data;
    struct ListNode* _pNext;
}ListNode,*pListNode;

typedef struct Queue
{
    pListNode _pHead;		//头指针
    pListNode _pTail;		//尾指针
}Queue;

void QueueInit(Queue* q);		//初始化
void QueuePush(Queue* q, QDataType d);//进队列(尾插)
void QueuePop(Queue* q);		//出队列(头删)
int QueueSize(Queue* q);		//求队列大小
int QueueEmpty(Queue* q);		//队列判空
QDataType Front(Queue* q);		//获取队头元素
QDataType Back(Queue* q);		//获取队尾元素

#endif /* Queue_h */

源文件

#include "Queue.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

pListNode BuyNode(QDataType d)
{
    pListNode new = malloc(sizeof(ListNode));
    new->_data = d;
    new->_pNext = NULL;
    return new;
}

void QueueInit(Queue* q)
{
    assert(q);
    q->_pHead = BuyNode(0);
    q->_pTail =q->_pHead;
}

void QueuePush(Queue* q, QDataType d)
{
    assert(q);
    q->_pTail->_pNext = BuyNode(d);
    q->_pTail = q->_pTail->_pNext;
    
}

void QueuePop(Queue* q)
{
    pListNode dNode = q->_pHead->_pNext;
    if (dNode)
    {
        q->_pHead->_pNext = dNode->_pNext;
        if (q->_pHead->_pNext == NULL) {
            q->_pTail = q->_pHead;
        }//如果只有一个元素,删完后ptail会悬空
        free(dNode);
    } 
}

int QueueSize(Queue* q)
{
    assert(q);
    pListNode pre = q->_pHead->_pNext;
    int count = 0;
    while (pre)
    {
        count++;
        pre = pre->_pNext;
    }
    return count;
}
int QueueEmpty(Queue* q)
{
    return NULL == q->_pHead->_pNext;
    
}
QDataType Front(Queue* q)
{
    return q->_pHead->_pNext->_data;
}
QDataType Back(Queue* q)
{
    return q->_pTail->_data;
}
c语言 链表实现队列 健全性很差,但是实现没问题。自己可以去补 #include<stdio.h> #include<malloc.h> #include<stdlib.h> //链表节点 typedef struct Link{ int val; struct Link *next; }link; //队列 typedef struct Que{ struct Link *front,*rear; }que; //初始化 void init(que *q){ q->fro 阅读详情

相关推荐

数组、链表、队列和栈,C语言实现

这一章主要学习数组和链表,并分别用数组和链表实现队列及栈的功能。 在学习C语言的时候,我们已经学习过了数组,那时对数组的操作主要是生成数组、对数组的元素赋值、读取数组中的元素等内容,并没有对数组中的元素进行删除、插入操作。在本章内容中,我们将对数组的其它方面进行讲解。链表是一个全新的概念,里面要用到指针。这是C语言的一个特色,也是比较难的一部分内容。 数组和链表是所有数据结构中最基础的两种,同时,它们也是队列、栈、以及以后要学习到的 (二叉) 树、堆、图、串 (我们不讨论串) 等数据结构的基础,几乎所有的算

wangeil007的博客 388

【数据结构】C语言队列(详解)

C语言实现队列,详细解读

weixin_65186652的博客 9554

C语言:使用链表实现队列

在本文中,我们将学习如何使用 C 语言中的链表实现队列数据结构。使用链表意味着我们将按照队列规则以节点的形式存储信息。队列规则说插入发生在一端,删除发生在另一端,即先进先出 (FIFO)。队列是一种遵循先进先出原则 (FIFO) 的线性数据结构。队列支持排队和取消排队等操作。它可以使用数组和链表来实现。在数组上使用链表实现队列的好处是,它允许根据要求增加队列,即可以动态分配内存。什么是队列?

新华编程特战队 191

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

首先,我们需要定义的是链式结构的队列,即单链表为底层实现的。所以需要定义单链表结构来存储数据。然后,定义队列,队列里需要定义两个指向单链表的指针,一个是指向单链表头结点的指针,另一个则用来保存尾结点地址的指针。最后,还需定义一个记录当前队列元素个数的变量,用于遍历队列和判空。int size;} Queue;

sinzz的博客 3783

UE4入门实例17(Unreal制作卡通Post Process材质球)

效果展示 #1 创建Post Porcess材质球 #2 编写Shader功能 #3 设置场景区域内风格化渲染 #1 创建Post Porcess材质球 #2 编写Shader功能 创建基础效果 移除现有通道渲染 设置视图渲染范围 #3 设置场景区域内风格化渲染 #4 加群下载Shader源码:284105567 ...

Unity3d 攻城师一枚 1345

SSL证书验证:VMware Horizon Client的安全隐患与临时解决方案

本文深入分析了VMware Horizon Client中SSL证书验证失败的安全隐患,提供了临时解决方案与长期防御策略。针对自签名证书、证书链断裂等常见问题,文章详细解析了风险成因,并给出分级响应方案,帮助企业平衡安全与效率。通过实战案例和自动化脚本,指导IT管理员构建主动防御体系,有效降低中间人攻击风险。

weixin_29290863的博客 337

C语言 队列

数组队列长度 -- 根据数组长度决定。链表队列长度 -- 根据电脑内存决定。

againknow的博客 818

CSIT883系统分析与项目管理——Lecture3重点概念

🎈本节课,介绍了项目集成管理当中,关于NPV这个概念相关的内容,以及介绍什么是系统需求,什么时候需要开始系统需求,如何进行调查系统需求等等相关的题目,这里供大家复习参考吧!还有还有最关键的是NPV的计算,我单独写一篇博文,需要的同学快去学习吧!

AI手套的博客 1090

队列(C语言实现)

1.1 定义:队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头int front;int rear;}QueNode;int size;}Queue双端队列是指允许两端都可以进行入队和出队操作的队列。其元素的逻辑结构仍是线性结构。将队列的两端称为前端和后端,两端都可以入队和出队。

m0_59311392的博客 4255

手把手教你学PCIE(5.1)--pcie固件初始化的硬件初始化

PCIe 固件初始化的硬件初始化是一个复杂但至关重要的过程。通过正确配置 PCIe 控制器和相关硬件,可以确保系统的稳定性和性能。以上步骤和示例代码提供了一个基本的框架,实际开发中可能需要根据具体的硬件和需求进行调整和优化。

MHD0815的博客 1688

STM32Cube高效开发教程<高级篇><FreeRTOS>(一)-----FreeRTOS基础

一、 FreeRTOS概述声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。写在前面:今天就算正式开始高级篇的博客编写了,我本人也是第一次学习FreeRTOS,所以整体的进度会比较慢,博客更新可能不太会及时,希望大家原谅。一、 FreeRTOS概述。

我的博客 1844

C语言---队列(详解)---数据结构

队列所需要的头文件 先给类型重命名 意义前几篇有讲 队列要用到的两个结构体 第一个结构体里面有 1.存储数据的 a 2.指向下一个节点的指针 重命名为Queue(这里的名字需要记一下,等会需要分辨两个结构体,结构体两个的功能是不一样的) 第二个结构体里面有 1.指向头的头指针 2.指向尾的尾指针 重命名尾Qnene 队列实现的函数功能有: 1.初始化队列 2.队尾入数据 3.队头出数据 4.获取队列的有效元素个数 5.判断队列是否为空 6.获取队列头部数据7.获...

烁岩的博客 7658

SAP Joule 经过了超过 2.5 亿行 ABAP 代码的训练之后......

披露的统计数据,Joule 提供的这种全新系统交互方式,可将事务性任务执行速度提高 90%,访问 SAP Help Portal 内容的速度提高 95%。在 ABAP 应用开发领域,SAP 官网数据显示,Joule 经过超过 2.5 亿行 ABAP 代码的训练,有信心成为这一领域行业领先的代码助手。刚刚过去的 SAP 蓝宝石大会上,SAP 提到,从2023年第四季度以来,SAP 已经交付了 50 项基于人工智能的创新。让其生成 SAP 应用能够识别的结构化应用数据,业务用户全程无需离开 SAP 应用程序。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 792

用链表实现的C语言队列

C语言链表实现队列

Broken_x的博客 3232

YOLOv13有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

《YOLOv13改进专栏重磅更新》推出500+创新改进方案,涵盖卷积、主干网络、注意力机制、检测头等核心模块优化。专栏提供完整项目代码及答疑服务,包含YOLOv13网络结构解析、环境配置、模型训练全流程指导。内容分为八大模块:卷积优化、注意力机制、细节涨点、主干网络改进、特征融合、检测头优化、小目标检测及Mamba联合改进等,支持多种创新点组合应用,助力科研论文发表。现开放限时订阅,提供试读章节和详细技术解析。

Ai缝合怪、助力小伙伴高效发论文 3378

告别手动读摘要!爬虫+大模型做学术助手:爬知网论文,10秒生成摘要+关键词(附完整代码)

知网的官方摘要往往冗长(200-300字),关键词可能不够精准,用大模型提炼“100字精简摘要”和“3-5个核心关键词”,更适合快速筛选文献。这套学术助手的核心价值,是把“找论文、读摘要、提关键词”这些重复劳动,交给爬虫和大模型自动化完成,让科研人从繁琐的文献整理中解放出来,把时间花在实验设计、数据分析等核心工作上。需要注意的是:爬取知网论文仅用于个人科研和学习,不得用于商业用途,遵守知网的用户协议和版权规定;大模型生成的摘要和关键词需后续核对原文,确保准确性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1942

c语言——链表队列的实现

c语言——链表队列的实现 头文件 #pragma once #include<stdlib.h> //链表结点的数据类型 struct QueueNode { struct QueueNode *next; }; //链表数据类型 struct LQueue { struct QueueNode header; //头结点 int size; struct QueueNode *rear; //尾指针,始终指向链表的最后一个节点 }; typedef void* LinkQueu

mirana的专栏 363

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C语言链表实现队列全解析

本文介绍了C语言中使用链表实现队列的方法。队列作为FIFO(先进先出)数据结构,其链表实现克服了数组固定大小的限制,提供动态内存管理。文章详细讲解了队列节点结构设计、入队(O(1)时间)、出队(O(1)时间)等核心操作,并提供了完整的C代码实现,包括初始化、销毁等辅助函数。分析表明,链表队列虽存在额外指针开销,但具有动态扩展优势,适合任务调度等场景。最后建议在实际项目中优先采用链表实现,同时推荐探索循环队列等其他实现方式。

lst1314_520的博客 548

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【C语言】链表实现队列

【C语言】链表实现队列 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> typedef struct Node { int data; struct Node *next; } Node, *Queue; typedef struct { Queue front; Queue rear; } LinkQueue;

weixin_48650766的博客 425

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

链表实现队列 c语言

#include #include #include #define Data_Type int typedef struct Node{ Data_Type data; struct Node * pNext; }NODE,*PNODE; typedef struct LinkQueue{ //first node PNODE front; //lash node PNODE r

坨之家 1053

双向链表实现队列c语言,单向链表、双向链表,栈,队列的C语言的实现方法

以下是单向链表、双向链表,栈,队列的C语言的实现方法,只包含简单的插入删除操作1,单向链表的插入,删除,逆序操作#include #include typedef struct Node{int key;struct Node* next;}* node;node newNode(int k){node n=(node)malloc(sizeof(node));n->key=k;n->...

weixin_39744554的博客 593

C语言实现简单的链表队列

#include <stdlib.h> #include <string.h> #include <stdio.h> #define SIZE (4) // 节点 typedef struct sNode { struct sNode *prev; // 前指针 unsigned char data[SIZE]; // 数据 struct sNode ...

weixin_40311850的博客 505

队列的链表实现(C语言)

队列 为了阅读方便和保持内容的完整性,这部分使用了队列的数组实现(C语言)中的内容 队列是一种允许在一端(队尾,rear)进行插入操作,另一端(队头,front)进行删除操作的数据结构。 插入:在队尾进行,也称为入队 删除:在队头进行,也称为出队 队列的示意图如下: 队列只能在一端进行插入,另一端进行删除,从示意图可以看出,队列里的元素是按照入队的顺序出队的(因此队列经常被用在排队等候类的应用中)。 根据队列的特征,队列也被称为先进先出(First In First Out,FIFO)列表。 队列的操

Jeaten 1189

数据结构实战:链表、栈与队列的C语言实现

本文详细介绍了链表、栈和队列的C语言实现方法。重点讲解了单链表的结构定义、初始化以及插入(头插法、尾插法、中间插入)和删除操作,分析了各种操作的时间复杂度。文章还对比了链表与数组的优缺点,强调了链表在动态内存管理方面的优势。通过代码示例展示了链表操作的关键技术点,包括结构体定义、指针操作和内存管理,为后续栈和队列的实现奠定了基础。

今天比昨天更努力一点! 1万+

C语言:链表实现队列(queue)

先到先得,后到后得是队列得核心思想。文章也是这样,先看此文章的人当然先学会啦!

weixin_50711484的博客 1174

c语言链表队列max,C语言数据结构链表队列的实现

C语言数据结构链表队列的实现1.写在前面队列是一种和栈相反的,遵循先进先出原则的线性表。本代码是严蔚敏教授的数据结构书上面的伪代码的C语言实现代码。分解代码没有包含在内的代码如下:#include #include #define OK 1#define ERROR 0typedef int QElemtype;typedef int status;2.代码分解2.1对队列和节点的结构定义type...

weixin_39690105的博客 157
上一篇: c语言实现单链表
Ruichen_L
博客等级 码龄9年 5粉丝 25原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值