顺序表(python)

文章目录

  • ADT定义
  • 基本操作
    • 获取顺序表长度
    • 创建顺序表
    • 打印顺序表
    • 修改线性表的最大容量
    • 添加元素(顺序表末尾)
    • 插入元素(在index处插入element)
    • 删除元素(删除index处的元素)
    • 元素值修改
    • 查找第一个为num的元素
    • 获取元素
    • 翻转
    • 排序
    • 二路归并
  • 测试(自行设置并测试)
  • 代码实现


ADT定义

class SqList:
    # 初始化
    def __init__(self,capacity = 0):
        self.capacity = capacity  # 最大容量
        self.data = [None] * self.capacity  # 用于存储数据
        self.size = 0  # 元素个数计数(线性表有效长度)

基本操作

获取顺序表长度

def get_size(self):
    return self.size

创建顺序表

def create_SqList(self,a):
    for i in range(len(a)):
        # 出现上溢出则自动将容量扩充两倍
        if self.size == self.capacity:
            self.resize(self,size * 2)
        self.data[self.size] = a[i]
        self.size += 1

打印顺序表

def display(self):
    if self.size == 0:
        print("None")
    print(*self.data[:self.size])  # 去框

修改线性表的最大容量

def resize(self,newcapacity):
	if newcapacity >= self.capacity:
	    self.data = self.data + [None] * (newcapacity - self.capacity)
	else:
	    self.data = self.data[:newcapacity]
	self.capacity = newcapacity

添加元素(顺序表末尾)

def add_element(self,element):
    # 出现上溢出则自动将容量扩充两倍
    if self.size == self.capacity:
        self.resize(self.size * 2)
    self.data[self.size] = element
    self.size += 1

插入元素(在index处插入element)

def insert_element(self,index,element):
    if self.size == self.capacity:
        self.resize(self.size + 1)
    for i in range(self.size,index,-1):
        self.data[i] = self.data[i-1]
    self.data[index] = element
    self.size += 1

删除元素(删除index处的元素)

def delete_element(self,index):
        for i in range(index,self.size-1):
            self.data[i] = self.data[i+1]
        self.size -= 1

元素值修改

def modify_item(self,index,x):
    self.data[index] = x

查找第一个为num的元素

def get_num(self,num):
    for i in range(self.size):
        if self.data[i] == num:
            return i
    return -1

获取元素

def get_item(self,index):
    return self.data[index]

翻转

def reverse(self):
    i,j = 0, sqlist.get_size()-1
    while i<j:
        self.data[i], self.data[j] = self.data[j], self.data[i]
        i += 1
        j -= 1

排序

def sort(self,flag = False):
    for j in range(self.get_size()-1):
        for i in range(self.get_size()-1):
            if self.data[i] > self.data[i+1]:
                self.data[i], self.data[i+1] = self.data[i+1], self.data[i]
    if flag == False:
        return 1
    else:
        return self.reverse()

二路归并

def merge(self,sqlist,flag = False):
    C = SqList(self.capacity+sqlist.capacity)
    i = j = 0
    while i < self.get_size() and j < sqlist.get_size():
        if self.data[i]<sqlist.data[j]:
            C.add_element(self.data[i])
            i += 1
        else:
            C.add_element(sqlist.data[j])
            j += 1
    while i < self.get_size():
        C.add_element(self.data[i])
        i += 1
    while j < sqlist.get_size():
        C.add_element(sqlist.data[j])
        j += 1
    return C

测试(自行设置并测试)

顺序表(python)_第1张图片
顺序表(python)_第2张图片
顺序表(python)_第3张图片
顺序表(python)_第4张图片

代码实现

class SqList:
    # 初始化
    def __init__(self,capacity = 0):
        self.capacity = capacity  # 最大容量
        self.data = [None] * self.capacity  # 用于存储数据
        self.size = 0  # 元素个数计数(线性表有效长度)
        
    # 获取顺序表长度
    def get_size(self):
        return self.size
    
    # 创建顺序表
    def create_SqList(self,a):
        for i in range(len(a)):
            # 出现上溢出则自动将容量扩充两倍
            if self.size == self.capacity:
                self.resize(self,size * 2)
            self.data[self.size] = a[i]
            self.size += 1
            
    # 打印顺序表
    def display(self):
        if self.size == 0:
            print("None")
        print(*self.data[:self.size])  # 去框
    
    # 修改线性表的最大容量
    def resize(self,newcapacity):
        if newcapacity >= self.capacity:
            self.data = self.data + [None] * (newcapacity - self.capacity)
        else:
            self.data = self.data[:newcapacity]
        self.capacity = newcapacity
    
    
    
    ## 增
    
    # 添加元素(顺序表末尾)
    def add_element(self,element):
        # 出现上溢出则自动将容量扩充两倍
        if self.size == self.capacity:
            self.resize(self.size * 2)
        self.data[self.size] = element
        self.size += 1
        
    # 插入元素(在index处插入element)
    def insert_element(self,index,element):
        if self.size == self.capacity:
            self.resize(self.size + 1)
        for i in range(self.size,index,-1):
            self.data[i] = self.data[i-1]
        self.data[index] = element
        self.size += 1
        
    # 删
    
    # 删除元素(删除index处的元素)
    def delete_element(self,index):
        for i in range(index,self.size-1):
            self.data[i] = self.data[i+1]
        self.size -= 1
    
    # 改
    
    # 元素值修改
    def modify_item(self,index,x):
        self.data[index] = x
    
    # 查
    
    # 查找第一个为num的元素(找到返回下标,未找到返回-1)
    def get_num(self,num):
        for i in range(self.size):
            if self.data[i] == num:
                return i
        return -1
    
    # 获取元素
    def get_item(self,index):
        return self.data[index]
    
    
    
    ## 简单函数
    
    # 翻转
    def reverse(self):
        i,j = 0, sqlist.get_size()-1
        while i<j:
            self.data[i], self.data[j] = self.data[j], self.data[i]
            i += 1
            j -= 1
    
    # 排序(false,正序)
    def sort(self,flag = False):
        for j in range(self.get_size()-1):
            for i in range(self.get_size()-1):
                if self.data[i] > self.data[i+1]:
                    self.data[i], self.data[i+1] = self.data[i+1], self.data[i]
        if flag == False:
            return 1
        else:
            return self.reverse()
    
    # 二路归并
    def merge(self,sqlist,flag = False):
        C = SqList(self.capacity+sqlist.capacity)
        i = j = 0
        while i < self.get_size() and j < sqlist.get_size():
            if self.data[i]<sqlist.data[j]:
                C.add_element(self.data[i])
                i += 1
            else:
                C.add_element(sqlist.data[j])
                j += 1
        while i < self.get_size():
            C.add_element(self.data[i])
            i += 1
        while j < sqlist.get_size():
            C.add_element(sqlist.data[j])
            j += 1
        return C

你可能感兴趣的:(python,开发语言)