python 数据结构学习顺序表解决荷兰国旗排序

class SqList: #定义顺序表这个类
    def __init__(self):
        self.maxsize=10  #初始化最大容量
        self.data=[None]*self.maxsize   #分配存储空间
        self.size=0   #初始状态下顺序表中没有元素
        
#####以下是定义在顺序表这个类上的运算###################

    def CreatSqlist(self,a):#创建顺序表,a为列表
        for i in range(0,len(a)):
            if self.size==self.maxsize: #判断
                print("数据溢出")
                break
            self.data[self.size]=a[i] #从a中取值放入顺序表data中
            self.size=self.size+1  #实际元素个数增加1个
            
    def resize(self,newsize):#newsize代表新的最大容量
        olddata=self.data
        self.data=[None]*newsize
        for i in range(self.size):
            self.data[i]=olddata[i]
            
    def creatsqlist(self,a):#创建顺序表,容量不够提示用户数据溢出
        for i in range(0,len(a)):
            if self.size==self.maxsize:
                print("数据溢出")
                break
            self.data[self.size]=a[i]
            self.size+=1
     
    def creatlist2(self,a):#创建顺序表,容量不够时进行扩容
        for i in range(0,len(a)):
            if self.size==self.maxsize:
                self.resize(2*self.maxsize)#扩容
            self.data[self.size]=a[i]
            self.size+=1 
    def isEmpty(self):# 判断当前顺序表是否为空
        if self.size==0:
            return True
        else:
            return False
    def isFull(self):#判断顺序表是否已满
        if self.size==self.maxsize:
            return True
        else:
            return False
    def Add(self,x):#增加元素x到顺序表尾部
        if self.isFull():
            print("顺序表满,不能增加")
            #self.resize(self.size*2)  #扩容
        else:
            self.data[self.size]=x
            self.size=self.size+1
    def Add1(self,x,i):#i是逻辑序号
        if self.isFull():
            print("插入失败")
            return False
        else:
            for j in range(self.size-1,i-2,-1):
                self.data[j+1]=self.data[j]
            self.data[i-1]=x
            self.size+=1
            return True
    def Del(self,i):
        if self.isEmpty():
            print("不能删除")
            return False
        else:
            for j in range(i,self.maxsize):
                self.data[j-1]=self.data[j]
            self.size-=1
            return True
    ## 查找顺序表中第i个元素###
    def Find(self,i):#i是逻辑序号
        assert 1<=i<=self.size
        return self.data[i-1]
        
    ##修改顺序表中第i个元素的值为x##
    def Updata(self,i,x):
        assert 1<=i<=self.size
        self.data[i-1]=x
        return True
    def Findindex(self,e):#查找元素e在顺序表中第一次出现的位置
        for i in range(0,self.size):
            if self.data[i]==e:
                #print(i+1)
                return i+1            
                #break
        if i==self.size-1 and self.data[self.size-1]!=e:
            return None
    #解决国旗排序问题

    def fen(self):#定义一个函数用来排序
        i = 0 #元素的位置
        j = self.size - 1
        k = 0 #终止循环
        while k <= j:#遍历每一个元素
            if self.data[k] == 0:#如果是0位置换到前面
                self.data[k],self.data[i] = self.data[i],self.data[k]   #i与k位置的元素交换位置
                i += 1 #指向下一个位置
                k += 1
                continue
            if self.data[k] == 1:#等于1位置不动,排在0后面
                k += 1
                continue
            if self.data[k] == 2:
                self.data[k],self.data[j] = self.data[j], self.data[k]
                j -= 1
                continue
he=SqList()#创建一个顺序表
he.creatlist2([0,1,2,0,2,1,0,1])#添加元素
he.fen()#调用函数
print(he.data)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值