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

C语言队列实现

我个人把链表、队列、栈分为一类,然后图、树分为一类。(串不考虑),分类理由就是每一类有规律可循,即你能通过修改极少数代码把链表变成队列、栈。...(这里我们不考虑其他诸如设计模式等因素),因此本贴在讲完队列之后还会归纳一下这一类数据结构规律,帮助大家更好理解数据结构 首先需要知道队列是什么,这里给一个定义:队列是只允许一段进行插入操作,一段进行删除操作线性表...,队列是先进先出结构,允许插入成为队尾,允许删除成为队头 如上图就是一个队列,这里我相信你已经对队列有了一个概念了吧,于是就可以继续看下面了 队列同样存在插入删除操作,由于我们这里讨论是链式队列实现...我们能很容易写出下面插入节点到队列代码(如果不能你就要发反思是否认真学习了): void en_queue(struct queue *q,char c){ struct node *e=new...n){ return; } e->data=c; e->next=NULL; if(q->rear==NULL){ q->front=q->rear

3.5K20

C语言队列基本操作

本篇介绍一下编程中比较重要一个数据结构队列队列有个很显著标志,对其中数据是先进先出,如果是顺序存储结构可以说就是一个受限数组,对链式存储结构就只能说是符合先进先出规则了,这种数据结构在我们真正编程中还是相当常用...实际中根据需要去定制自己队列。...开始 顺序队列操作 首先我们来介绍一下顺序存储结构下队列定义和基本操作 添加适当头文件,定义一个顺序存储数据结构, 这里需要添加头文件和定义一个队列顺序数据结构 #include <stdio.h...,在顺序队列中,可以从数组方式去理解,这样将会让你理解起来更简单 链式队列操作 首先我们来介绍一下顺序存储结构下队列定义和基本操作 添加适当头文件,定义一个队列链式存储数据结构, 这里需要添加头文件和定义一个队列链式存储数据结构...注: 上述代码在visual studio 2015中编译成功运行,其他ide请自行测试 上述文字皆为个人看法,如有错误或建议请及时联系我

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

    C语言实现“队列

    个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏: C语言进阶 个人信条: 知行合一 本篇简介:>:分享数据结构之C语言实现"队列".各个接口分别分析,讲解思路已经动图讲解....✨ 入队列:进行"插入"操作一端称为队尾 出队列:进行"删除"操作一端称为队头 用顺序表还是用链表实现队列比较好呢?..."常见接口: 接口介绍: //队列初始化操作 void QueueInit(Queue* pq); //队列销毁 void QueueDestroy(Queue* pq); //入队列 void...(Queue* pq); 二、接口具体实现: 2.1 "队列""初始化"操作(QueueInit) 队列结构是由两个结点指针,加一个记录长度size变量组成....四、总代码: 4.1 主测试区(test.c) #include"Queue.h" int main() { Queue q; QueueInit(&q); QueuePush(&q, 1);

    26630

    【数据结构】C语言实现队列(附完整运行代码)

    一.了解项目功能 在本次项目中我们目标是实现一个队列: 该队列使用动态内存分配空间,可以用来存储任意数量同类型数据....队列销毁 二.项目功能演示 要编写一个队列项目,首先要明确我们想要达到效果是什么样,下面我将用vs2022编译器来为大家演示一下队列程序运行时样子: 队列C语言实现 三.逐步实现项目功能模块及其逻辑详解...1.实现队列程序菜单 菜单部分逻辑比较简单,就是利用C语言printf函数打印出这个菜单界面即可。...求队列长度,因为我们有设计记录队列长度变量size,因此我们直接返回结构体中size成员值即可....,完整代码如下: test.c文件 #include"Queue.h" //因为队列头指针是必须 //而在队尾插入则尾指针同样也是必须 //因此我们不妨设置两个指针,一个记录队头,一个记录队尾

    30110

    LeetCode 设计循环队列C语言

    题目要求 设计你循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。...循环队列一个好处是我们可以利用这个队列之前用过空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新值。...那么,这是个循环队列,head和tail走到末尾之后,再走一步就回到了最开始地方。...最重要就是判断队列是否为空,是否满队列,空队列就是head和tail指向了同一个位置,但是如果一直入队,等到满队,条件也是head和tail指向了同一个地方 这样我们就没办法判断倒是是满队还是空队...,所以我们需要加一个新空间,新开出来空间是缓冲满队列

    67500

    C语言实现顺序队列

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

    1.7K30

    C语言实现循环队列

    文章目录 顺序队列假溢出 解决上溢方法 引入循环队列 循环队列判空、判满冲突 循环队列常规操作 定义循环队列结构体 初始化循环队列 循环队列判满 循环队列判空 计算循环队列长度 循环队列 入队(EnQueue...) 循环队列 出队(DeQueue) 循环队列各操作测试 源代码 顺序队列假溢出 ?...每移动一次, 队中元素都要移动 2、将队列空间设想成一个循环表,即分配给队列 m 个存储单元可以循环使用,当 rear 为 MAXSIZE 时,若队列开始端空着,又可从头使用空着空间。...引入循环队列 base[0] 接在 base[MAXSIZE -1] 之后,若 rear + 1 == M,则令 rear = 0 实现方法: 利用 模(mod,C语言中: %)运算。...欢迎大家下载 C语言实现数据结构

    3K31

    队列动态链式存储实现—C语言

    初始条件: 无 操作结果: 构造一个空队列 函数参数: LinkQueue *Q 待初始化队列 返回值: bool 操作是否成功 ---------------------------...初始条件: 队列Q已存在 操作结果: 返回Q中数据元素个数 函数参数: LinkQueue Q 队列Q 返回值: int 数据元素个数 ----------------------...初始条件: 队列Q已存在 操作结果: 依次对Q每个元素调用函数fp 函数参数: LinkQueue Q 队列Q void (*fp)() 访问每个数据元素函数指针 返回值: 无 --...e 初始条件: 队列Q已存在 操作结果: 插入元素e作为队列尾结点 函数参数: LinkQueue *Q 队列Q ElemType e 待插入数据元素 返回值: bool 操作是否成功...初始条件: 队列Q已存在 操作结果: 删除链式队列头结点 函数参数: LinkQueue *Q 队列Q ElemType *e 待插入数据元素 返回值: bool 操作是否成功

    1.3K10

    链式队列(C语言实现)

    链式队列(C语言实现) 链式队列存储结构: 我们知道,队列是操作受限制线性表,队列有队头和队尾,插入元素一端称为队头,删除元素一端称为队尾。...练市队列队头指针指向当前队列队头结点位置,队尾指针指向队列的当前队尾结点位置。对于不带头结点链式队列,出队列时可直接删除队头指针所指结点,因此,链式队列不带头结点更方便。...示意图(感觉图画有点垮) 头文件:LQueue.h typedef struct node//节点结构体 { DataType data; struct node *next; }LQNode...\n"); return 0; } else { *d=Q.front->data; return 1; } } //撤销动态申请存储空间 void Destroy(LQueue...list; int x; QueueInitiate(&list); for(int i=0;i<10;i++) { QueueAppend(&list,i+1); } printf("链式队列出队顺序为

    50030

    【线性表】之队列(C语言)

    队列概念 队列只允许在一端进行插入数据操作,在另一端进行删除数据操作特殊线性表,队列具有先进先出FIFO(First in First Out)。 入队列:进行插入操作一端称为队尾。...出队列:进行删除操作一端称为队头。 同样可以使用链表或者数组 数组:不是适合,队头出数据需要挪动数据。 链表:适合单链表,单链表头删效率很高。...->head = pq->tail = newnode; } else { //插到后面 pq->tail->next = newnode; //称为新尾巴...pq->tail = newnode; } } 队头出 void QueuePop(Queue* pq) { assert(pq); assert(pq->head);//队列是不等于空...newnode; pq->tail = newnode; } } //队头出 void QueuePop(Queue* pq) { assert(pq); assert(pq->head);//队列是不等于空

    52210

    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...queueEmpty(xLinkQueue* queue); void queueInfo(xLinkQueue* queue); void queueTest(void); #endif 测试

    80240

    栈和队列(C语言实现)

    栈和队列 栈 分析 初始化与销毁栈 出栈入栈与判断栈为空 获取栈顶元素 获取栈中有效元素个数 队列 分析 初始化与销毁队列 入列,出列与判断队列是否为空 获取队列头部,尾部元素 获取队列中有效元素个数...int StackSize(ST* ps)//获取栈中有效元素 { assert(ps); return ps->top; } 队列 分析 队列是从队头出,队尾入,数组就没有链表好用了,所以我们用单向链表...typedef struct Queue { QL* head;//头结点,指向队列队头 QL* tail;//尾结点,指向队列队尾 int siz;//计算有多少个结点 }Qu; 初始化与销毁队列...free(cur); cur = del; } q->head = q->tail = NULL; q->siz = 0; } 入列,出列与判断队列是否为空 入列 这里需要考虑队列是否为空尾插...QueueEmpty(q)); return q->tail->data; } 获取队列中有效元素个数 直接返回之前用于记录数量siz就可以了。

    90400

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

    个人主页: :✨✨✨初阶牛✨✨✨ 强烈推荐优质专栏: C++世界(持续更新中) 推荐专栏1: C语言初阶 推荐专栏2: C语言进阶 个人信条: 知行合一 前言 在做这个题目之前,应当熟悉栈和队列这两种数据结构....栈和队列都是常见数据结构,它们是基于数组或链表实现线性数据结构。...,就往这个队列中正常压数据,模拟压栈过程....} //将除了最后一个要删除元素以外其他元素,倒数据到空队列 while(QueueSize(Notempty)>1) { //将有元素队列队头值放入空队列中...} //将除了最后一个要删除元素以外其他元素,倒数据到空队列 while(QueueSize(Notempty)>1) { //将有元素队列队头值放入空队列

    17230

    重要数据结构--队列C语言实现)

    队列简称队,它也是一种操作受限线性表,其限制为仅允许在表一端进行插入操作,而在表另一端进行删除操作。...typedef int ElemType; typedef struct qnode { ElemType date;//存放元素 struct qnode *next;//队头和队尾指针}DataNode;//队数据结点类型...typedef struct { DataNode *front;//指向队首指针 DataNode *rear;//指向队尾指针}LinkQuNode;//队结点类型//队空条件 :q->rear...,则新结点既是队首又是队尾结点 { q->front=q->rear=p; } else //若队不空 { q->rear->next=p;//将结点p到队尾,并将...>next; e=t->date; free(t); return true; } 通过下面这个运用队列例子,可以加深印象 利用队列求解报数问题。

    61920

    数据结构——队列C语言版)

    前言: 在学习完数据结构顺序表和链表之后,其实我们就可以做很多事情了,后面的栈和队列,其实就是对前面的顺序表和链表灵活运用,今天我们就来学习一下队列原理和应用。...准备工作:本人习惯将文件放在test.c、SeqList.c、SeqList.h三个文件中来实现,其中test.c用来放主函数,SeqList.c用来放调用函数,SeqList.h用来放头文件和函数声明...队列数据是按照先进先出顺序,也就是说先进去数字也先出来 因为队列这种性质,所以队列我们用链表来实现比顺序表方便很多,因为用顺序表每插入一个数或者删除一个数都需要遍历整个数组,这样就会很容易出错且不够方便...,我们一般采用单链表来实现队列 队列节点结构 队列采用单链表结构,所以与单链表差异不大 typedef int QDataType; typedef struct QueueNode { struct...,熟练栈和队列,对我们巩固顺序表和链表帮助很大,当然,队列在一些场景下很实用,后面我会出一个专门习题讲解篇章,讲数据结构一些经典题型,感兴趣可以点赞关注一下 创作不易,还请各位大佬点赞支持一下

    7210
    领券