今天学习了队列,因为前面写了好几个链表实现的数据结构基本上都懂了,然后大致了解了一下队列的特点,便决定用自己的理解来实现一个,然后实现了。

  (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(链队)的更多相关文章

  1. 纯C语言实现链队

    #include <stdio.h> #include <stdlib.h> typedef int QElemType; typedef struct QNode{ QEle ...

  2. C++实现链队类——合肥工业大学数据结构实验5:链式队列

    实验5 5.1 实验目的 熟练掌握队列的顺序链式存储结构. 熟练掌握队列的有关算法设计,并在链队列上实现. 根据具体给定的需求,合理设计并实现相关结构和算法. 5.2 实验要求 5.2.1链队列实验要 ...

  3. Java实现链队

    一.分析 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.允许插入的一端称为队尾,允许删除的一端称为队头. 链队是指采用链式存储结构实现的队列,它的基本操作如下: 1.初始 ...

  4. c/c++ 栈与队列实现车库的出入与收费

      /* 设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列 (大门在最南端,最先到达的第一辆车停放在车场的最北段),若停车厂内 ...

  5. 队列的理解和实现(二) ----- 链队列(java实现)

    什么是链队列 链队是指采用链式存储结构实现的队列,通常链队用单链表俩表示.一个链队显然需要两个分别指示队头和队尾的指针,也称为头指针和尾指针,有了这两个指针才能唯一的确定. package 链队列; ...

  6. c语言描述的链队列的基本操作

    #include<stdio.h> #include<stdlib.h> #define ok 0 #define error 1 //链队列特点在于不仅有链的头指针和尾指针, ...

  7. 顺序队列与链式队列--C语言实现

    关于队列,因为我自己在平时使用不多,所以在这里直接将队列的两种存储方式放在一起,作为一篇随笔,这两份代码均可直接运行,亲测.注释写的应该也算比较详细了,就不过多的解释了 顺序队列 #include&l ...

  8. C语言实现链式队列

    链式队列,简称"链队列",即使用链表实现的队列存储结构. 链式队列的实现思想同顺序队列类似,只需创建两个指针(命名为 top 和 rear)分别指向链表中队列的队头元素和队尾元素, ...

  9. 队列的存储结构和常见操作(c 语言实现)

    一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...

随机推荐

  1. leetcode78.子集➕90.子集2

    78子集 dfs dfs1: 和全排列的区别就是对于当前考察的索引i,全排列如果不取i,之后还要取i,所以需要一个visited数组用来记录.对于子集问题如果不取i,之后也不必再取i. 单纯递归回溯 ...

  2. 解决tomcat控制台乱码问题

    问题原因:编码不一致,tomcat启动后默认编码UTF-8,而windows的默认编码是GBK.所以只需配置启动tomcat后为GBK编码即可. 做法:找到路径 $xxx$\apache-tomcat ...

  3. JetBrains PyCharm 2018.2.1 x64永久激活码

    812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2lnbmVlT ...

  4. linx下跑多个tomcat

    1.修改server.xml文件 <Server port="8005" shutdown="SHUTDOWN"> <Connector po ...

  5. 【安卓逆向】ARM常见汇编指令总结

    跳转指令 B 无条件跳转 BL 带链接的无条件跳转 BX 带状态切换的无条件跳转 BLX 带链接和状态的无条件跳转 存储器与寄存器交互数据指令(核心) 存储器:主存和内存 寄存器中放的数据:可以是字符 ...

  6. 1.2 Jmeter 使用代理录制脚本

    参考文档: http://jingyan.baidu.com/article/4e5b3e19333ff191911e2459.html 利用JMeter配置代理:1.添加线程组:  Test Pla ...

  7. win7安装composer(PHPStudy环境)

    好句没写博客园了,因为现在的公司就是写代码啥的,没有什么新的东西,但是光写代码也学到不少东西,因为本身太菜了,最近让做一个pdf表单的功能,首先得安装php-pdftk,看GitHub里面用compo ...

  8. Docker - 容器的 连接 与 退出

    概述 连接容器, 退出容器 命令 run exec attach 退出 选项 -i -t -d 1. docker run 概述 docker run 通常用来创建新容器 docker run 的 三 ...

  9. [原]eclipse中spring配置文件的自动提示和命名空间的添加

    在用spring或者springmvc框架进行开发时,编辑applicationcontext.xml等配置文件是必不可少的,在eclipse中打开applicationcontext.xml通常是这 ...

  10. jQuery+PHP+Ajax动态数字统计展示实例

    jQuery+PHP+Ajax实现的一款动态数字统计展示实例,本例是在页面上动态展示了当前在线用户数,当然了,你可以应用到其他更多场景中. 首先我们在#number放置要统计的数字: <div ...