数据结构与算法python版本之线性结构之无序表抽象数据类型有序链表抽象数据类型和总结

我们知道,列表List是一种简单强大的数据集结构,提供了丰富的操作接口;但是并不是所有的编程语言都提供了List数据类型,有时候需要程序员自己实现。

那么什么是列表呐?

列表是一种数据项按照相对位置存放的数据集;特别的,被称为“无序表unordered list” 其中数据项只按照存放位置来索引,如第1个,第2个。。。。。。最后一个等。
所以无序列表的操作有如下:
在这里插入图片描述
在这里插入图片描述
采用链表实现无序表,为了实现无序表数据结构,可以采用链接表的方案;虽然列表数据结构要求保持数据项的前后相对位置,但这种前后位置的保持,并不要求数据项一次存放在连续的存储空间;如果在数据项之间建立链接指向,就可以保持其前后相对位置。

链表实现:节点Node

链表实现的最基本元素是节点Node
每个节点至少要包含两个信息:数据项本身,以及指向下一个节点的引用信息;注意,next为None的意义是没有下一个节点了,这个很重要。

链表实现:无序表UnorderedList

可以采用链接节点的方式构建数据集来实现无序表;链表的第一个和最后一个节点最重要,如果想访问到链表中的所有节点,就必须从第一个节点开始沿着链接遍历下去
所以无序表必须要有对第一个节点的引用信息
随着数据项的加入,无序表的head始终指向链条中的第一个节点。

无序表的链表实现

接下来,我们考虑如何实现向无序表中添加数据项,实现add方法
由于无序表并没有限定数据项之间的顺序
新数据项可以加入到原表的任何位置
按照实现的性能考虑,应添加到最容易加入的位置上
由链表结构我们知道:要访问到整条链上的所有数据项,都必须从表头head开始沿着next链接逐个向后查找,所以添加新数据项最快捷的位置是表头,整个链表的首位置。
链表实现:可以使用add方法实现
链表实现:Size,size指的是从链条头head开始遍历到表尾同时用变量累加经过的节点个数
链表实现:search,从链表头head开始遍历到表尾,同时判断当前节点的数据项是否目标
链表实现:remove(item)方法,首先要找到这个item,这个过程跟search一样,但在删除节点时,需要特别的技巧;
current指向的时当前匹配数据项的节点,而删除需要把前一个节点的next指向current的下一个节点,所以我们在search current的同时,还要维护前一个(previous)节点的引用;
找到item之后,current指向item节点,previous指向前一个节点,开始执行删除,需要区分两种情况:current是首个节点,或者是位于链条中间的节点。

抽象数据类型:有序表OrderedList

有序表是一种数据项依照其某可比性质(如整数大小、字母表先后)来决定在列表中的位置,越小的数据项越靠近列表的头,越靠前。

在实现有序表的时候,需要记住的是,数据项的相对位置,取决于他们之间的大小比较。
在这里插入图片描述

在无序表的search方法中,如果需要查找的数据项不存在,则会搜遍整个链表,直到表尾;对于有序表来说,则可以利用链表节点有序排列的特性,来为search节省不存在数据项的查找时间。

相比无序表,改变最大的方法是add,因为add方法必须保证加入的数据项添加在合适的位置,以维护整个链表的有序性。比如在(17,26,54,77,93)的有序表中,加入数据项31,我们需要沿着链表,找到第一个比31大的数据项54,将31插入到54的前面。

总结

  1. 线性数据结构Linear DS将数据项以某种线性的次序组织起来
  2. 栈Stack维持了数据项后进先出LIFO的次序,stack的基本操作包括push pop isEmpty
  3. 队列Quene维持了数据项先进先出FIFO的次序,quene的本机操作包括enqueue dequeue isEmpty
  4. 书写表达式的方法有前缀prefix、中缀infix和后缀postfix三种,由于栈具有次序反转的特性,所以栈结构适合用于开发表达式求值和转换的算法
  5. 模拟系统可以通过一个对现实世界问题进行抽象建模,并且加入随机数动态运行,为复杂问题的决策提供各种情况的参考,队列quene可以用来进行模拟系统的开发
  6. 双端队列Deque可以同时具备栈和队列的功能,deque的主要操作包括addFront addRear removeFront removeRear isEmpty
  7. 列表List是数据项能够维持相对位置的数据集
  8. 链表的实现,可以保持列表维持相对位置的特点,而不需要连续的存储空间
  9. 链表实现时,其各种方法,对链表头部head需要特别的处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/316321.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你读过最冷门,但「含金量极高」的书是什么?

