首页
学习
活动
专区
工具
TVP
发布

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...Node *head; // 队列头节点 uint8_t length; // 记录队列的长度(已使用多少个节点) uint8_t size; // 每个节点的buff的大小 uint16

76540

队列实现栈(C语言版本)

个人主页: :✨✨✨初阶牛✨✨✨ 强烈推荐优质专栏: C++的世界(持续更新中) 推荐专栏1: C语言初阶 推荐专栏2: C语言进阶 个人信条: 知行合一 前言 在做这个题目之前,应当熟悉栈和队列这两种数据结构....栈和队列都是常见的数据结构,它们是基于数组或链表实现的线性数据结构。...应用场景:实现程序调用的函数堆栈、表达式求值、括号匹配检验等。...一、题目介绍 题目来源于–力扣 题目链接:传送门 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。...代码实现: MyStack* myStackCreate() { MyStack* stack=( MyStack*)malloc(sizeof(MyStack));//开辟栈所占的空间(两个队列

13430
您找到你想要的搜索结果了吗?
是的
没有找到

C语言链表实现

我学数据结构的时候也是感觉很困难,当我学完后我发现了之所以困难时因为我没有系统的进行学习,而且很多教授都只是注重数据结构思想,而忽略了代码方面,为此我写了这些博文给那些试图自学数据结构的朋友,希望你们少走弯路 我尝试用最简单的语言与代码来描述链表...,事实上它本身也很简单 静态单链表实现 下面一部分的讨论都将围绕上面这幅图片展开,既然是逐步实现,我不考虑在开头就让这个单链表完美实现,它将只有两个部分:链表的创建&遍历链表输出 首先我们要知道一些简单的概念...因为我们可能还要利用head进行其他操作,如果直接head进行下面的操作,就意味着head指向的位置已经改变了 while(print_ptr!...这个疑问你可以自己解答比较好 动态单链表实现 到这里一个简单的链表就已经实现了,但是我们还需要继续改进,因为我们有时候不知道每个节点储存的数据,所以我们就需要一个动态链表了,下面这个将实现把用户输入的数据以链式结构储存...; node *tail=c; a->data=9; a->next=b; a->pre=NULL; b->data=17; b->next=c; b->pre=a; c->data

5.3K30

栈模拟实现队列(c语言版)

前言 "栈实现队列",力扣中一道oj题,可以帮助刚接触"栈"和"队列"的新手更好的理解栈和队列这两种结构....出队操作 } MyQueue; 这里是借助两个栈用于模拟队列. ①:stackpush 模拟队列的入队 ②:stackpop 模拟队列的出队 1.2 初始化(myQueueCreate): 该队列是由两个栈实现的...(myQueuePush) 对于入队列的模拟实现很简单,只需要将数据压入栈(模拟入队列:stackpush)即可. void myQueuePush(MyQueue* obj, int x) {...所以我们在实现myQueuePop函数时可以复用一下myQueuePeek函数. int myQueuePop(MyQueue* obj) { int top=myQueuePeek(obj);...,由于c语言不能像c++那样直接调用库. typedef int stacktype; typedef struct stack//定义栈的类型 { stacktype* data; int top

13310

LeetCode刷题(7)【栈&队列队列实现栈(C语言)

队列实现栈 225....队列实现栈 - 力扣(LeetCode) (leetcode-cn.com) 目的:队列实现栈,从先进先出——>先进后出, 1234这四个数据依次从队列1的队尾进入,要让4先出,一个队列是无法实现的...将123依次由队列2的队尾进入到队列2中,此时队列1中还剩一个4,将4弹出,同理,再将12依次进入到队列1中,将3弹出… 也就是说。 出数据把不为空的 队列数据向为空的队列中导,知道剩最后一个。...---- 队列实现——队列实现——【线性表】之队列_半生瓜のblog-CSDN博客 ---- typedef int QueueDataType; typedef struct QueueNode...{ struct QueueNode* next; QueueDataType data; }QueueNode; //单链表除了尾插还要尾删,所以不会加这个 typedef struct Queue

41210

数组和链表实现单向队列

队列 队列,是一种操作受限,先进先出的的线性表数据结构,其只有入队enqueue和出队dequeue两个操作。我们可以数组和链表实现队列数组实现的是顺序队列链表实现的是链式队列。...数组实现队列的逻辑 队列有两个指针,分别是队头指针head和队尾指针tail。队头的指针指向队列的头部。例如:我们定义一个大小为6的数组,然后,以及将 a,b,c,d 入队。...,此时,就可以进行数据的迁移,迁移的过程就是将位置为i的元素移动到 i-head上去搬移的操作如下图所示: 链表实现队列的逻辑 说完了通过数组实现的顺序队列,接下来我们来看看通过链表实现的链式队列。...a,b,c,d四个节点,此时,head指针指向a节点,tail 指向d节点。...总结 本文我们主要介绍了如何用数组和链表实现单向队列队列是一种操作受限先进先出的的线性表数据结构,其只有入队和出队操作。

44110

C语言实现队列

个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏: C语言进阶 个人信条: 知行合一 本篇简介:>:分享数据结构之C语言实现"队列".各个接口分别分析,讲解思路已经动图讲解....✨ 入队列:进行"插入"操作的一端称为队尾 出队列:进行"删除"操作的一端称为队头 顺序表还是链表实现队列比较好呢?...链表不需要扩容,顺序表需要动态扩容/ 综上,咱还是选择链表=实现队列吧!...(Queue* pq); 二、接口的具体实现: 2.1 "队列"的"初始化"操作(QueueInit) 队列的结构是由两个结点指针,加一个记录长度的size变量组成...."都是很重要的一种数据结构,在计算机中有很多应用,后续会更新==“循环队列”==,和OJ题:栈模拟队列,队列模拟栈等.

17330

C语言队列实现

我个人把链表队列、栈分为一类,然后图、树分为一类。(串不考虑),分类的理由就是每一类有规律可循,即你能通过修改极少数的代码把链表变成队列、栈。...,队列是先进先出的结构,允许插入成为队尾,允许删除成为队头 如上图就是一个队列,这里我相信你已经对队列有了一个概念了吧,于是就可以继续看下面了 队列同样存在插入删除操作,由于我们这里讨论的是链式队列实现...然后来考虑入队操作: 如上图,我们希望把e节点插入到这个队列里面,其实细心的朋友可能已经发现了这其实就是链表的尾部插入,没错,等一下我会总结一下这些规律 ,这里暂且不谈。...我们能很容易写出下面插入节点到队列的代码(如果不能你就要发反思是否认真学习了): void en_queue(struct queue *q,char c){ struct node *e=new...如果队列不是空就按链表式尾插法进行插入 然后出队: 看着上面的图片如果你能与链表联系起来并想到这就是链表的头插法的逆向,那就说明你真的学懂了 我们只需要把front的next指向a2,然后把,然后删除

3.4K20

C语言建个单向链表

链表是和数据结构相挂钩的,现在可以先认识一下哦,不一定非要弄懂,但是弄懂也没毛病 。学习链表之前要把结构体弄懂哦,还有指针等。基础是一定要打牢的,不然以后学数据结构会很困难的。...任务描述 建立一个带头结点的单向链表。 相关知识 什么是链表链表和二叉树是C语言数据结构的基础和核心。...单链表 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始,链表是使用指针进行构造的列表,又称为结点列表,因为链表是由一个个结点组装起来的,其中每个结点都有指针成员变量指向列表中的下一个结点...简单单向链表的图示: ?...链表是结构、指针相结合的一种应用,它是由头、中间、尾多个链环组成的单方向可伸缩的链表,链表上的链环我们称之为结点; 每个结点的数据可用一个结构体表示,该结构体由两部分成员组成:数据成员与结构指针变量成员

1.1K60

C语言实现顺序队列

文章目录 顺序队列常规操作 定义顺序队列结构体 初始化顺序队列 顺序队列判满 顺序队列判空 计算顺序队列的长度 顺序队列入队(EnQueue) 顺序队列出队(DeQueue) 顺序队列各操作测试 源代码...; // 队列头下标 int rear; // 队列尾下标 }*Queue; 顺序队列和顺序栈相类似,在队列的顺序存储结构中,除了一组地址连续的存储单元依次存放从队列头到队列尾的元素之外...为了在C语言中描述方便起见,初始化建空队列时,令 front = rear = 0; 每当插入新的队尾元素时 “尾指针增1”;每当删除队头元素时 “头指针增1”。...因此,在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置。... 循环队列 就可以解决假溢出情况。 源代码 源代码已上传到 GitHub Data-Structure-of-C,欢迎大家下载 C语言实现数据结构

1.6K30

C语言实现循环队列

文章目录 顺序队列的假溢出 解决上溢的方法 引入循环队列 循环队列判空、判满冲突 循环队列常规操作 定义循环队列结构体 初始化循环队列 循环队列判满 循环队列判空 计算循环队列的长度 循环队列 入队(EnQueue...引入循环队列 base[0] 接在 base[MAXSIZE -1] 之后,若 rear + 1 == M,则令 rear = 0 实现方法: 利用 模(mod,C语言中: %)运算。...解决方案: 1.另外设一个标致以区别队空、队满 2.另设一个变量,记录元素个数 3.少用一个元素空间 本文实现的方法就是第三种。 ?...Failed, 1 Success) QueueFull():0 QueueEmpty():0 QueueLength():1 源代码 源代码已上传到 GitHub Data-Structure-of-C,...欢迎大家下载 C语言实现数据结构

2.8K31

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.8K41

c语言 | 单链表实现

今天分享的是单链表。准确的说,单链表不算是C语言中的内容,而是属于数据结构的内容,因为它没有新的知识点,只是利用了结构体和指针等的知识。...但是它在C语言中应用还是很广泛的,在RTOS中,也是非常多的地方使用到了链表。今天暂时说一下单链表实现和简单应用,下一节当中再介绍双链表。 首先,要对单链表有个概念。...链表是由一个个节点构成,每个节点之间指针的方式连接起来,有一个头指针用来找到链表中的第一个节点,然后根据指针就可以找到每一个节点。...说明:在本次实验中,使用的是vscode编辑器,编译环境是gcc,不建议使用VC6.0,因为VC6.0使用的c语言标准太老了,很多语法都不支持,并且,VC6.0使用体验极差,没有代码高亮功能等等。...再测试其他的情况,也都没有问题,说明我们的代码实现了预定目标。

2K30

链式队列(C语言实现)

链式队列(C语言实现) 链式队列的存储结构: 我们知道,队列是操作受限制的线性表,队列有队头和队尾,插入元素的一端称为队头,删除元素的一端称为队尾。...练市队列的队头指针指向当前队列的队头结点位置,队尾指针指向队列的当前队尾结点位置。对于不带头结点的链式队列,出队列时可直接删除队头指针所指的结点,因此,链式队列不带头结点更方便。...front=NULL; } //判空 int QueueEmpty(LQueue Q) { if(Q.front==NULL) return 0; else return 1; } //入队列...(LQueue *Q,DataType *d) { LQNode *p; if(Q->front==NULL) { printf("队列已空!!...p); return 1; } } //取队头数据元素 int QueueGet(LQueue Q,DataType *d) { if(Q.front==NULL) { printf("队列已空

44130
领券