文章目录
- 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
测试(自行设置并测试)




代码实现
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
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
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
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