1、什么是队列【queue】

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。

关于队列的基本操作方法:

add():添加一个元素,若超出了度列的长度会直接抛出异常。

put():添加一个元素,若向队尾添加元素的时候发现队列已经满了会发生阻塞一直等待空间,以加入元素。

offer():添加一个元素,如果在添加时发现队列已满无法添加的话,则返回false。

take():移除并返回这个元素,若队列为空,则发生阻塞,等待有元素。有点类似于生产者消费者模型,只有元素的时候take才被唤醒

poll():移除并返回这个元素,若队列为空,返回null。

remove():移除并返回这个元素,若队列为空,抛出NoSuchElementException异常。

element():返回队列的头部元素,若队列为空,则抛出NoSuchElementException异常。

peek():返回队列头部元素,若队列为空,则返回null

2、什么是链表【forward_list,list..】

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储元素的数据,另一个就是指向下一个节点的指针

特点:

相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多

但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。

使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。

但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针,空间开销比较大。

链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。

链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:

单向链表,双向链表以及循环链表。链表可以在多种编程语言中实现。如c+,java等

原文:https://blog.csdn.net/lidai352710967/article/details/81119047

C++队列和链表的更多相关文章

  1. C语言 复杂队列(链表队列)

    //复杂的队列二 --链表队列 #include<stdio.h> #include<stdlib.h> #define datatype int struct queueli ...

  2. 数据结构代码实现之队列的链表实现(C/C++)

    上班闲着无聊,一直想着要开始写博客,但又不知道写什么.最近又回顾了下数据结构的知识,那就从数据结构开始吧. 前言 关于C语言结构体的知识以及队列的特性请读者自行了解,此处不做过多解释,嘻嘻. 同时此篇 ...

  3. JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)

    前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...

  4. 线性结构和非线性结构、稀疏数组、队列、链表(LinkedList)

    一.线性结构和非线性结构 线性结构: 1)线性绪构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺 ...

  5. &10 基本数据结构——栈,队列和链表

    #1,栈(stack) 定义[来自百度]:栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素 ...

  6. 二叉树、栈、队列、链表的Java代码实现

    这是我的学习总结. 如有文章存在谬误,欢迎指出,有其他意见或者建议,也欢迎留言 二叉树链表 前序遍历:先访问根节点,然后访问左子树.右子树 中序遍历:先访问左子树,然后访问根节点.右子树 后序遍历:先 ...

  7. 5 数据结构、栈、队列、链表、list、dict、迷宫问题

    1.什么是数据结构 2.栈:后进先出 1.什么是栈 栈(Stack)是一个数据集合,可以理解为只能在一端进行插入或删除操作的列表.   2.栈的Python实现 stack = [] stack.ap ...

  8. 数据结构&算法(一)_堆、栈(堆栈)、队列、链表

    堆: ①堆通常是一个可以被看做一棵树的数组对象.堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值: ·堆总是一棵完全二叉树.将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做 ...

  9. 最全 C 语言常用算法详解-排序-队列-堆栈-链表-递归-树 (面试有用)

    具体 源代码 案例查看github,持续更新中............ github地址:https://github.com/Master-fd/C-Algorithm 1. 二分法查找 2. 冒泡 ...

随机推荐

  1. 《ABCD组》实验十一 团队作业7:团队项目设计完善&编码

    <ABCD组>实验十一 团队作业7:团队项目设计完善&编码 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...

  2. redis 与 序列化

    概念 序列化:把对象转化为可传输的字节序列过程称为序列化. 反序列化:把字节序列还原为对象的过程称为反序列化. 为什么需要序列化 序列化最终的目的是为了对象可以跨平台存储,和进行网络传输.而我们进行跨 ...

  3. c语言的函数指针

    简单定义并间接调用 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<time.h> void singas ...

  4. 跟着园内spring cloud+.net core搭建微服务架构 服务消费出错问题

    http://www.cnblogs.com/longxianghui/p/7561259.html spring cloud+.net core搭建微服务架构:服务发现 最近在跟随着园区内的这个博客 ...

  5. sql server update 的批量更新方法

    假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price:另外一张表是ProductPrice表,我们要将ProductPrice表中的价格字段Price更新为Price表中 ...

  6. span标签

    <span>在行内定义一个区域,也就是一行内可以被<span>划分成好几个区域,从而实现某种特定效果.<span>本身没有任何属性. <span> 与& ...

  7. asp.net文件夹上传源码

    ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...

  8. git命令如何删除文件或文件夹

    拉取远程仓到本地 git clone ×× cd ××× 查看分支 git branch -a 切换到想要操作的分支 git checkout 想要操作的分支 在本地仓库删除文件 git rm 我的文 ...

  9. NodeJS基础知识

    console.log方法: console.log("This is a test string"); node app.js 使用重定向标准输出流: node app.js 1 ...

  10. cesium地下模式(地表透明)3

    这篇博客主要解决“瓦片的白色网格”问题 设置skirt=0可以解决这个问题,需要设置3个地方 1.HeightmapTerrainData.js createMesh方法 this._skirtHei ...