一、顺序表

顺序表是指采用顺序存储的方式来存储数据元素的线性表,顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

1.1 顺序表结构

顺序表中包括元素存储区的容量和当前表中已有的元素个数两项。

python顺序表的实现 python顺序表代码_python

1.2 顺序表的两种基本实现方式


  • 图1为一体式结构,存储表信息的单元与元素存储区以连续的方式安排在一块存储区里,两部分数据的整体形成一个完整的顺序表对象。一体式结构整体性强,易于管理。但是由于数据元素存储区域是表对象的一部分,顺序表创建后,元素存储区就固定了。
  • 图2为分离式结构,表对象里只保存与整个表有关的信息(即容量和元素个数),实际数据元素存放在另一个独立的元素存储区里,通过链接与基本表对象关联。

1.3 python实现顺序表

# -*- coding: utf-8 -*-  
# time: 2022/9/27 10:07  
# file: SequenceList.py  
# author: Meng  
# description:  
  
  
class SequenceList():  
    def __init__(self, max_list=20):  
        self.max_list = max_list             # 容量  
        self.num_list = 0                    # 元素个数  
        self.seq_list = [None] * self.max_list   # 顺序表本身  
  
    # 计算顺序表中元素数量  
    def counter(self):  
        print(f'列表容量为{self.max_list},现在列表元素个数为{self.num_list}\n')  
  
    # 显示顺序表所有元素  
    def show(self):  
        print(f'当前顺序表为{self.seq_list}')  
  
    """  
        从顺序表添加元素  
    """  
    # 头插法  
    def add(self, value):  
        assert self.num_list < self.max_list,\  
            "元素已满,添加元素失败"  
        for j in range(self.num_list, 0, -1):  
            self.seq_list[j] = self.seq_list[j - 1]  
        self.seq_list[0] = value  
        self.num_list += 1  
  
    # 尾插法  
    def append(self, value):  
        assert self.num_list < self.max_list,\  
            "元素已满,添加元素失败"  
        self.seq_list[self.num_list] = value  
        self.num_list += 1  
  
    # 任意位置插入  
    def insert(self, index, value):  
        assert 0 <= index <= self.max_list, "index必须在范围内"  
        assert self.num_list < self.max_list,\  
            "元素已满,添加元素失败"  
        for j in range(self.num_list, index, -1):  
            self.seq_list[j] = self.seq_list[j - 1]  
        self.seq_list[index] = value  
        self.num_list += 1  
  
    # 判断某元素是否存在于顺序表中  
    def isExist(self, value):  
        for j in range(self.num_list):  
            if self.seq_list[j] == value:  
                return True  
        return False  
    # 查询某元素的位置  
    def find_index(self, value):  
        if self.isExist(value):  
            for j in range(self.num_list):  
                if self.seq_list[j] == value:  
                    return j  
        else:  
            print(f"该元素不存在")  
  
    # 根据索引查询对应的元素  
    def getitem(self, index):  
        assert 0 <= index <= self.num_list, \  
            "index必须在范围内,该范围为0-{}".format(self.num_list)  
        return self.seq_list[index]  
  
    """  
        从顺序表中删除元素  
    """    # 根据索引删除元素  
    def delete_index(self, index):  
        assert 0 <= index <= self.num_list, \  
            "index必须在范围内,该范围为0-{}".format(self.num_list)  
        for j in range(index, self.num_list):  
            if j == self.num_list - 1:  
                self.seq_list[j] = None  
            else:  
                self.seq_list[j] = self.seq_list[j + 1]  
        self.num_list -= 1  
  
    # 直接删除元素  
    def delitem(self, value):  
        if self.isExist(value):  
            for i in range(self.num_list):  
                if self.seq_list[i] == value:  
                    self.delete_index(i)  
        else:  
            print(f'该元素不存在')  
  
  
def main():  
    s = SequenceList(max_list=5)    # 实例化对象  
    s.show()            # [None, None, None, None, None]  
    s.add(1)            # [1, None, None, None, None]  
    s.append(3)         # [1, 3, None, None, None]  
    s.add(2)            # [2, 1, 3, None, None]  
    s.insert(2, 7)      # [2, 1, 7, 3, None]  
    s.counter()         # 列表容量为5,现在列表元素个数为4  
    print(s.find_index(7))      # 2  
    print(s.getitem(2))         # 7  
    s.delete_index(1)     # [2, 7, 3, None, None]  
    s.delitem(2)          # [7, 3, None, None, None]  
  
  
if __name__ == '__main__':  
    main()