线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。本文结合了互联网上的一些代码,以及结合百度百科关于线性顺序表的定义,实现了全部代码。

在稍复杂的线性表中,一个数据元素可由多个数据项(item)组成,此种情况下常把数据元素称为记录(record),含有大量记录的线性表又称文件(file)。

线性表中的个数n定义为线性表的长度,n=0时称为空表。在非空表中每个数据元素都有一个确定的位置,如用ai表示数据元素,则i称为数据元素ai在线性表中的位序。

线性表的相邻元素之间存在着序偶关系。如用(a1,…,ai-1,ai,ai+1,…,an)表示一个顺序表,则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,…,n-1时,ai有且仅有一个直接后继,当i=2,3,…,n时,ai有且仅有一个直接前驱 [1]  。

需要转换思想的是,线性表中的参数也好,最大数量也好,要在列表序号基础上加1

代码如下:

# 线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
# 在稍复杂的线性表中,一个数据元素可由多个数据项(item)组成,此种情况下常把数据元素称为记录(record),含有大量记录的线性表又称文件(file)。
# 线性表中的个数n定义为线性表的长度,n=0时称为空表。在非空表中每个数据元素都有一个确定的位置,如用ai表示数据元素,则i称为数据元素ai在线性表中的位序。
# 线性表的相邻元素之间存在着序偶关系。如用(a1,…,ai-1,ai,ai+1,…,an)表示一个顺序表,则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,…,n-1时,ai有且仅有一个直接后继,当i=2,3,…,n时,ai有且仅有一个直接前驱 [1]  。
# 1)MakeEmpty(L) 这是一个将L变为空表的方法
# 2)Length(L) 返回表L的长度,即表中元素个数
# 3)Get(L,i) 这是一个函数,函数值为L中位置i处的元素(1≤i≤n)
# 4)Prior(L,i) 取i的前驱元素
# 5)Next(L,i) 取i的后继元素
# 6)Locate(L,x) 这是一个函数,函数值为元素x在L中的位置
# 7)Insert(L,i,x)在表L的位置i处插入元素x,将原占据位置i的元素及后面的元素都向后推一个位置
# 8)Delete(L,p) 从表L中删除位置p处的元素
# 9)IsEmpty(L) 如果表L为空表(长度为0)则返回true,否则返回false
# 10)Clear(L)清除所有元素
# 11)Init(L)同第一个,初始化线性表为空
# 12)Traverse(L)遍历输出所有元素
# 13)Find(L,x)查找并返回元素
# 14)Update(L,x)修改元素
# 15)Sort(L)对所有元素重新按给定的条件排序
# 16) strstr(string1,string2)用于字符数组的求string1中出现string2的首地址
class Sequencelist(object):def __init__(self, datatype=int, maxlength=10):self.maxlength = maxlengthself.currentnum = 0self.data = [None] * self.maxlengthself.datatype = datatypedef __setitem__(self, key, value):if not isinstance(key, int):raise TypeErrorif not isinstance(value, self.datatype):raise TypeError("数据类型不符合{0}".format(self.datatype))if 0 <= key <= self.currentnum:self.data[key-1] = valueelse:raise IndexErrordef __getitem__(self, key):if not isinstance(key, int):raise TypeErrorif 1 <= key <= self.currentnum:return self.data[key-1]else:raise IndexErrordef __len__(self):return self.currentnumdef __repr__(self):return '__repr__={}'.format(str(self.data))def __str__(self):return '__str__={}'.format(str(self.data[:self.currentnum]))def isempty(self):return self.currentnum == 0def isfull(self):return self.currentnum == self.maxlengthdef maxlength(self):return self.maxlengthdef makeempty(self):self.clear()def length(self):return self.__len__()def count(self):return self.__len__()def get(self, key):return self.__getitem__(key)def set(self, key,value):self.__setitem__(key,value)def prior(self, key):assert key>1 and key <self.currentnum+1 ,'数组越界'return self.data[key-2]def next(self, key):assert key>=1 and key <self.currentnum, '数组越界'return self.data[key]def locate(self, value,start=0):for i in range(start,self.currentnum):if self.data[i]==value:return i+1raise ValueError("{} is not find in list".format(value))def index(self,value,start=0):return self.locate(value,start)def append(self,value):if self.isfull():print('list is full')returnelse:self.data[self.currentnum]=valueself.currentnum+=1def insert(self, key, value):if not isinstance(key,self.datatype):raise TypeErrorif key<1:raise IndexErrorif key>=self.currentnum:self.append(value)else:for i in range(self.currentnum,key-1,-1):self.data[i]=self.data[i-1]self.data[key-1]=valueself.currentnum+=1def delete(self, key):if not isinstance(key, self.datatype):raise TypeErrorif key < 1 and key>self.currentnum:raise IndexErrorelse:for i in range(key-1,self.currentnum):self.data[i]=self.data[i+1]self.currentnum-=1def pop(self):return self.delete(self.currentnum)def clear(self):self.__init__()def init(self):self.__init__()def reverse(self):i,j=0,self.currentnum-1while i<j:self.data[i],self.data[j]=self.data[j],self.data[i]i,j=i+1,j-1#print(self.data)def find(self, value,start=0):return self.locate(self,value,start)def update(self, key,value):self.__setitem__(key,value)def sort(self):for i in range(0,self.currentnum-1):for j in range(i+1,self.currentnum):if self.data[i]>self.data[j]:self.data[i],self.data[j]=self.data[j],self.data[i]def strstr(string1, string2):passif __name__ == '__main__':a=Sequencelist()a.append(1)a.append(2)a.append(3)print(a)print(repr(a))b=a.locate(2)print(b)print(a.isempty())print(a.isfull())print(len(a))print(a.length())#print(a.prior(1))# AssertionError: 数组越界print(a.prior(2))print(a.prior(3))print(a.next(1))print(a.next(2))print(a)print(a.get(2))a.insert(2,4)print(a)a.delete(2)print(a)print(a.length())a.pop()print(a)print(a.length())a.update(2,4)print(a)print(a.index(4))# print(a.index(5))# ValueError: 5 is not find in listprint(a)a.reverse()print(a)a.append(3)a.append(5)# a.append(2)print(a)a.sort()print(a)

