Python数据结构之线性顺序表

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

[[410561]]

本文转载自微信公众号「python与大数据分析」,作者一只小小鸟鸟 。转载本文请联系python与大数据分析公众号。

线性表(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 = maxlength 
        self.currentnum = 0 
        self.data = [None] * self.maxlength 
        self.datatype = datatype 
 
    def __setitem__(self, key, value): 
        if not isinstance(keyint): 
            raise TypeError 
        if not isinstance(value, self.datatype): 
            raise TypeError("数据类型不符合{0}".format(self.datatype)) 
        if 0 <= key <= self.currentnum: 
            self.data[key-1] = value 
        else
            raise IndexError 
 
    def __getitem__(self, key): 
        if not isinstance(keyint): 
            raise TypeError 
        if 1 <= key <= self.currentnum: 
            return self.data[key-1] 
        else
            raise IndexError 
 
    def __len__(self): 
        return self.currentnum 
 
    def __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 == 0 
 
    def isfull(self): 
        return self.currentnum == self.maxlength 
 
    def maxlength(self): 
        return self.maxlength 
 
    def 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+1 
        raise 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'
            return 
        else
            self.data[self.currentnum]=value 
            self.currentnum+=1 
 
    def insert(self, key, value): 
        if not isinstance(key,self.datatype): 
            raise TypeError 
        if key<1: 
            raise IndexError 
        if 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]=value 
            self.currentnum+=1 
 
    def delete(self, key): 
        if not isinstance(key, self.datatype): 
            raise TypeError 
        if key < 1 and key>self.currentnum: 
            raise IndexError 
        else
            for i in range(key-1,self.currentnum): 
                self.data[i]=self.data[i+1] 
            self.currentnum-=1 
 
    def 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-1 
        while 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): 
        pass 
 
 
if __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 list 
    print(a) 
    a.reverse() 
    print(a) 
    a.append(3) 
    a.append(5) 
    # a.append(2) 
    print(a) 
    a.sort() 
    print(a) 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.

结果如下:

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] 

False 
False 






__str__=[1, 2, 3] 

__str__=[1, 4, 2, 3] 
__str__=[1, 2, 3] 

__str__=[1, 2] 

__str__=[1, 4] 

__str__=[1, 4] 
__str__=[4, 1] 
__str__=[4, 1, 3, 5] 
__str__=[1, 3, 4, 5] 
 
Process finished with exit code 0 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

 

责任编辑:武晓燕 来源: python与大数据分析
相关推荐

2018-06-06 08:54:23

数据结构存储

2009-08-12 18:35:17

C#数据结构

2009-08-11 14:30:32

C#数据结构与算法

2023-11-06 06:43:23

单链表查询数据结构

2012-04-28 14:21:47

Java数据结构线性结构

2009-08-11 14:14:42

C#数据结构与算法

2021-04-20 09:18:41

顺序存储结构

2021-05-12 14:09:35

链表数据结构线性结构

2021-07-16 07:57:34

Python数据结构

2009-08-11 14:36:17

C#数据结构与算法线性表

2021-07-15 06:43:12

Python数据结构

2017-03-01 13:58:46

Python数据结构链表

2021-07-13 07:52:03

Python数据结构

2020-06-09 08:13:15

PHP数据结构

2023-03-13 10:08:31

数据结构算法

2023-03-28 07:44:23

数据结构数组

2023-02-08 07:52:36

跳跃表数据结构

2017-08-31 09:45:43

JavaArrayList数据

2009-07-02 14:59:28

Java考研试题

2012-02-02 10:21:05

单链表nexthead
点赞
收藏

51CTO技术栈公众号