【数据结构】8. 队列(带头节点的单链表实现)(完整代码实现:初始化、入队列、出队列、获取队头元素、获取队尾元素、获取队列中有效元素的个数、判空、销毁)
目录
- Queue.h
- Queue.c
- test.c
Queue.h
#pragma once //采用带头节点的单链表实现队列typedef int DataType;typedef struct QueueNode
{ struct QueueNode* next;DataType data;
}QNode;typedef struct Queue
{QNode* front;QNode* back;
}Queue;//初始化
void QueueInit(Queue* q);//入队列
void QueuePush(Queue* q, DataType data);//出队列
void QueuePop(Queue* q);//获取队头元素
DataType QueueFront(Queue* q);//获取队尾元素
DataType QueueBack(Queue* q);//获取队列中有效元素的个数
int QueueSize(Queue* q);//检测队伍中是否为空
int QueueEmpty(Queue* q);//销毁
void QueueDestroy(Queue* q);
Queue.c
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>#include "Queue.h"QNode* NewQueueNode(DataType data)
{QNode* node = (QNode*)malloc(sizeof(QNode));if(NULL == node){assert(0);return NULL;}node->data = data;node->next = NULL;return node;
}//初始化
void QueueInit(Queue* q)
{assert(q);q->front = q->back = NewQueueNode(0); //创建头节点
}//入队列
void QueuePush(Queue* q, DataType data)
{assert(q);q->back->next = NewQueueNode(data); //将新数挂到最后面q->back = q->back->next; //将新数的节点变为最后一个节点
}//出队列
void QueuePop(Queue* q)
{assert(q);//需要判空if(QueueEmpty(q))return;QNode* delNode = q->front->next;q->front->next = delNode->next; //让下下个节点成为头节点的下一个节点(让头节点指向下下个节点)//队列中只有一个元素,将该元素删除之后,需要让back节点指向头节点的位置if(NULL == delNode->next)q->back = q->front;free(delNode);
}//获取队头元素
DataType QueueFront(Queue* q)
{assert(q);return q->front->next->data;
}//获取队尾元素
DataType QueueBack(Queue* q)
{assert(q);return q->back->data;
}//获取队列中有效元素的个数
int QueueSize(Queue* q)
{assert(q);//就是节点的个数(不包括头节点)int count = 0;QNode* cur = q->front->next;while(cur){++count;cur = cur->next;}return count;
}//检测队列是否为空
int QueueEmpty(Queue* q)
{assert(q);return NULL == q->front->next;
}//销毁队列 逐个删除节点
void QueueDestroy(Queue* q)
{assert(q);QNode* cur = q->front;while(cur){q->front = cur->next;free(cur);cur = cur->next;}q->front = q->back = NULL;
}
test.c
#include <stdio.h>#include "Queue.h"int main()
{Queue q;QueueInit(&q);QueuePush(&q,1);printf("%d\n",QueueSize(&q));printf("%d\n",QueueFront(&q));printf("%d\n",QueueBack(&q));QueuePush(&q,1);QueuePush(&q,2);QueuePush(&q,3);QueuePush(&q,4);printf("%d\n",QueueSize(&q));printf("%d\n",QueueFront(&q));printf("%d\n",QueueBack(&q));QueuePop(&q);QueuePop(&q);printf("%d\n",QueueSize(&q));printf("%d\n",QueueFront(&q));printf("%d\n",QueueBack(&q));if(QueueEmpty(&q))printf("NULL\n");else printf("error\n");QueuePop(&q);QueuePop(&q);QueuePop(&q);if(QueueEmpty(&q))printf("NULL\n");else printf("error\n");//QueueDestroy(&q);
}
【数据结构】8. 队列(带头节点的单链表实现)(完整代码实现:初始化、入队列、出队列、获取队头元素、获取队尾元素、获取队列中有效元素的个数、判空、销毁)相关推荐
- 【不带头节点的单链表】
不带头节点的单链表 前言 一.结构体设计 二.函数实现 1. 初始化 2. 购买一个新节点 3. 头插 4. 尾插 5. 按位置插入 6. 头删 7. 尾删 8. 按位置删 总结 补充代码 前言 单链 ...
- 数据结构-带头节点的单链表(C语言)超详细讲解
前面我们学到线性表的顺序存储结构(顺序表),发现它有着明显的缺点:插入和删除元素时需要频繁的移动元素,运算效率低.必须按事先估计的最大元素个数申请连续的存储空间.存储空间估计大了,造成浪费空间:估计小 ...
- java带头节点的单链表_自己实现集合框架(五):带头结点单链表的实现
这是系列文章,每篇文章末尾均附有源代码地址.目的是通过模拟集合框架的简单实现,从而对常用的数据结构和java集合有个大概的了解.当然实现没有java集合的实现那么复杂,功能也没有那么强大,但是可以通过 ...
- 不带头节点的单链表如何头插(多图易懂)
文章目录 缘起 带头节点的头插 不带头节点的头插 错误的代码 为什么错误 如何修改 返回新的头指针 二级指针 缘起 本文想说的是单向非循环链表的头插.单向非循环链表,可以是带头节点的,也可以是不带头节 ...
- 数据结构不带头节点跟带头节点的单链表区别,C语言代码展示
单链表头插法 不带头结点 void FronttList1(List *L) {List p;ElemType x;printf_s("请输入一组数据,以'0'为结束符\n");s ...
- 头插法和尾插法建立带头节点的单链表
有两种方法建立单链表,尾插法和头插法,他们的区别是:头插法是按照输入元素倒序建立,为尾插法为顺序插入,并且多一个尾节点,我们一般使用尾插法. 一.头插法 代码为: pCurr -> next = ...
- 带头节点的单链表逆置
#include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *next ...
- 借助栈将一个带头节点的单链表倒置
分析: 先理解倒置: 倒置前:1->2->3 倒置后:3->2->1 思路:先沿着链表从头到尾扫一遍 将链表的每个结点的data的值依次入栈; 在沿着链表扫一遍 将栈中的元素 ...
- 数据结构练习:运用单链表实现图书管理系统(c/c++)(内含带头结点的单链表的基本操作)
数据结构练习:运用单链表实现图书管理系统 正文 注意 部分功能运行展示 所包含头文件及结构体的定义 自定义函数 主函数 完整代码 结束语 正文 本程序使用带头节点的单链表存储结构实现,共有六个基本功能 ...
最新文章
- 【知识图谱实战】 Neo4j入门与示例
- 10个关于文件操作的小功能(Python),都很实用~
- 已锁定计算机,计算机锁定怎么解除_计算机已锁定如何解除
- composer的简单使用
- QT5_chart_常见几种图形
- 《Reids 设计与实现》第七章 RDB 持久化
- python方差的代码_Python statistics pvariance()用法及代码示例
- 串口扫盲十三:接口技术的基本知识
- 推荐:“创建MOSS2007自定义字段类型实例”
- iOS 开发比较实用的框架总结(上)
- java定时任务插件_jfinal定时调度任务插件QuartzPlugin
- 修复小米路由器mini的USB口
- cad 打开硬件加速卡_CAD如何根据已知条件设计图形
- MySQL安全你不知道的事
- 睡眠十律 (BBC纪录片) -- 讲述10分钟获得好睡眠的方法
- GetLastError的使用和返回值定义大全
- Centos下安装FastDFS
- DP(Nietzsche)的hu测 T3(规律?主席树)
- QLabel实现超链接,设置超链接颜色,去掉超链接下划线方法
- DeepLearning花书阅读记录(1)