目录
- 顺序表的定义
-
- 顺序表的初始化
- 顺序表的查找
-
- 顺序表的插入与删除
-
- 顺序表的合并
- 顺序表的调试与总代码
顺序表的定义
- 用顺序存储结构实现的线性表成为顺序表
- 物理存储地址为相邻顺序的存储结构

顺序表的初始化
- 顺序表的定义
- 初始化顺序表
- 判断是否为空表
- 获取表的长度
- 展示顺序表
class SeqList:
"""
顺序表的定义
"""
def __init__(self, maxSize):
"""
初始化
:param maxSize: 顺序表的最大容量
"""
self.maxSize = maxSize
self.last = -1
self.data = [None for _ in range(self.maxSize)]
def isEmpty(self):
"""
判断顺序表是否为空表
:return:True or False
"""
return self.last == -1
def getLength(self):
"""
获取顺序表的长度
:return:当前顺序表中数据元素的个数
"""
return self.last + 1
def display(self):
"""
展示顺序表中的数据元素
:return:
"""
if self.isEmpty():
print("当前顺序表为空表!")
return
print("顺序表的数据元素为:",end="")
for i in range(self.last + 1):
print(self.data[i], end=",")
顺序表的查找
按序号查找
- 要求查找顺序表中的第index个数据元素,若合法,则返回index-1下标对应的数据元素。
def getData(self, index):
"""
按序号查找
:param index: 待查找的位置
:return: 查找位置的数据元素
"""
if index <= 0 or index > self.last + 1:
raise IndexError("index 非法")
"""
raise ValueError("a 必须是数字")
raise TypeError("参数类型不匹配")
raise KeyError("字典中不存在的键")
raise NameError("变量未定义")
raise ZeroDivisionError("除数不能为零")
raise AssertionError("断言失败")
raise SyntaxError("语法错误")
raise IOError("文件不存在")
raise ImportError("无法导入模块")
raise RuntimeError("运行时错误")
raise MemoryError("内存不足")
raise RecursionError("递归深度超过最大限制")
raise SystemExit("程序正常退出")
raise OverflowError("数值溢出")
"""
return self.data[index - 1]

按内容查找
- 要求的是给定一个数据值,返回在表中的index+1值,即数值在表中的位置,则是返回-1。
def locate(self, key):
"""
按内容查找
:param key: 待查找的值
:return: 返回位置
"""
index = -1
for i in range(self.last + 1):
if self.data[i] == key:
index = i + 1
break
return index

顺序表的插入与删除
插入
def append(self, data):
"""
在顺序表尾部追加数据元素
:return:
"""
if self.last == self.maxSize - 1:
raise IndexError("当前顺序表已满")
self.last += 1
self.data[self.last] = data
return print('已在尾部追加数据元素成功!')
def insert(self,index,data):
"""
在任意位置插入数据元素
:param index: 插入的位置
:param data: 插入的值
:return:
"""
if index <= 0 or index > self.last + 1:
raise IndexError("index 非法")
if self.last == self.maxSize - 1:
raise IndexError("顺序表已满,不允许继续插入数据元素")
for i in range(self.last+1, index-1, -1):
self.data[i] = self.data[i-1]
self.data[index-1] = data
self.last += 1
return print("插入成功")

删除
def detele(self,index):
"""
在任意位置删除数据元素
:param index: 插入数据元素的位置
:return:
"""
if self.isEmpty():
raise IndexError("当前顺序表为空表")
if index <= 0 or index > self.last + 1:
raise IndexError("index 非法")
data = self.data[index-1]
for i in range(index - 1, self.last + 1):
self.data[i] = self.data[i + 1]
self.last -= 1
return data

顺序表的合并
- 将已有的两个顺序有序的表listA和listB,进行合并成一个新的有序的顺序表listC。
def merge(self, listB):
"""
合并算法
:param listB: 待合并的顺序表B
:return:
"""
i = 0
j = 0
k = 0
listC = SeqList(100)
while i <= self.last and j <= listB.last:
if self.data[i] <= listB.data[j]:
listC.data[k] = self.data[i]
i += 1
k += 1
else:
listC.data[k] = listB.data[j]
j += 1
k += 1
while i <= self.last:
listC.data[k] = self.data[i]
i += 1
k += 1
while j <= listB.last:
listC.data[k] = listB.data[j]
j += 1
k += 1
listC.last = k - 1
return listC

