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 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...
随机推荐
- codeforces 597 div2 E. Hyakugoku and Ladders(概率dp)
题目链接:https://codeforces.com/contest/1245/problem/E 题意:有一个10x10的网格,左下角是起点,左上角是终点,从起点开始,如图所示蛇形走到终点,每一步 ...
- thinkphp的模型操作
先开个坑 WHERE篇 1, 模糊查询 where['keyword'] = [ 'like' , '%test%'] 2, 不等于,大于 ,小于 EQ 等于(=)NEQ 不等于(<& ...
- javascript当中局部变量和全局变量
2)局部变量和全局变量 马克-to-win:浏览器里面 window 就是 global,通常可以省.nodejs 里没有 window,但是有个叫 global 的.例 3.2.1<html& ...
- RestTemplate-记录
org.springframework.web.client.RestTemplate 1.从使用功能上看,是一种简化请求响应的工具类,从发送请求,到对返回的结果进行json解析.格式不对会有异常.
- Python 多任务(线程) day1
多任务就是可以让一台电脑同时执行多个命令. 以前的单核cpu是怎么做到同时执行多个命令的?(时间片轮转) ——其实以前的单核CPU是让操作系统交替执行命令,每个任务执行0.01秒,这样看起来就像是在同 ...
- WiFi密码破解(wpa/wpa2)
参考一篇很好的贴子:https://www.cnblogs.com/daoyi/p/Kali-Linux-shi-yongAircrack-po-jiewifi-mi-ma-wpawp.html #前 ...
- 【C语言】用指针描述数组,实现选择法排序
#include <stdio.h> int main() { ], t; int i, j, max; printf("请输入10个数:\n"); ; i <= ...
- laravel Excel导入导出
1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...
- jmeter实现对Oracle数据库的操作
实现目的 有时候,根据业务需要,可能需要直接对数据库进行性能测试,此时可利用jmeter对Oracle.MySQL等数据库进行相关测试. 脚本实现 添加JDBC Connection Configur ...
- dbGet net trace instant pin
proc rn { net_name } {puts " "puts "Net name : $net_name : "set name_rule [dbget ...