当前位置: 首页 > news >正文

数据结构栈、队列、链表、散列表

栈(stack)

栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶(top)。它是后进先出(LIFO)的。对栈的基本操作只有 push(进栈)和 pop(出栈)两种,前者相当于插入,后者相当于删除最后的元素。

队列(queue)

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

image-20240111210049424

链表(Link)

链表是一种数据结构,和数组同级。比如,Java 中我们使用的 ArrayList,其实现原理是数组。而LinkedList 的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。

image-20240111210119711

散列表(Hash Table)

散列表(Hash table,也叫哈希表)是一种查找算法,与链表、树等算法不同的是,散列表算法在查找时不需要进行一系列和关键字(关键字是数据元素中某个数据项的值,用以标识一个数据元素)的比较操作。

散列表算法希望能尽量做到不经过任何比较,通过一次存取就能得到所查找的数据元素,因而必须要在数据元素的存储位置和它的关键字(可用 key 表示)之间建立一个确定的对应关系,使每个关键字和散列表中一个唯一的存储位置相对应。因此在查找时,只要根据这个对应关系找到给定关键字在散列表中的位置即可。这种对应关系被称为散列函数(可用 h(key)表示)。

用的构造散列函数的方法有:

(1)直接定址法: 取关键字或关键字的某个线性函数值为散列地址。即:h(key) = key 或 h(key) = a * key + b,其中 a 和 b 为常数。

(2)数字分析法

(3)平方取值法: 取关键字平方后的中间几位为散列地址。

(4)折叠法:将关键字分割成位数相同的几部分,然后取这几部分的叠加和作为散列地址。

(5)除留余数法:取关键字被某个不大于散列表表长 m 的数 p 除后所得的余数为散列地址,即:h(key) = key MOD p p ≤ m

(6)随机数法:选择一个随机函数,取关键字的随机函数值为它的散列地址,即:h(key) = random(key)

相关文章:

  • js_BOMDomAjax
  • 联邦学习中聚合算法可能怎样创新,智慧农业结合什么数学理论或知名理论实现创新并发表文章
  • S7-200SMART实例之冒泡法排序子程序
  • 能赚钱的GPT Store正式上线!如何将自己的 GPT 放到商店中?
  • 红队打靶练习:BREACH: 1
  • 【计算机网络】TCP原理 | 可靠性机制分析(三)
  • PyCharm使用手册
  • vim常用命令总结
  • JSON格式插件-VUE
  • docker一键安装
  • 手写一个starter来理解SpringBoot的自动装配
  • vue配置qiankun及打包上线
  • 【复现】DiffTalk
  • Java面试——框架篇
  • 【MATLAB】快速绘制曲线图的形状,粗细,颜色
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 08.Android之View事件问题
  • 2019.2.20 c++ 知识梳理
  • Android框架之Volley
  • EventListener原理
  • Git学习与使用心得(1)—— 初始化
  • JavaScript 基础知识 - 入门篇(一)
  • Javascript弹出层-初探
  • JSONP原理
  • js如何打印object对象
  • Spring Boot快速入门(一):Hello Spring Boot
  • 编写高质量JavaScript代码之并发
  • 从0实现一个tiny react(三)生命周期
  • 从setTimeout-setInterval看JS线程
  • 听说你叫Java(二)–Servlet请求
  • 我是如何设计 Upload 上传组件的
  • 想写好前端,先练好内功
  • 字符串匹配基础上
  • 阿里云服务器购买完整流程
  • 积累各种好的链接
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #Spring-boot高级
  • #考研#计算机文化知识1(局域网及网络互联)
  • (04)odoo视图操作
  • (1)(1.11) SiK Radio v2(一)
  • (floyd+补集) poj 3275
  • (poj1.3.2)1791(构造法模拟)
  • (八)Spring源码解析:Spring MVC
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)鸿鹄云架构一服务注册中心
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • ****Linux下Mysql的安装和配置
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Compact Framework 3.5 支持 WCF 的子集