结果如下:

C:\python\pyproject\pythonalgorithms\venv\Scripts\python.exe C:/python/pyproject/pythonalgorithms/sequencelist.py
__str__=[1, 2, 3]
__repr__=[1, 2, 3, None, None, None, None, None, None, None]
2
False
False
3
3
1
2
2
3
__str__=[1, 2, 3]
2
__str__=[1, 4, 2, 3]
__str__=[1, 2, 3]
3
__str__=[1, 2]
2
__str__=[1, 4]
2
__str__=[1, 4]
__str__=[4, 1]
__str__=[4, 1, 3, 5]
__str__=[1, 3, 4, 5]Process finished with exit code 0

python数据结构之线性顺序表相关推荐

  1. java实现线性顺序表

    2019独角兽企业重金招聘Python工程师标准>>> /*** * 线性顺序表*/ public class SequentialLinearList {private char[ ...

  2. python线性表和队列_[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列...

    python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构 ...

  3. Python 数据结构 之 线性表 的链式存储结构

    用Python 来实现 C语言中 线性表的链式存储结构. 文章转载请注明:  Python 数据结构 之 线性表 的链式存储结构 代码地址 https://github.com/WenkeZhou/P ...

  4. C++实现线性顺序表的初始化,插入,删除,销毁,清空等功能

    C++实现线性顺序表的初始化,插入,删除,销毁,清空等功能 以下代码主要严蔚参考敏主编的<数据结构>(C语言)编写 //线性顺序表 #include <iostream> #d ...

  5. 数据结构之——《顺序表》

    数据结构之--<顺序表> 1.含义 2.分类 3.接口函数实现 4.顺序表的优缺点 1.含义 顺序表示用一段纹理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组 ...

  6. c语言线性顺序表,C语言程序——线性顺序表.doc

    C语言程序--线性顺序表.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...

  7. 【数据结构】【顺序表】 SqList *L与SqList*L的区别

    [数据结构][顺序表] SqList *&L与SqList*L的区别 显然,对于顺序表的抽象数据模型中的函数,其参数使用各不相同. SqList *&L的情况 它的意思是,L是对Lis ...

  8. 数据结构之动态顺序表(含游戏菜单)

    上一篇文章我们谈了数据结构的静态顺序表,以及实现了静态顺序表,具体可以看我的上一篇文章->>>数据结构之静态顺序表. 我们可以知道,静态顺序表的缺点是:  因为使用的是定长数组,所以 ...

  9. 数据结构(04)— 线性顺序表实战

    1. 设计思路 本实战的实质是完成对学生成绩信息的建立.查找.插入.修改.删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运 ...

最新文章

  1. python打包成exe_Python打包文件为exe,PyInstaller应用
  2. 【渝粤题库】陕西师范大学164111 Java及JSP动态网页编程与应用 作业 (高起专)
  3. 中国股市暴涨暴跌全记录
  4. android优化中国风应用、完整NBA客户端、动态积分效果、文件传输、小说阅读器等源码...
  5. 一条空间不足报警的分析
  6. ndk编译出来的executable动态库入口函数的参数错乱
  7. System.Diagnostics.debug.Assert(条件)的使用
  8. GBin1分享:一个漂亮的jQuery页面内容导航插件 - Flexiable Nav
  9. 网络攻击盯上民生领域,应对DDoS和APT攻击,如何有效防御?
  10. 计算机配件价格上涨,显卡涨价风声再起 PC配件涨价什么时候是个头
  11. 绘图神器draw.io(写文必备)
  12. c语言的一颗会变色的圣诞树
  13. 336高校毕业设计选题
  14. 使用ML.NET实现NBA得分预测
  15. 【答粉丝问】面试时,面试官说“谈谈你的缺点”时,该怎么回答?
  16. 交换机和路由器技术-15-链路聚合
  17. node16新版本安装node-sass报错
  18. Vue入门(安装配置启动项目)
  19. 利用卷积处理图片的实例(图像模糊,锐化...)
  20. 【松岩早盘视点】2019-09-30

热门文章

  1. 看完这些在HW面试官面前横着走 HW面试常见问题大合集(适合第一次参加)
  2. M洞察|“MOBA”还是“MMO”?2023上半年热门手游大盘点来了,拯救你的游戏荒
  3. 微信第三方平台之代开发小程序(二)
  4. 【清北学堂济南刷题班】集合
  5. 【已解决】PyLaTeX 编译中文出现乱码
  6. ps修改图片中的图片尺寸
  7. 英文论文中常见拉丁语/英语缩写整理
  8. 微信小程序懒加载测试
  9. 后羿 05 ‖ 九婴
  10. 计算机组成北大,计算机组成原理-PKUSEI.PDF