LinkQueue(链队)
今天学习了队列,因为前面写了好几个链表实现的数据结构基本上都懂了,然后大致了解了一下队列的特点,便决定用自己的理解来实现一个,然后实现了。
(2018-02-14 代码更新)
Head file:
#ifndef __LINKQUEUE_H_
#define __LINKQUEUE_H_ #define bool int
#define true 1
#define false 0 typedef int KeyType; typedef struct node
{
struct node * next;
KeyType key;
}Node; typedef struct queue
{
Node * front;
Node * rear;
int nums;
}Queue; Queue * CreateLinkQueue();
bool QueueIsEmpty();
int QueueItemCount();
bool QueueAdd();
bool QueueRemove();
Node* GetQueueFrontNode();
Node* GetQueueRearNode();
KeyType GetQueueFront();
KeyType GetQueueRear();
void TraverseQueue();
void Clear();
void Destroy(); #endif
LinkQueue.c:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include "lqueue.h" //建立链队
Queue * CreateLinkQueue(void)
{
Queue * p; p = (Queue*)malloc(sizeof(Queue));
p->front = p->rear = NULL;
p->nums = 0; return p;
} //判断队列是否为空
bool QueueIsEmpty(Queue * p)
{
return p->nums == 0;
} //返回当前队列个数
int QueueItemCount(Queue * p)
{
return p->nums;
} //入队
bool QueueAdd(Queue * p, KeyType DATA)
{
Node * s; s = (Node*)malloc(sizeof(Node));
s->key = DATA;
s->next = NULL;
if(QueueIsEmpty(p))
p->front = s;
else
p->rear->next = s;
p->rear = s;
p->nums++;
return true;
} //出队
bool QueueRemove(Queue * p)
{
Node * s; if(QueueIsEmpty(p))
return false;
s = p->front;
p->front = p->front->next;
free(s);
p->nums--;
return true;
} //返回队首节点
Node* GetQueueFrontNode(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->front;
} //返回队尾节点
Node* GetQueueRearNode(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->rear;
} //返回队首
KeyType GetQueueFront(Queue * p)
{
return GetQueueFrontNode(p)->key;
} //返回队尾
KeyType GetQueueRear(Queue * p)
{
return GetQueueRearNode(p)->key;
} //遍历队列
void TraverseQueue(Queue * p)
{
Node*s = GetQueueFrontNode(p);
while(s != NULL)
{
printf("%d ", s->key);
s = s->next;
}
printf("\n");
} //清空队列
void Clear(Queue * p)
{
while(!QueueIsEmpty(p))
QueueRemove(p);
} //销毁队列
void Destroy(Queue * p)
{
if(p != NULL)
{
Clear(p);
free(p);
p = NULL;
}
}
LinkQueue(链队)的更多相关文章
- 纯C语言实现链队
#include <stdio.h> #include <stdlib.h> typedef int QElemType; typedef struct QNode{ QEle ...
- C++实现链队类——合肥工业大学数据结构实验5:链式队列
实验5 5.1 实验目的 熟练掌握队列的顺序链式存储结构. 熟练掌握队列的有关算法设计,并在链队列上实现. 根据具体给定的需求,合理设计并实现相关结构和算法. 5.2 实验要求 5.2.1链队列实验要 ...
- Java实现链队
一.分析 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.允许插入的一端称为队尾,允许删除的一端称为队头. 链队是指采用链式存储结构实现的队列,它的基本操作如下: 1.初始 ...
- c/c++ 栈与队列实现车库的出入与收费
/* 设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列 (大门在最南端,最先到达的第一辆车停放在车场的最北段),若停车厂内 ...
- 队列的理解和实现(二) ----- 链队列(java实现)
什么是链队列 链队是指采用链式存储结构实现的队列,通常链队用单链表俩表示.一个链队显然需要两个分别指示队头和队尾的指针,也称为头指针和尾指针,有了这两个指针才能唯一的确定. package 链队列; ...
- c语言描述的链队列的基本操作
#include<stdio.h> #include<stdlib.h> #define ok 0 #define error 1 //链队列特点在于不仅有链的头指针和尾指针, ...
- 顺序队列与链式队列--C语言实现
关于队列,因为我自己在平时使用不多,所以在这里直接将队列的两种存储方式放在一起,作为一篇随笔,这两份代码均可直接运行,亲测.注释写的应该也算比较详细了,就不过多的解释了 顺序队列 #include&l ...
- C语言实现链式队列
链式队列,简称"链队列",即使用链表实现的队列存储结构. 链式队列的实现思想同顺序队列类似,只需创建两个指针(命名为 top 和 rear)分别指向链表中队列的队头元素和队尾元素, ...
- 队列的存储结构和常见操作(c 语言实现)
一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...
随机推荐
- STL关联容器总结
有序的都不带unordered,即如下: set multiset map multimap 其中带multi的表示关键字可以重复 无序的带unordered,如下: unordered_map un ...
- bugku 域名解析题 50
什么是域名解析???? 首先我们在Windows上找到文件“C:\Windows\System32\drivers\etc\hosts” 然后找到host 双击用记事本打开然后填写上黄色区域上的东西 ...
- expect 脚本
实现远程执行 /home/dataexa/test/proxy.expect touch proxy.expect #!/usr/bin/expect set timeout 30 spawn ssh ...
- C# 对象对比是否相等 工作笔记
需要在Linq 中对比两个对象是否相等 /// <summary> /// 定义一个点 /// </summary> class Point { public int x { ...
- bash_profile文件
bash_profile文件的作用 如何填写 如何生效
- 刷题10. Regular Expression Matching
一.题目说明 这个题目是10. Regular Expression Matching,乍一看不是很难. 但我实现提交后,总是报错.不得已查看了答案. 二.我的做法 我的实现,最大的问题在于对.*的处 ...
- win10下Ubuntu18.04安装的简单教程
win10下Ubuntu18.04安装的简单教程 操作系统:windows 软件:Vmware15. 一.下载 Ubuntu18.04镜像 Ubuntu18.04镜像下载 ...
- springMVC框架在项目中的搭建
第一步:构建Web项目 第二步:导入所需jar包 第三步:配置前端控制器DispatcherServlet 第四步:编写Controller控制器(也称为Handler处理器) ...
- Bug搬运工-CSCvm33229:Environment summary not available on COS APs
还是关于温度的问题, Environment summary not available on COS APs CSCvm33229 Description Symptom:From WLC CL ...
- auto的用法
用法参考链接:https://blog.csdn.net/arrowyl/article/details/80886515 Codeblocks 出现'auto' changes meaning in ...