顺序表的调试与总代码
if __name__ == '__main__':
list = SeqList(100)
list.display()
for i in range(10):
list.append(chr(ord("A")+ i))
list.display()
length = list.getLength()
print('当前顺序表的长度为:%d'% length)
data = list.getData(10)
print("按序号查找的结果:%s" % data)
index = list.locate("D")
if index == -1:
print("未找到元素D")
else:
print("按内容查找的结果:%d"% index)
list.insert(4, "T")
list.display()
data = list.detele(4)
print("被删除元素:%s"% data)
list.display()
dataA = (8, 21, 25, 49, 62)
dataB = (16, 37, 54, 72, 82, 90)
listA = SeqList(100)
for i in range(len(dataA)):
listA.append(dataA[i])
listA.display()
listB = SeqList(100)
for j in range(len(dataB)):
listB.append(dataB[j])
listB.display()
listC = listA.merge(listB)
listC.display()
class SeqList:
"""
顺序表的定义
"""
def __init__(self, maxSize):
"""
初始化
:param maxSize: 顺序表的最大容量
"""
self.maxSize = maxSize
self.last = -1
self.data = [None for _ in range(self.maxSize)]
def isEmpty(self):
"""
判断顺序表是否为空表
:return:True or False
"""
return self.last == -1
def getLength(self):
"""
获取顺序表的长度
:return:当前顺序表中数据元素的个数
"""
return self.last + 1
def display(self):
"""
展示顺序表中的数据元素
:return:
"""
if self.isEmpty():
print("当前顺序表为空表!")
return
print("顺序表的数据元素为:",end="")
for i in range(self.last + 1):
print(self.data[i], end=",")
def getData(self, index):
"""
按序号查找
:param index: 待查找的位置
:return: 查找位置的数据元素
"""
if index <= 0 or index > self.last + 1:
raise IndexError("index 非法")
"""
raise ValueError("a 必须是数字")
raise TypeError("参数类型不匹配")
raise KeyError("字典中不存在的键")
raise NameError("变量未定义")
raise ZeroDivisionError("除数不能为零")
raise AssertionError("断言失败")
raise SyntaxError("语法错误")
raise IOError("文件不存在")
raise ImportError("无法导入模块")
raise RuntimeError("运行时错误")
raise MemoryError("内存不足")
raise RecursionError("递归深度超过最大限制")
raise SystemExit("程序正常退出")
raise OverflowError("数值溢出")
"""
return self.data[index - 1]
def locate(self, key):
"""
按内容查找
:param key: 待查找的值
:return: 返回位置
"""
index = -1
for i in range(self.last + 1):
if self.data[i] == key:
index = i + 1
break
return index
def append(self, data):
"""
在顺序表尾部追加数据元素
:return:
"""
if self.last == self.maxSize - 1:
raise IndexError("当前顺序表已满")
self.last += 1
self.data[self.last] = data
return print('已在尾部追加数据元素成功!')
def insert(self,index,data):
"""
在任意位置插入数据元素
:param index: 插入的位置
:param data: 插入的值
:return:
"""
if index <= 0 or index > self.last + 1:
raise IndexError("index 非法")
if self.last == self.maxSize - 1:
raise IndexError("顺序表已满,不允许继续插入数据元素")
for i in range(self.last+1, index-1, -1):
self.data[i] = self.data[i-1]
self.data[index-1] = data
self.last += 1
return print("插入成功")
def detele(self,index):
"""
在任意位置删除数据元素
:param index: 插入数据元素的位置
:return:
"""
if self.isEmpty():
raise IndexError("当前顺序表为空表")
if index <= 0 or index > self.last + 1:
raise IndexError("index 非法")
data = self.data[index-1]
for i in range(index - 1, self.last + 1):
self.data[i] = self.data[i + 1]
self.last -= 1
return data
def merge(self, listB):
"""
合并算法
:param listB: 待合并的顺序表B
:return:
"""
i = 0
j = 0
k = 0
listC = SeqList(100)
while i <= self.last and j <= listB.last:
if self.data[i] <= listB.data[j]:
listC.data[k] = self.data[i]
i += 1
k += 1
else:
listC.data[k] = listB.data[j]
j += 1
k += 1
while i <= self.last:
listC.data[k] = self.data[i]
i += 1
k += 1
while j <= listB.last:
listC.data[k] = listB.data[j]
j += 1
k += 1
listC.last = k - 1
return listC
if __name__ == '__main__':
list = SeqList(100)
list.display()
for i in range(10):
list.append(chr(ord("A")+ i))
list.display()
length = list.getLength()
print('当前顺序表的长度为:%d'% length)
data = list.getData(10)
print("按序号查找的结果:%s" % data)
index = list.locate("D")
if index == -1:
print("未找到元素D")
else:
print("按内容查找的结果:%d"% index)
list.insert(4, "T")
list.display()
data = list.detele(4)
print("被删除元素:%s"% data)
list.display()
dataA = (8, 21, 25, 49, 62)
dataB = (16, 37, 54, 72, 82, 90)
listA = SeqList(100)
for i in range(len(dataA)):
listA.append(dataA[i])
listA.display()
listB = SeqList(100)
for j in range(len(dataB)):
listB.append(dataB[j])
listB.display()
listC = listA.merge(listB)
listC.display()