数据结构——链队列(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.循环队列 队列的顺序储存结构:用数组存储队列,引入 ...
随机推荐
- RPC系列:基本概念
RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想. RPC 是一种技术思想而非一种规范或协议,常见 RPC ...
- not in和not exists区别
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引: 而not extsts 的子查询依然能用到表上的索引. 所以无论那个表大,用not exists都比not in要快. 也就是 ...
- ASP.NET Core appsettings.json 文件
ASP.NET Core appsettings.json 文件 在本节中,我们将讨论 ASP.NET Core 项目中appsettings.json文件的重要性. 在以前的 ASP.NET 版本中 ...
- CodeFirst开发方式创建数据库
1).新建ADO.NET实体数据模型--->选择空CodeFirst模型 2).新建两个实体类(客户表和订单信息表) using System; using System.Collections ...
- 4、Ext.NET 1.7 官方示例笔记 - 树
<%@ Page Language="C#" %> <%@ Import Namespace="System.Collections.Generic&q ...
- J2EE的13种规范
1.JDBC(Java Databaes Connectivity):JDBC API为访问不同的数据库提供了一种统一的途径,就像ODBC一样,JDBC对开发者屏蔽了一些细节问题,同时,JDBC对数据 ...
- Flask--闪现、中间件、多app应用
目录 闪现 源码 案例 中间件 自定义局部中间件 自定义全局装饰器 多app应用 闪现 flask提供了一个非常有用的flash()函数,它可以用来"闪现"需要提示给用户的消息,比 ...
- vs扩展和更新插件的开发
一.调试 以 MinimalisticView.vsix (https://github.com/poma/MinimalisticView) 为例. 正如 | Marketplace 上介绍的,这个 ...
- Javascript 关于基本类型和引用类型的个人理解
一.基础类型 A. 基础类型有5种,Number,String,Boolean,Null,Undefined B. 基础类型没有堆的概念,堆只针对引用类型. 所有基础类型都是以key-value形式存 ...
- linux下sendmail
1. 安装 # yum install sendmail.x86_64 bin/mail会默认使用本地sendmail发送邮件,这样要求本地的机器必须安装和启动sendmail服务,配置非常麻烦,而且 ...