顺序表(python)


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

测试(自行设置并测试)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现

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

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

booozai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值