这是一本比较冷门的书**《设计规则:模块化的力量》**,虽然豆瓣上只有58个评价,但是确实能学到很多东西。 这本书对我非常深远。不是是投资,创业,还是其他领域,模块化思想都能帮上你。这本书告诉我们生万物…

HarmonyOS 组件通用属性之尺寸设置

本文 我们一起来看一下 组件通用属性里面的 尺寸设置 具体来说 就是针对一个组件 进行宽高 边距等属性设置 我们可以先来看一张图 这是一个WEB PC端开发的视图 它是一个盒子模型 界面认为 每个元素都是一个盒子 最外面是 margin 外边距 然后 元素外围有一圈 border 边框 然后…

定岗定编设计:企业职能部门定岗定编设计项目成功案例

一、客户背景及现状分析 某大型车辆公司隶属于某央企集团,建于20世纪60年代,是中国高速、重载、专用铁路车辆生产经营的优势企业,轨道车辆制动机研发制造的主导企业,是隶属于国内最大的轨道交通设备制造上市企业的骨干二级公司。公…

[每周一更]-(第51期):Go的调度器GMP

参考文献 https://learnku.com/articles/41728http://go.cyub.vip/gmp/gmp-model.html#g-m-phttps://blog.csdn.net/ByteDanceTech/article/details/129292683https://www.ququ123.top/2022/04/golang_gmp_principle/ 什么是GMP? GMP模型是Go语言并发模型的核心概念&#x…

Debezium发布历史43

原文地址: https://debezium.io/blog/2018/12/05/automating-cache-invalidation-with-change-data-capture/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. 通过更改数据捕获自动使缓存失效 2018 年…

计算机基础面试题 |06.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

k8s的陈述式管理

k8s的陈述式管理: 所谓的陈述式管离也就是命令行工具 优点:90%以上都可以满足 对资源的增删查比较方便,对改不是很友好 缺点:命令比较冗长,复杂,难记 声明式: k8s当中的YAML文件来实现资源管…

SpringBoot整合ElasticSearch实现CRUD操作

本文来说下SpringBoot整合ES实现CRUD操作 文章目录 概述项目搭建ES简单的crud操作本文小结 概述 SpringBoot支持两种技术和es交互。一种的jest,还有一种就是SpringData-ElasticSearch。根据引入的依赖不同而选择不同的技术。反正作为spring全家桶,目前是…

数仓可视化5--superset的部署安装

1、superset简介 Apache Superset 是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎,拥有丰富的图表展示形式,并且支持自定义仪表盘。 2、安装步骤 2.1、安装Miniconda3 …

冒泡排序-排序算法

前言 如果有6个人站成一排,要将他们按从矮到高的顺序排列。你可能有多种方式来完成。但是如果其中有一个人特别高,比他身边的人高,在队伍中特别明显,你可以轻易看出那个最高的需要和身边的人交换位置,这是冒泡排序的核…

aspose通过开始和结束位置关键词截取word另存为新文件

关键词匹配实体类: Data EqualsAndHashCode(callSuper false) public class TextConfig implements Serializable {private static final long serialVersionUID 1L;/*** 开始关键词,多个逗号分隔*/private String textStart ;/*** 结束关键词&#x…

【HBuilder + IDEA + XFtp + XShell】打包部署上线

简述 前后端分离:需要将前后端的程序包打包发送至应用Linux服务器上Linux服务器 (1)需要启用SSHD服务,该服务会监听22号端口(一般是开启的) (2)搭建:MYSQL、Nginx、jdk、…