/* 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)的更多相关文章

  1. 数据结构 - 链队列的实行(C语言)

    数据结构-链队列的实现 1 链队列的定义 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已, 我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指 ...

  2. 数据结构之队列(Queue)

    1,队列的定义 队列:是一种先进先出的数据结构,如下图所示,现进去的数据在队列前面(front),先出队列,后进入队列的数据在后面(rear),后出队列. 队列常用操作: q=Queue() #创建队 ...

  3. Java数据结构之队列(Queue)

    1.使用场景 银行排队的案例: 2.队列介绍 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则: 先存入队列的数据,要先取出. 后存入的要后取出 示意图:(使用数组模拟队列示意图) ...

  4. javascript数据结构之队列

    首先什么是队列? 排队买东西就是生活中队列的实际例子,在队伍中大家必须按照顺序来,不能插队,新来的人只能排在队伍的最后面.新加入的人相当于队列的后端加入的元素,队伍最前面买完东西的人离开队伍相当于是队 ...

  5. C++数据结构之链式队列(Linked Queue)

    C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...

  6. javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例

    1 队列的基本概念 队列(Queue):也是运算受限的线性表.是一种先进先出(First In First Out ,简称FIFO)的线性表.只允许在表的一端进行插入,而在另一端进行删除. 队首(fr ...

  7. java与数据结构(8)---java实现链队列

    链队列 实际上就是单链表,只是规定了删除在队头进行,添加在队尾进行. 链队列代码结构 package list.queue; public interface Queuable<T>; p ...

  8. PHP实现队列(Queue)数据结构

    队列(Queue),是一种特殊的先进先出线性表,其只能在前端进行删除操作(一般称为出队),在后端进行插入操作(一般称为入队).进行删除操作的端称为队头,进行插入操作的端称为队尾.队列,是按照先进先出或 ...

  9. 【Java】 大话数据结构(7) 循环队列和链队列

    本文根据<大话数据结构>一书,实现了Java版的循环队列.链队列. 队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 1.循环队列 队列的顺序储存结构:用数组存储队列,引入 ...

随机推荐

  1. RPC系列:基本概念

    RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想. RPC 是一种技术思想而非一种规范或协议,常见 RPC ...

  2. not in和not exists区别

    如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引: 而not extsts 的子查询依然能用到表上的索引. 所以无论那个表大,用not exists都比not in要快. 也就是 ...

  3. ASP.NET Core appsettings.json 文件

    ASP.NET Core appsettings.json 文件 在本节中,我们将讨论 ASP.NET Core 项目中appsettings.json文件的重要性. 在以前的 ASP.NET 版本中 ...

  4. CodeFirst开发方式创建数据库

    1).新建ADO.NET实体数据模型--->选择空CodeFirst模型 2).新建两个实体类(客户表和订单信息表) using System; using System.Collections ...

  5. 4、Ext.NET 1.7 官方示例笔记 - 树

    <%@ Page Language="C#" %> <%@ Import Namespace="System.Collections.Generic&q ...

  6. J2EE的13种规范

    1.JDBC(Java Databaes Connectivity):JDBC API为访问不同的数据库提供了一种统一的途径,就像ODBC一样,JDBC对开发者屏蔽了一些细节问题,同时,JDBC对数据 ...

  7. Flask--闪现、中间件、多app应用

    目录 闪现 源码 案例 中间件 自定义局部中间件 自定义全局装饰器 多app应用 闪现 flask提供了一个非常有用的flash()函数,它可以用来"闪现"需要提示给用户的消息,比 ...

  8. vs扩展和更新插件的开发

    一.调试 以 MinimalisticView.vsix (https://github.com/poma/MinimalisticView) 为例. 正如 | Marketplace 上介绍的,这个 ...

  9. Javascript 关于基本类型和引用类型的个人理解

    一.基础类型 A. 基础类型有5种,Number,String,Boolean,Null,Undefined B. 基础类型没有堆的概念,堆只针对引用类型. 所有基础类型都是以key-value形式存 ...

  10. linux下sendmail

    1. 安装 # yum install sendmail.x86_64 bin/mail会默认使用本地sendmail发送邮件,这样要求本地的机器必须安装和启动sendmail服务,配置非常麻烦,而且 ...