首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用链表实现的C语言入队

是一种常见的队列数据结构操作。队列是一种先进先出(FIFO)的数据结构,类似于现实生活中排队的概念。

链表是一种动态数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。使用链表实现队列的入队操作可以通过在链表尾部添加新节点来实现。

以下是使用链表实现的C语言入队的示例代码:

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构
typedef struct Node {
    int data;
    struct Node* next;
} Node;

// 定义队列结构
typedef struct Queue {
    Node* front;
    Node* rear;
} Queue;

// 初始化队列
void initQueue(Queue* queue) {
    queue->front = NULL;
    queue->rear = NULL;
}

// 入队操作
void enqueue(Queue* queue, int data) {
    // 创建新节点
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;

    if (queue->rear == NULL) {
        // 队列为空,新节点既是队头又是队尾
        queue->front = newNode;
        queue->rear = newNode;
    } else {
        // 将新节点添加到队尾
        queue->rear->next = newNode;
        queue->rear = newNode;
    }
}

// 打印队列元素
void printQueue(Queue* queue) {
    Node* current = queue->front;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}

int main() {
    Queue queue;
    initQueue(&queue);

    // 入队操作
    enqueue(&queue, 1);
    enqueue(&queue, 2);
    enqueue(&queue, 3);

    // 打印队列元素
    printQueue(&queue);

    return 0;
}

上述代码中,我们首先定义了一个链表节点结构和队列结构。然后,通过initQueue函数初始化队列。enqueue函数用于将新元素入队,它会创建一个新节点,并将其添加到队列的尾部。printQueue函数用于打印队列中的所有元素。

使用链表实现的C语言入队操作具有以下特点:

  • 灵活性:链表的动态性使得队列的大小可以根据需要进行扩展或缩小。
  • 内存效率:链表只在需要时分配内存,相比于静态数组,可以更好地利用内存。
  • 时间效率:入队操作的时间复杂度为O(1),即常数时间。

链表实现的C语言入队适用于需要频繁进行入队操作的场景,例如任务调度、消息传递等。

腾讯云提供了多种云计算相关产品,其中与队列相关的产品是消息队列 CMQ(Cloud Message Queue)。CMQ 是一种高可靠、高可用、分布式的消息队列服务,可以帮助用户实现应用解耦、异步处理、削峰填谷等功能。您可以通过以下链接了解更多关于腾讯云消息队列 CMQ 的信息:消息队列 CMQ 产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言链表使用链表实现原理

链表是什么? 1.逻辑结构上⼀个挨⼀个数据,在实际存储时,并没有像顺序表那样也相互紧挨着。恰恰相 反,数据随机分布在内存中各个位置,这种存储结构称为线性表链式存储。...2.由于分散存储,为了能够体现出数据元素之间逻辑关系,每个数据元素在存储同时,要 配备⼀个指针,⽤于指向它直接后继元素,即每⼀个数据元素都指向下⼀个数据元素 ** 本身信息,称为“数据域”...下面是一个单链表实现过程 #include #include #include //结构体是⼀种⼯具,⽤这个⼯具可以定义⾃⼰数据类型 typedef struct...Student Stu; struct tagNode *pNext; } Node; //定义链表第...⼀个学⽣,即学⽣单链表头结点 Node *head = NULL; void printfNode() //遍历元素

96710

C语言链表详解_c语言链表使用

链表是一种常见基础数据结构,结构体指针在这里得到了充分利用。...链表可以动态进行存储分配,也就是说,链表是一个功能极为强大数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示,存放是一个地址。...链表节点分为两类,头结点和一般节点,头结点是没有数据域链表中每个节点都分为两部分,一个数据域,一个是指针域。...作为有强大功能链表,对他操作当然有许多,比如:链表创建,修改,删除,插入,输出,排序,反序,清空链表元素,求链表长度等等。...下面是一个传入链表和要修改节点,来修改值函数。

4.2K10

C语言链表实现

