链队列——-链式存储实现队列的入队出队(带next,front,rear指针)
在学习链队列之前,我们可以先复习巩固一下链表实现循环队列。
原文博客如下 链表实现循环队列
目录
- 一、链队列的特点
- 二、代码实现
- 结构体(2个)
- 1.初始化队列
- 2.判断队列是否为空
- 3.入队(尾插法)
- 4.出队(头部删除)
- 完整代码
一、链队列的特点
队列的链式表示称为链队列。它是一个同时带有队头指针和队尾指针的单链表,其中队头指针指队头,队尾指针指队尾。
二、代码实现
结构体(2个)
typedef int ElemType;
typedef struct LinkNode {ElemType data;struct LinkNode* next;
}LinkNode, * LinkList;typedef struct {LinkNode* front, * rear;// 链表头 链表尾
}LinkQueue; // 先进先出
1.初始化队列
// 初始化队列
void InitQueue(LinkQueue& Q) {// 申请空间Q.front = Q.rear = (LinkList)malloc(sizeof(LinkNode));Q.front->next = NULL;
}
2.判断队列是否为空
// 判断队列是否为空
bool isEmpty(LinkQueue Q) {if (Q.front == Q.rear) {return true;}return false;
}
3.入队(尾插法)
// 入队,尾插法
void EnQueue(LinkQueue& Q, ElemType e) {// 给新元素申请空间LinkList s = (LinkList)malloc(sizeof(LinkNode));s->data = e;s->next = NULL;Q.rear->next = s; // rear始终指向尾部Q.rear = s;
}
4.出队(头部删除)
// 出队,头部删除
bool DeQueue(LinkQueue& Q, ElemType& e) {if (isEmpty(Q)) {return false;}LinkList p = Q.front->next; // 要指向有数据的,头结点什么都没有存e = p->data;Q.front->next = p->next; // 断链// 删除的是最后一个元素,将队列置为空if (Q.rear == p) {Q.rear == Q.front;}free(p); //释放p = NULL;return true;
}
完整代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>typedef int ElemType;
typedef struct LinkNode {ElemType data;struct LinkNode* next;
}LinkNode, * LinkList;typedef struct {LinkNode* front, * rear;// 链表头 链表尾
}LinkQueue; // 先进先出// 初始化队列
void InitQueue(LinkQueue& Q) {// 申请空间Q.front = Q.rear = (LinkList)malloc(sizeof(LinkNode));Q.front->next = NULL;
}// 判断队列是否为空
bool isEmpty(LinkQueue Q) {if (Q.front == Q.rear) {return true;}return false;
}// 入队,尾插法
void EnQueue(LinkQueue& Q, ElemType e) {// 给新元素申请空间LinkList s = (LinkList)malloc(sizeof(LinkNode));s->data = e;s->next = NULL;Q.rear->next = s; // rear始终指向尾部Q.rear = s;
}// 出队,头部删除
bool DeQueue(LinkQueue& Q, ElemType& e) {if (isEmpty(Q)) {return false;}LinkList p = Q.front->next; // 要指向有数据的,头结点什么都没有存e = p->data;Q.front->next = p->next; // 断链// 删除的是最后一个元素,将队列置为空if (Q.rear == p) {Q.rear == Q.front;}free(p); //释放p = NULL;return true;
}int main()
{LinkQueue Q;ElemType m; // 存储出队的元素InitQueue(Q); // 初始化队列// 入队EnQueue(Q, 3);EnQueue(Q, 4);EnQueue(Q, 5);EnQueue(Q, 6);EnQueue(Q, 7);// 出队bool ret;ret = DeQueue(Q, m);if (ret) {printf("出队成功,值为%d\n", m);}else {printf("出队失败\n");}return 0;
}
明天开始学二叉树,一定要坚持啊()
链队列——-链式存储实现队列的入队出队(带next,front,rear指针)相关推荐
- 队列,链队列,链式存储的队列
采用链式存储的队列称为链队列(linked queue),队列是运算受限的线性表,即队列的插入和删除位置分别位于表的两端.故需要两个指针来指向这2个特殊位置,即对首指针和队尾指针. 本例采用的是带头结 ...
- 队列的入队/出队操作
//............编程实现队列的入队/出队操作 (先进先出) #include<iostream> using namespace std; //node表示队列中每个节点元素 ...
- 采用链式存储实现队列的初始化、入队、出队操作。
#include<stdio.h> #include<stdlib.h> #define OVERFLOW -2 typedef struct QNode{//创建队成员 i ...
- 数据结构-队列2-链式存储
队列链式存储方案一 seqList.h #include<stdlib.h> #include<stdio.h>struct SEQLINKNODE {struct SEQLI ...
- java循环队列入队出队算法_循环队列实现
生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题:从生活中,可以抽象出队列的概念,队列就是一个能够实现"先进先出"的存储结构 ...
- 顺序队和循环队列,队列篇(顺序队和循环队列入队出队操作)
数据结构专升本学习,队列篇(顺序队和循环队列) 前言: 之前我们把栈学完了,比较简单,今天我们学习队列里面的顺序队和循环队列,说难不难,说简单不简单,我们需要认真学习,博主会尽力把原理和逻辑讲明白,不 ...
- redis + php 简单的 队列 入队-出队
//入队 操作<?php //链接redis $redis = new Redis(); $redis->connect("127.0.0.1","6379& ...
- 简单实现顺序表示的栈与队列的进栈出栈创空栈入队出队创空队等算法
栈和队列是两种最重要的数据结构,也是两种最典型的抽象数据类型,应用非常的广泛. 目录 一.栈 一.空栈的创建 二.进栈 三.出栈 二.队列 一.创建空队列 二.队列的入队和出队 三.取队列头元素 一. ...
- python 消息队列 sqlite_sqlite 数据存储 消息队列
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 5-1链队入队出队操作
链队基本操作. #include<iostream> using namespace std;#define OK 1 #define ERROR 0 typedef int Status ...
最新文章
- 什么是URL?协议头,路径和端口是什么意思?
- 把二元查找树转变成排序的双向链表
- hdu1042 java_N! hdu1042 | 学步园
- 数据单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB、、、
- ubuntu 下安装qemu
- 如何去设计前端框架能力?星巴克消息开放项目从0到1,从点到面的思考
- element table多选只能选中当前页数据_关于“列表多选”操作流的小思考
- 小文件复制为什么那么慢_为什么最近手机网速那么慢?原因是……
- 创业冲突的五种解决方法是_当创始合伙人发生冲突时,最好的解决方法4和5
- MySQL通过SQL语句生成实体类_使用sql生成表对应的CRUD语句和表对应java实体类的实例变量...
- HubbleDotNet 基本语法
- .net 编译工具_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实
- 计算机丢失lua51dll怎么修复,lua51.dll
- RabbitMQ使用案例
- 数据分析项目实战项目二:入驻商用户画像体系
- sql里面如何将年月日时分秒的格式转换成年月日
- 程序员 - 算法工程师 日常快捷入口大全
- java new file 路径_File file = new File(路径名) 路径名的2种写法
- IB卡配置可以ping通的子网交换器
- linux ln 链接
热门文章
- 在java中 数组是作为_2.在Java中,数组是作为____来处理的。
- java毕业设计校园服装租赁系统mybatis+源码+调试部署+系统+数据库+lw
- 魅九网下载最新的android固件下载地址,iOS9固件下载地址一览 全设备下载地址...
- 风控数据来源及分析技巧
- 解决“the security certificate for this site has been revoked.the site should not be trusted.”
- Summary——CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark
- 苹果退款_苹果退款流程最新苹果内购退款流程和教程
- 区块链最可能大规模应用场景:社交网络和共享经济
- Cascading Style Sheet层叠样式表
- 曲线长、旋转图形表面积、旋转图形体积