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)