数据结构:线性数据结构(4)-列表(栈,队列,deques, 列表)
一、列表
1.1列表的抽象数据类型
列表是项的集合,其中每个项保持相对于其他项的相对位置。无序列表的结构是项的集合,其中每个项保持相对于其他项的相对位置。下面给出了一些可能的无序列表操作。
- List() 创建一个新的空列表。它不需要参数,并返回一个空列表。
- add(item) 向列表中添加一个新项。它需要 item 作为参数,并不返回任何内容。假定该 item 不在列表中。
- remove(item) 从列表中删除该项。它需要 item 作为参数并修改列表。假设项存在于列表中。
- search(item) 搜索列表中的项目。它需要 item 作为参数,并返回一个布尔值。
- isEmpty() 检查列表是否为空。它不需要参数,并返回布尔值。
- size()返回列表中的项数。它不需要参数,并返回一个整数。
- append(item) 将一个新项添加到列表的末尾,使其成为集合中的最后一项。它需要 item 作为参数,并不返回任何内容。假定该项不在列表中。
- index(item) 返回项在列表中的位置。它需要 item 作为参数并返回索引。假定该项在列表中。
- insert(pos,item) 在位置 pos 处向列表中添加一个新项。它需要 item 作为参数并不返回任何内容。假设该项不在列表中,并且有足够的现有项使其有 pos 的位置。
- pop() 删除并返回列表中的最后一个项。假设该列表至少有一个项。
- pop(pos) 删除并返回位置 pos 处的项。它需要 pos 作为参数并返回项。假定该项在列表中。
1.2有序列表的抽象数据类型
有序列表的列表类型。例如,如果上面所示的整数列表是有序列表(升序),则它可以写为 17,26,31,54,77和93
。由于 17 是最小项,它占据第一位置。同样,由于 93 是最大的,它占据最后的位置。
有序列表的结构是项的集合,其中每个项保存基于项的一些潜在特性的相对位置。排序通常是升序或降序,并且我们假设列表项具有已经定义的有意义的比较运算。许多有序列表操作与无序列表的操作相同。
- OrderedList() 创建一个新的空列表。它不需要参数,并返回一个空列表。
- add(item) 向列表中添加一个新项。它需要 item 作为参数,并不返回任何内容。假定该 item 不在列表中。
- remove(item) 从列表中删除该项。它需要 item 作为参数并修改列表。假设项存在于列表中。
- search(item) 搜索列表中的项目。它需要 item 作为参数,并返回一个布尔值。
- isEmpty() 检查列表是否为空。它不需要参数,并返回布尔值。
- size()返回列表中的项数。它不需要参数,并返回一个整数。
- index(item) 返回项在列表中的位置。它需要 item 作为参数并返回索引。假定该项在列表中。
- pop() 删除并返回列表中的最后一个项。假设该列表至少有一个项。
- pop(pos) 删除并返回位置 pos 处的项。它需要 pos 作为参数并返回项。假定该项在列表中。
2.列表的python实现
2.1实现无序列表:链表
#链表
class Node(object):def __init__(self, data, nextNode = None ):self.data = dataself.nextNode = nextNodedef getData(self):return self.datadef setData(self, newdata):self.data = newdatadef getNext(self):return self.nextNodedef setNext(self, newNext):self.nextNode = newNextclass unorderedList(object):def __init__(self, head = None):self.head = headdef isEmpty(self):return self.head == Nonedef add(self, data):newNode = Node(data)newNode.setNext(self.head)self.head = newNodedef size(self) :current = self.headcount = 0 while current != None:count += 1current = current.getNext () #return countdef search(self, newdata):current = self.headfound = Falsewhile not found and current != None:data = current.getData()if newdata == data:found = Trueelse:current = current.getNext()return founddef remove(self, newdata):current = self.headprevious = Nonefound = Falsewhile not found :data = current.getData()if data == newdata:found = Trueelse:previous = currentcurrent = current.getNext()if previous == None:self.head = current.getNext()else :previous.setNext(current.getNext())
2.2 有序链表
有区别的方法 add(),search()。
#有序列表
def orderdedList(object):def __init__(self, head = None):self.head = headdef search(self,item):current = self.headfound = Falsestop = Falsewhile current != None and not found and not stop:if current.getData() == item:found = Trueelse:if current.getData() > item:stop = Trueelse:current = current.getNext()return founddef add(self,item):current = self.headprevious = Nonestop = Falsewhile current != None and not stop:if current.getData() > item:stop = Trueelse:previous = currentcurrent = current.getNext()temp = Node(item)if previous == None:temp.setNext(self.head)self.head = tempelse:temp.setNext(current)previous.setNext(temp)
其他数据结构原理介绍实现:
栈:https://blog.csdn.net/qq_18888869/article/details/88086002
队列:https://blog.csdn.net/qq_18888869/article/details/88134592
deque:https://blog.csdn.net/qq_18888869/article/details/88137237
github代码:https://github.com/makang101/python-data-structure
数据结构:线性数据结构(4)-列表(栈,队列,deques, 列表)相关推荐
- 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)
C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...
- python数据结构-数组/列表/栈/队列及实现
首先 我们要分清楚一些概念和他们之间的关系 数组(array) 表(list) 链表(linked list) 数组链表(array list) 队列(queue) 栈(stack) li ...
- 数据结构——线性数据结构
一.什么叫数据结构 数据结构是计算机存储.组织数据的方式.指的是相互之间存在一种或多种特定关系的数据元素的集合.-- 百度百科 比喻成一个企业的组织结构,组织结构其实就是部门与部门之间的关系结构. 数 ...
- 数据结构~~~线性表复习(栈的应用)
// 线性表(栈的应用).cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include"iostream" #incl ...
- 2021 - 9 -下旬 数据结构- 线性表 -双端循环队列 - java实现
//循环双端队列:Circle Double Ended Queue //本质是对动态数组的优化 //队头队尾都可以添加或删除元素 //相比于普通循环队列需要注意的点是在队头插入元素时的对front前 ...
- python中的线性数据结构
''' https://www.bilibili.com/video/av19992545/?p=1python中的线性数据结构线性数据结构是计算机组织数据的一种方式必须满足以下四个要求才是线性数据结 ...
- 线性数据结构和非线性数据结构(java版)
文章目录 线性数据结构和非线性数据结构 数据结构 非线性结构 稀疏Sparsearray 数组 队列 数组模拟队列 数组模拟环形队列 链表 单链表 双向链表 约瑟夫问题 栈 数组模拟栈 使用栈完成表达 ...
- 数据结构(一)线性数据结构
数据结构分为:线性数据结构.非线性数据结构 线性数据结构包括:数组.线性表.栈.队列.串 非线性数据结构包括:多维数组.集合.树.Hash 1.数组 在Java中常用的数组util有String[], ...
- 数据结构——初识数据结构
数据结构(计算机408考研科目) 首先我们提出一个问题:数据结构是在学习什么? 带着这个疑问我们来观察一下我们身边的世界. 从一日三餐,吃穿住行来看: 1.我们有时不想做饭时,我们可以打开手机去点外卖 ...
- 数据结构:线性数据结构(1)-栈(栈,队列,deques, 列表)
栈,队列,deques, 列表是一类容器,他们数据项之间的顺序由添加或删除的顺序决定,一旦一个数据项被添加,它相对于前后元素一直保持该位置不变.注入此类的数据结构称为线性数据结构. 栈 栈(栈,队列, ...
最新文章
- php pdo 时间,php – 使用PDO执行时间记录查询 – 自动完成功能无效
- 深入解析阿里Android热修复技术原理
- 计算机科学与技术创新实验班是什么意思,计算机科学与技术系成立2010级创新实验班(图)...
- WINDOWS SERVER 2003从入门到精通之林之间的信任关系
- 今日早上出来还是阴天
- bzoj3884: 上帝与集合的正确用法 扩展欧拉定理
- java 构造函数 this_Java面向对象2--构造器(Constructor),this关键字
- socket网络编程(tcp udp)
- windows安装VS2015
- 5年码农吐血推荐10款用了就离不开的网站
- python随机生成licence plate numer
- 一分钟详解线结构光扫描系统
- jenkins + svn + maven +svn 实现当SVN提交代码后自动触发打包部署
- TouchID 指纹登录
- Zero-shot Cross-lingual Transfer of Prompt-based Tuning with a Unified Multilingual Prompt
- MCE | 神经元为胰腺癌细胞提供营养
- mysql表如何删除一条数据_mysql如何删除表中一行数据?
- Presto Iceberg 数据源 + Alluxio 使用以及最新进展介绍
- Java工程师培训课(十八【新的领域】)
- GIS理论知识(二)之GIS标准、体系结构及平台软件