Python实现顺序存储结构的线性表:完整代码及操作示例
本文将详细介绍使用 Python 实现基于顺序存储结构的线性表,并提供完整代码和操作示例。
代码实现
class LinearList:
def __init__(self, max_size):
self.max_size = max_size
self.length = 0
self.data = [None] * max_size
def is_empty(self):
return self.length == 0
def is_full(self):
return self.length == self.max_size
def resize(self, new_size):
if new_size < self.length:
raise ValueError('New size cannot be smaller than current length.')
self.max_size = new_size
new_data = [None] * new_size
for i in range(self.length):
new_data[i] = self.data[i]
self.data = new_data
def append(self, element):
if self.is_full():
self.resize(self.max_size * 2)
self.data[self.length] = element
self.length += 1
def insert(self, position, element):
if self.is_full():
self.resize(self.max_size * 2)
if position < 0 or position > self.length:
raise ValueError('Invalid position.')
for i in range(self.length, position, -1):
self.data[i] = self.data[i-1]
self.data[position] = element
self.length += 1
def delete(self, position):
if position < 0 or position >= self.length:
raise ValueError('Invalid position.')
for i in range(position, self.length-1):
self.data[i] = self.data[i+1]
self.data[self.length-1] = None
self.length -= 1
def swap(self, position1, position2):
if position1 < 0 or position1 >= self.length or position2 < 0 or position2 >= self.length:
raise ValueError('Invalid positions.')
self.data[position1], self.data[position2] = self.data[position2], self.data[position1]
def find(self, element):
for i in range(self.length):
if self.data[i] == element:
return i
return -1
def display(self):
for i in range(self.length):
print(self.data[i], end=' ')
print()
# 测试
linear_list = LinearList(10)
print('初始线性表是否为空:', linear_list.is_empty())
print('初始线性表是否为满:', linear_list.is_full())
# 插入操作
for i in range(1, 11):
linear_list.append(i)
print('插入10个元素后,线性表是否为空:', linear_list.is_empty())
print('插入10个元素后,线性表是否为满:', linear_list.is_full())
print('线性表中所有元素:')
linear_list.display()
# 在指定位置插入元素
linear_list.insert(2, 11)
print('在位置2插入元素后,线性表中所有元素:')
linear_list.display()
# 删除指定位置的元素
linear_list.delete(5)
print('删除位置5的元素后,线性表中所有元素:')
linear_list.display()
# 交换指定位置的元素
linear_list.swap(1, 3)
print('交换位置1和3的元素后,线性表中所有元素:')
linear_list.display()
# 查找元素
index = linear_list.find(5)
print('元素5的下标位置:', index)
# 逆序输出
reversed_list = linear_list.data[:linear_list.length][::-1]
print('逆序线性表中所有元素:')
for i in range(len(reversed_list)):
print(reversed_list[i], end=' ')
print()
代码解释
- 类定义:
LinearList类定义了线性表的顺序存储结构。 - 初始化:
__init__方法初始化线性表,设置最大容量max_size、当前长度length和数据存储列表data。 - 判断空满:
is_empty和is_full方法分别判断线性表是否为空和是否为满。 - 调整大小:
resize方法允许调整线性表的大小,支持扩容,但不支持缩容。 - 尾部插入:
append方法在尾部插入一个元素,如果线性表已满则自动扩容。 - 指定位置插入:
insert方法在指定位置插入一个元素,需要保证位置有效,插入操作会将指定位置之后的元素后移。 - 指定位置删除:
delete方法删除指定位置的元素,需要保证位置有效,删除操作会将指定位置之后的元素前移。 - 交换元素:
swap方法交换两个指定位置的元素,需要保证位置有效。 - 元素查找:
find方法查找元素并返回其下标位置,如果元素不存在则返回 -1。 - 输出元素:
display方法输出线性表中所有元素。
测试用例
代码中的测试用例展示了线性表的常见操作,包括初始化、插入、删除、查找、交换、逆序输出等。你可以根据自己的需要修改测试用例,尝试不同的操作。
总结
本文提供了一个使用 Python 实现基于顺序存储结构的线性表的完整代码示例,并详细解释了代码逻辑和各个操作函数的功能。你可以在此基础上进行扩展和优化,例如实现链表、栈、队列等其他数据结构。
希望本文能帮助你理解 Python 中线性表的实现,并为你的数据结构学习提供参考。
原文地址: http://www.cveoy.top/t/topic/bzl2 著作权归作者所有。请勿转载和采集!