数据结构——链队列(linked queue)
/* linkedQueue.c */
/* 链队列 */ #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> /* 链队列数据结构 */
typedef struct node {
int data; /* 节点存储数据 */
struct node *next; /* 指向下一个节点的指针 */
} Node;
/* front指向队列头,rear指向队列尾 */
/* front->next指向队列第一个节点 */
typedef struct {
Node *front, *rear;
} Queue; void interface(void);
/* 链队列函数声明 */
Queue *initializeQueue();
bool isEmptyQueue(Queue *q);
void inQueue(Queue *q, int number);
int outQueue(Queue *q); int main(){
Queue *q = initializeQueue();
int flag, number; interface();
for(;;){
printf("Command: ");
scanf("%d", &flag);
switch(flag){
case : puts("Bye!"); return ; break;
case :
printf("Enter a number: ");
scanf("%d", &number);
inQueue(q, number);
break;
case :
if(isEmptyQueue(q))
printf("Queue is empty!\n");
else
printf("value: %d\n", outQueue(q));
break;
}
} return ;
} void interface(void){
puts("+************************+");
puts("+ 0, quit 退出 +");
puts("+ 1, in 入队 +");
puts("+ 2, out 出队 +");
puts("+************************+");
}
/* 链队列函数实现 */
/* 初始化链队列 */
Queue *initializeQueue(){
/* 申请Queue结构体以及Node头节点,front和rear均指向头节点 */
Queue *q = (Queue*)malloc(sizeof(Queue));
Node *p = (Node*)malloc(sizeof(Node));
p->next = NULL;
q->front = p;
q->rear = p;
return q;
}
/* 判断队列是否为空 */
bool isEmptyQueue(Queue *q){
if(q->front==q->rear)
return true;
else
return false;
}
/* 入列 */
void inQueue(Queue *q, int number){
/* 新建一个节点,存储number数据,rear指向新节点 */
Node *p = (Node*)malloc(sizeof(Node));
p->data = number;
p->next = NULL;
q->rear->next = p; /* 队列中的最后一个节点的next指向这个新的节点 */
q->rear = p; /* rear指向新节点 */
}
/* 出列 */
int outQueue(Queue *q){
Node *p = q->front->next; /* p指向队列的第一个节点 */
q->front->next = p->next; /* q->front->next指向第二个节点 */
int r = p->data; /* 获取第一个节点存储的值 */
free(p); /* 释放第一个节点 */
/* 只有一个元素时,出队后队空,需要修改尾指针 */
if(q->front->next==NULL)
q->rear = q->front;
return r;
}
数据结构——链队列(linked queue)的更多相关文章
- 数据结构 - 链队列的实行(C语言)
数据结构-链队列的实现 1 链队列的定义 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已, 我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指 ...
- 数据结构之队列(Queue)
1,队列的定义 队列:是一种先进先出的数据结构,如下图所示,现进去的数据在队列前面(front),先出队列,后进入队列的数据在后面(rear),后出队列. 队列常用操作: q=Queue() #创建队 ...
- Java数据结构之队列(Queue)
1.使用场景 银行排队的案例: 2.队列介绍 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则: 先存入队列的数据,要先取出. 后存入的要后取出 示意图:(使用数组模拟队列示意图) ...
- javascript数据结构之队列
首先什么是队列? 排队买东西就是生活中队列的实际例子,在队伍中大家必须按照顺序来,不能插队,新来的人只能排在队伍的最后面.新加入的人相当于队列的后端加入的元素,队伍最前面买完东西的人离开队伍相当于是队 ...
- C++数据结构之链式队列(Linked Queue)
C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...
- javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例
1 队列的基本概念 队列(Queue):也是运算受限的线性表.是一种先进先出(First In First Out ,简称FIFO)的线性表.只允许在表的一端进行插入,而在另一端进行删除. 队首(fr ...
- java与数据结构(8)---java实现链队列
链队列 实际上就是单链表,只是规定了删除在队头进行,添加在队尾进行. 链队列代码结构 package list.queue; public interface Queuable<T>; p ...
- PHP实现队列(Queue)数据结构
队列(Queue),是一种特殊的先进先出线性表,其只能在前端进行删除操作(一般称为出队),在后端进行插入操作(一般称为入队).进行删除操作的端称为队头,进行插入操作的端称为队尾.队列,是按照先进先出或 ...
- 【Java】 大话数据结构(7) 循环队列和链队列
本文根据<大话数据结构>一书,实现了Java版的循环队列.链队列. 队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 1.循环队列 队列的顺序储存结构:用数组存储队列,引入 ...
随机推荐
- webrtc笔记(5): 基于kurento media server的多人视频聊天示例
这是kurento tutorial中的一个例子(groupCall),用于多人音视频通话,效果如下: 登录界面: 聊天界面: 运行方法: 1.本地用docker把kurento server跑起来 ...
- CodeForces 463D DP
Gargari got bored to play with the bishops and now, after solving the problem about them, he is tryi ...
- 如何在 C# 中自定义 Comparer,以实现按中文拼音(a-z)来排序
1. 为何要自定义 Comparer a. 先看如下代码 class Program { public static void Main(string[] args) { List<string ...
- vue中使用的一些问题(IE不兼容,打包样式不生效)
通过脚手架快速创建的项目,使用了swiper组件,项目中使用了es6语法,使用了babel-polyfill转化依旧不行,仔细排查项目中的使用组件,最后找到问题所在 swiper4.5.0版本太高,不 ...
- C# 关于使用JavaScriptSerializer 序列化与返序列化的操作
//开始解析 //引用 //using System.Web.Script.Serialization; JavaScriptSerializer js = new JavaScriptSerial ...
- Winform中设置和获取DevExpress的RadioGroup的选中项的value值
场景 Winform中实现读取xml配置文件并动态配置ZedGraph的RadioGroup的选项: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...
- JS运算符类型
一.运算符类型 1.算术运算符: 用于各类数值运算,包括加(+).减(-).乘(*).除(/).求余(或称模运算,%).自增(++).自减(--)共七种. 2.关系运算符: 用于比较运算.包括大于(& ...
- Django+xadmin打造在线教育平台(十一)
十.首页模块 1.首页展示 (1).视图函数 def index(request): all_banners = BannerInfo.objects.all().order_by('-add_tim ...
- SQLAlchemy多表操作
目录 SQLAlchemy多表操作 一对多 数据准备 具体操作 多对多 数据准备 操作 其它 SQLAlchemy多表操作 一对多 数据准备 models.py from sqlalchemy.ext ...
- 腾讯WeTest亮相—腾讯全球数字生态大会现场
2019年5月21-23日腾讯全球数字生态大会在云南昆明滇池国际会展中心顺利召开. 此次大会上万人到场参与,大会由主峰会.分论坛.数字生态专题展会以及腾讯数字生态人物颁奖盛典四大板块构成.作为腾讯战略 ...