我尝试用最简单语言与代码来描述链表,事实上它本身也很简单 静态单链表实现 下面一部分讨论都将围绕上面这幅图片展开,既然是逐步实现,我不考虑在开头就让这个单链表完美实现,它将只有两个部分:链表创建...用来指向这个链表第一个节点 node *f=new node;//对应上图第一个节点first node,这种奇葩命名法不是我要让你们学会,另我使用了new而不是malloc主要是因为惰性...("pause"); } 上面就完成了使用尾插法创建一个链表及其简单操作包括创建/输出/插入/删除,不过如你所见它也存在许多不足,比如命名拙计,new后没有delete,以及全部在main中执行没有考虑使用函数等等缺陷...这个疑问你可以自己解答比较好 动态单链表实现 到这里一个简单链表就已经实现了,但是我们还需要继续改进,因为我们有时候不知道每个节点储存数据,所以我们就需要一个动态链表了,下面这个将实现把用户输入数据以链式结构储存...; node *tail=c; a->data=9; a->next=b; a->pre=NULL; b->data=17; b->next=c; b->pre=a; c->data

5.4K30

c语言 | 单链表实现

今天分享是单链表。准确说,单链表不算是C语言内容,而是属于数据结构内容,因为它没有新知识点,只是利用了结构体和指针等知识。...但是它在C语言中应用还是很广泛,在RTOS中,也是非常多地方使用到了链表。今天暂时说一下单链表实现和简单应用,下一节当中再介绍双链表。 首先,要对单链表有个概念。...说明:在本次实验中,使用是vscode编辑器,编译环境是gcc,不建议使用VC6.0,因为VC6.0使用c语言标准太老了,很多语法都不支持,并且,VC6.0使用体验极差,没有代码高亮功能等等。...所以,推荐使用vscode编辑器,也可以使用windows自带编译器,打开cmd终端,使用gcc命令编译.c文件,生成.exe可执行文件后执行即可。...再测试其他情况,也都没有问题,说明我们代码实现了预定目标。

2K30

C语言实现链表

文章目录 单链表常规操作 定义单链表结构体 构造单链表 头插法实现 尾插法实现链表头尾插法详解 单链表判空 计算单链表长度 遍历单链表链表头、尾插法构造效果 单链表指定位置插入结点 单链表指定位置删除结点...) }*LinkList, Node; 构造单链表 头插法实现 /* * 头插法创建单链表(带头结点) * datas 接收数组,用于赋值链表结点数据 * len datas数组长度,便于遍历...尾插法实现 /* * 尾插法创建单链表(带头结点) * datas 接收数组,用于赋值链表结点数据 * len datas数组长度,便于遍历 */ LinkList CreateHeadListT...单链表指定位置插入结点 代码实现 /* * 单链表指定位置插入结点 * list 单链表 * data 要插入结点数据 * pos 结点插入位置(逻辑位置(1,2,3,...)) */...():5 Travel():2 4 8 6 12 源代码 源代码已上传到 GitHub Data-Structure-of-C,欢迎大家下载 C语言实现数据结构

1.9K41

C语言之单链表实现以及链表介绍

针对以上顺序表中存在问题,有人就设计出了链表这一结构。下面我将就链表中结构最简单链表做一个详细介绍。...二、链表介绍 2.1链表概念和结构 概念:链表是一种物理存储结构上非连续、非顺序存储结构,数据元素逻辑顺序是通过链表指针链接次序实现 。...结构:链表逻辑图和物理图结合  从上图我们可以看出:链表每一个结点都包含数据域和指针域,头结点存储是第一个节点地址,最后一个节点指针域为空指针。...2.2链表分类 1.单向或双向 2.带头或不带头 3.循环或非循环 虽然有这么多链表结构,但是我们实际中最常用还是两种结构: 三、单链表实现 见以下代码: #pragma once #include...当你需要对链表进行修改时,参数就需要传二级指针。如果需要对链表进行修改而你传参用是一级指针,那么就相当于是形参重新开辟了一块空间来存放传过来一级指针中值。

7810

C语言实现链表队列LinkQueue

