数组链表堆栈和队列

2023-11-07

转自:http://blog.csdn.net/tm_wb/article/details/6319146

数组链表堆栈和队列


    数组链表堆栈和队列是最基本的数据结构,任何程序都会涉及到其中的一种或多种。

1数组

    数组是最最基本的数据结构,很多语言都内置支持数组。数组是使用一块连续的内存空间保存数据,保存的数据的个数在分配内存的时候就是确定的:


1.1包含n个数据的数组

    访问数组中第n个数据的时间花费是O(1)但是要在数组中查找一个指定的数据则是O(N)。当向数组中插入或者删除数据的时候,最好的情况是在数组的末尾进行操作,时间复杂度是O(1),但是最坏情况是插入或者删除第一个数据,时间复杂度是O(N)。在数组的任意位置插入或者删除数据的时候,后面的数据全部需要移动,移动的数据还是和数据个数有关所以总体的时间复杂度仍然是O(N)


1.2向数组中插入数据

2链表

    链表是在非连续的内存单元中保存数据,并且通过指针将各个内存单元链接在一起,最有一个节点的指针指向NULL。链表不需要提前分配固定大小存储空间,当需要存储数据的时候分配一块内存并将这块内存插入链表中。

    在链表中查找第n个数据以及查找指定的数据的时间复杂度是O(N),但是插入和删除数据的时间复杂度是O(1),因为只需要调整指针就可以:


2.1链表


2.2向链表中插入一个数据


2.3从链表中删除一个数据

    向上面这样的链表结构在插入和删除的时候编程会比较困难,因为需要记住当前节点的前一个节点,这样才能完成插入和删除。为了简便通常使用带有头节点的链表:


2.4带有头节点的单链表

    上面的链表是单链表,此外还有双链表,就是节点中包含指向下一个节点的指针和指向上一个节点的指针:


2.5双向链表

    不带有头节点的双向链表在插入和删除数据的时候也不会出现单链表那样的问题。此外还有一种链表是循环链表,它是将双向链表的头尾相接:


2.6双向循环链表

    向循环双向链表和循环链表中插入或者从中删除数据只是多移动几个指针。

3堆栈

    堆栈实现了一种后进先出的语义(LIFO)。可以使用数组或者是链表来实现它:


3.1堆栈

    对于堆栈中的数据的所有操作都是在栈的顶部完成的,只可以查看栈顶部的数据,只能够向栈的顶部压入数据,也只能从栈的顶部弹出数据。

4队列

    队列实现了先入先出的语义(FIFO)。队列也可以使用数组和链表来实现:


4.1队列

        队列只允许在队尾添加数据,在队头删除数据。但是可以查看队头和队尾的数据。还有一种是双端队列,在两端都可以插入和删除:


4.2双端队列

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组链表堆栈和队列 的相关文章

  • Python网络爬虫实战:爬取携程网酒店评价信息

    这个爬虫是在一个小老弟的委托之下写的 他需要爬取携程网上的酒店的评价数据 来做一些分词和统计方面的分析 然后来找我帮忙 爬这个网站的时候也遇到了一些有意思的小麻烦 正好整理一下拿出来跟大家分享一下 这次爬取过程稍微曲折 各种碰壁 最终成功的
  • Java时间格式化

    Java中的时间格式化是将时间对象转换为指定格式的字符串 或将字符串解析为时间对象 Java提供了丰富的时间格式化API 可以帮助我们方便地处理时间格式化 本篇技术博客将详细介绍Java时间格式化的定义 使用和示例代码 时间格式化 Java

