Python基础之定义一个顺序表

Python基础之定义一个顺序表

这是我第一次写,也是在边学边练的过程中,写的可能会有些问题,欢迎大家批评指正。

class sqlist:
def init(self,max=100): #初始化,默认分配给顺序表的空间为100个字符
self.max=max
self.length=0
self.data=[None]*max

def is_empty(self):                 #判断是否为空
    if self.length==0:
        return 1
    return 0

def is_full(self):                  #判断是否占满空间
    if self.length==self.max:
        return 1
    return 0

def clear(self):                    #删除顺序表
    self.__init__()

def insert(self,i:int,data):        #插入
    if i<0 or i>self.max:
        print('输入错误')
    elif i>self.length+1:
        print('超出插入范围')
    key=self.length
    while i<=key:
        self.data[key]=self.data[key-1]
        key-=1
    self.data[i-1]=data
    self.length+=1


def append(self,value):               #末尾插入
    if self.is_full():
        print('sqlist is full')
    self.data[self.length]=value
    self.length+=1

def index(self,i:int):                #查找元素
    if i<0 or i>self.length:
        print('输入有误')
    return self.data[i-1]

def delete(self,i:int):               #删除元素
    if i<0 or i>self.length:
        print('输入有误')
    value=self.data[i-1]
    key=self.length
    while i<=key:
        self.data[i-1]=self.data[i]
        i+=1
    self.length-=1
    print('删除的值为:{}'.format(value))

def reverse(self):                    #顺序表反转
    i,j=0,self.length-1
    while i<j:
        self.data[i],self.data[j]=self.data[j],self.data[i]
        i+=1
        j-=1

def plinsert(self,start:int,end:int,*data):            #批量连续插入 start为插入的第一个位置,end为最后一个位置
    if start>end:
        print('输入有误')
    if len(data)!=end-start+1:
        print('输入有误')
    elif start<0 or start>self.length or end>self.max:
        print('输入有误')
    else:
        key=self.length+end-start
        move=end-start+1
        while move>0:
            self.data[key]=self.data[key-(end-start+1)]
            move-=1
            key-=1
        num=len(data)
        key2=end-1
        while num>0:
            self.data[key2]=data[num-1]
            key2-=1
            num-=1
        self.length+=end-start+1
        print('插入成功')
def insert2(self,start:int,end:int,*data):             #批量连续插入的另一种方法,直接调用insert方法
    i=0
    key=start
    while i<len(data):
        self.insert(key,data[i])
        i+=1
        key+=1
    self.length += len(data)

有兴趣的朋友还可以自己实现批量删除的功能,方法与批量插入类似。

测试部分:
a=sqlist()
print(len(a.data))
a.append(1)
a.append(2)
a.append(3)
print(a.data)
print(a.length)
#a.insert(5,10)
a.insert(2,4)
print(a.data)
print(a.length)
a.clear()
print(a.data)
print(a.index(3))
a.delete(2)
print(a.data)
a.append(4)
a.reverse()
print(a.data)
print(a.index(3))
#a.plinsert(2,4,7,8,9)
#print(a.data)
#a.plinsert(3,10,0,0,0,0,0,0,0,0)
#print(a.data)
#print(a.length)
a.insert2(2,4,7,8,9)
print(a.data)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值