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 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...
随机推荐
- 7_4 素数环(UVa524)<回溯法和生成-测试法的比较>
有一个环(ring)是由n个圈圈所组成的(在这里n一定是个偶数),我们想要把1到n的自然数各放到一个圈圈中,使得相邻2个圈圈中的数的和一定是素数.下图为n=6的情形.请注意:第1个圈圈中的数一定是1. ...
- buuctf 基础破解
首先下载压缩包 解压之后发现是另一个压缩包 另一个压缩包上写着基础破解 然后用暴力破解的方法破解 然后搜了一下 暴力破解一般的长度是多少 然后搜到的结果是 长度为8的时候电脑都要破解好几年 所以我猜测 ...
- VUE常用写法
v-for: v-for ='item,key of data' v-for ='item,index in data' @click='' @click='pop.show=false' ...
- Docker - 命令 - docker network
概述 docker network 命令 背景 newwork 是 docker 的一种资源 经常会使用 需要整理命令 1. 引入 概述 docker run 时, 将容器端口映射到宿主机 场景 启动 ...
- python在线测试代码及教程
python/Java在线测试代码:http://www.pythontutor.com/visualize.html#mode=edit廖雪峰Python教学:https://www.liaoxue ...
- 一些 乱码 GPU的问题
# # s = '网站地图' 原始 # s1 = s.encode('utf-8') # print(s1.decode('gbk')) #res 缃戠珯鍦板浘 # s = '缃戠珯鍦板浘' 原始 # ...
- aarch64环境下,搭建并配置服务器tomcat:
aarch64环境下,搭建并配置服务器tomcat: 环境说明及下载相关文件: 1. ARM环境:aarch64开发板 2.JDK安装包: jdk-8u231-linux-arm64-vfp-hflt ...
- 不起眼,但是足以让你收获的JVM内存案例
今天的这个案例我觉得应该会让你涨姿势吧,不管你对JVM有多熟悉,看到这篇文章,应该还是会有点小惊讶的,不过我觉得这个案例我分享出来,是想表达不管多么奇怪的现象请一定要追究下去,会让你慢慢变得强大起来, ...
- liux 命令行
查找文件 () find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找 () find /etc -name httpd.conf #在/etc目 ...
- LAMP源码编译
---恢复内容开始--- 1.LAMP源码编译的基础环境 安装组建包:yum groupinstall "Development Tools" "Development ...