随机推荐

  • 【JavaEE初阶】第八节.多线程(基础篇)阻塞队列(案例二)

    作者简介 大家好 我是未央 博客首页 未央 303 系列专栏 JavaEE初阶 每日一句 人的一生 可以有所作为的时机只有一次 那就是现在 文章目录 一 阻塞队列概论 1 1 阻塞队列的概念与作用 1 2 阻塞队列的应用场景 生产者消费者模
  • Mac 不是私密连接,拒绝访问

    备忘 1 鼠标停在该页面 直接键盘输入 输入时没有任何显示 thisisunsafe 2 刷新页面 参考 Mac chrome 提示您的连接不是私密连接 没有继续访问 20201116更新 同样适用于在打开git图片时 thisisunsa
  • 最简单的大屏适配解决方案---autofit.js

    在工作开发当中 我们避免不了要去做大屏 那么做大屏其实最难的点和最核心的问题就是适配 下面为大家介绍最好用的大屏解决方案 autofit js 一行代码搞定 开袋即食 效果图展示 可根据窗口大小进行自动适配 使用方法 1 npm下载 npm
  • 元代理模型可迁移对抗攻击

    1 引言 该论文是关于黑盒攻击可迁移性的文章 在当前大量的研究中 许多方法直接攻击代理模型并获得的可迁移性的对抗样本来欺骗目标模型 但由于代理模型和目标模型之间的不匹配 使得它们的攻击效果受到局限 在该论文中 作者从一个新颖的角度解决了这个
  • centos 8 配置LVS+ keepalived 高可用

    作者 小刘在C站 个人主页 小刘主页 每天分享云计算网络运维课堂笔记 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的绽放 树高千尺 落叶归根人生不易 人间真情 前言 现在的努力的程度就是以后生活的好坏 目录
  • 【GPU】显卡算力对比表

    参考链接 英伟达GPU算力表 https developer nvidia com cuda gpus 显卡算力对比表
  • 用paltform框架的驱动形式,编写驱动,应用层程序,在应用层通过ioctl控制LED灯流水,当按键KEY1按下,让风扇转动

    驱动文件 include
  • 期权保证金算法

    看涨期权保证金算法 股指期权当日结算价 沪深300当日收盘价 max 股指期权保证金调整系数 虚值额 沪深300当日收盘价 股指期权保证金调整系数 最低保障系数 合约乘数 看涨期权虚值额 max 股指期权行权价格 沪深300当日收盘价 0
  • pytorch做自己的目标检测模型(训练部分)

    pytorch做自己的目标检测模型 先放上代码的百度云链接 链接 https pan baidu com s 1ms12 2aUvm5M9hjofP8UHA 提取码 8xpf 第一章 制作数据集 要训练自己的pytorch目标检测模型 第一
  • YOLOV7训练自己的数据集(只需四步快速上手)

    论文地址 https arxiv org abs 2207 02696 源码地址 https github com WongKinYiu yolov7 一 数据集 直接把YOLOV5的数据集复制到根目录下 Images文件夹中是图片 Lab
  • coverity代码检测工具介绍_微服务测试之静态代码扫描

    静态代码扫描为整个发展组织增加价值 无论您在开发组织中发挥的作用如何 静态代码扫描解决方案都具有附加价值 拥有软件开发中所需要的尖端功能 最大限度地提高质量并管理软件产品中的风险 背景 微服务架构模式具有服务间独立 可独立开发部署等特点 独
  • 函数调用约定(整理稿)

    函数调用约定 整理稿 Function calling convention 在C语言中 假设我们有这样的一个函数 int function int a int b 调用时只要用result function 1 2 这样的方式就可以使用这
  • 【华为OD机试】仿 LISP 运算 (C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 机器学习实战:Python基于K近邻KNN进行分类预测(四)

    文章目录 1 前言 1 1 K近邻的介绍 1 2 K近邻的应用 2 二维数据集演示 2 1 导入函数 2 2 导入数据 2 3 训练模型及可视化 3 莺尾花数据集全数据演示 3 1 导入函数 3 2 导入数据 3 3 训练模型及预测 4 模
  • Linux 平台一种进程代码注入方法

    Linux 平台一种进程代码注入方法 Posted on 2012年06月7日 用于在目标程序的 main 函数执行前完成一些操作 特定情况下用来调试还是不错的 源代码 fakemain c Heiher
  • 开发H5项目在手机查看

    一 电脑的防火墙关掉 二 cmd输入 ipconfig 获取自己电脑ip 三 电脑和手机要在同一wifi下 不过最好连自己热点 项目启动 手机网址打开 例 http ip 3000
  • python编程实战(一):用户登录模块,用户注册、登录、信息管理、功能设计与实现!

    用户登录模块 前言 思维导图 1 判断首次启动 2 用户注册 3 管理员信息 登录 4 用户登录 5 完整代码 前言 思维导图 用户登录模块是最基本的模块之一 主要设计的有当前用户存在判断 用户注册 用户登录名和密码的保存 用户信息输出等等
  • html文件上传到云服务器,把html文件上传到云服务器上

    把html文件上传到云服务器上 内容精选 换一换 需要准备的软件和工具如表1 软件和工具所示 如果Linux操作系统弹性云服务器未安装密码重置插件 可以参见本节内容重新设置密码 本节操作重置的是root用户的密码 您可以重置完root密码后
  • 自媒体创作必备的6个网站,助你打造爆款作品

    很多新人在入行自媒体时 不知道需要用到什么样的工具软件 导致其效率非常的低 其实在创作过程中使用自媒体工具还是非常有必要的 一方面帮助你快速做好自己的作品 另一方面也可以打造出更加优秀和火爆的作品 下面就和大家分享一下比较常用的一些自媒体工
  • 数组链表堆栈和队列

    转自 http blog csdn net tm wb article details 6319146 数组链表堆栈和队列 数组链表堆栈和队列是最基本的数据结构 任何程序都会涉及到其中的一种或多种 1数组 数组是最最基本的数据结构 很多语言