- Node:节点 - xLinkQueue:节点控制器 -- head:总是指向队列头 -- end:总是指向队列尾 - 创建队列时,实际是创建了xLinkQueue,之后对队列操作都是通过它 -...添加节点时,创建Node,并将内容复制进它buff中 - 弹出队列时,将Node中内容先复制出来,在free释放内存 - 不是循环队列,有待改进 - 单个节点buff最大不超过(1024*3),...如queueCreate(20, 1024*3);(不知道为什么,在我STM32F4上申请1024*4失败) util.c /** 工具包 */ #include "util.h" static...EMPTY", "None", "Malloc"}; enum QUEUE_STATE { QUEUE_OK = 0, QUEUE_OVERSIZE, QUEUE_OVERLENGTH, // 超过最大使用节点数...(已使用多少个节点) uint8_t size; // 每个节点buff大小 uint16_t max; // 队列最大节点数(最多使用多少个节点) }xLinkQueue; void

78440

单向循环链表-链表(单链表基本操作及C语言实现

; } return p; }   链表中查找某结点一般情况下,链表只能通过头结点或者头指针进行访问,所以实现查找某结点最常用方法就是对链表结点进行逐个遍历。   ...,都使用相同插入手法。...i=1; inext; } //创建插入结点c link * c=(link*)malloc(sizeof(link)); c->elem=elem; //向链表中插入结点 c->next=temp...从链表中删除节点当需要从链表中删除某个结点时,需要进行两步操作:   使用malloc函数申请空间,一定要注意手动free掉。...:链式存储数据元素在物理结构没有限制,当内存空间中没有足够大连续内存空间供顺序表使用时,可能使用链表能解决问题。

83230

数据结构——链表游标实现(C语言)

上一篇博文我们用指针实现链表,但是诸如BASIC和FORTRAN等许多语言都不支持指针。如果需要链表而又不能使用指针,这时我们可以使用游标(cursor)实现法来实现链表。...在链表实现中有两个重要特点: 数据存储在一组结构体中。每一个结构体包含有数据以及指向下一个结构体指针。...一个新结构体可以通过调用malloc而从系统全局内存(global memory)得到,并可以通过free而被释放。 游标法必须能够模仿实现这两条特性 。...Advance( const Position P ); ElementType Retrieve( const Position P ); #endif /*_CUrsor_H */ 可以从上面的代码上看到,链表游标实现链表接口定义几乎是一样...: %d\n", IsEmpty(L)); printf("Hello World\n"); return 0; } 实现过程比较简单,最后main函数是对游标链表测试。

2.4K20

C语言链表:定义、操作与实现

C语言链表C语言中,链表可以通过结构体和指针来实现。结构体可以存储结点数据域和指针域,而指针则可以实现结点之间连接。...traverseList(head); deleteNode(&head, 2); printf("\n"); traverseList(head); return 0; } 以上就是C语言链表定义...链表是一种非常重要数据结构,广泛应用于许多算法和程序中。了解链表可以帮助我们更好地理解和使用这种数据结构。链表中指定结点。...在C语言中,我们可以通过结构体和指针来实现链表,并定义相关函数来支持链表各种操作。在实际应用中,链表可以用来实现队列、栈等数据结构,也可以用来实现其他应用,如链表排序等。...总之,链表是一种重要数据结构,在C语言编程中有着广泛应用。通过学习和练习,可以深入理解链表实现原理和应用场景,提高编程能力。

1.5K30

C语言-链表(单向链表、双向链表)

链表结构介绍 在前面章节已经学习了数组使用,数组空间是连续空间,数组大小恒定,在很多动态数据存储应用场景下,使用不方便;而这篇文章介绍链表结构,支持动态增加节点,释放节点,比较适合存储动态数据应用场景...链表节点是不连续,需要通过每个节点指针,来找到上一个节点或者下一个节点地址。...案例: 单向链表创建与使用 下面例子采用函数封装形式编写,每个功能都使用子函数实现。...实现功能如下: 初始化链表头 插入节点函数(链表任意位置插入,链表尾插入) 删除节点函数(链表任意位置删除、链表尾删除) 遍历链表,输出链表所有信息 #include #include...案例: 创建双向链表循环,实现插入、删除、遍历 双向链表在每个节点里新增加了一个指针,用于保存上一个节点地址,现在节点里一个用两个指针,一个保存上一个节点地址,一个保存下一个节点地址。

2K30
领券