设计一个单链表 1. 单链表抽象数据类型包括:初始化、求单链表长度、插入、删除、取数据元素。 2. 设计测试主函数,验证算法的正确性。
时间: 2024-09-29 18:15:36 浏览: 40
设计单链表通常会包含以下几个关键部分:
1. **节点结构**:
定义一个`Node`类,它包含两个属性:`data`用于存储数据,`next`是一个指向下一个节点的指针。这个类的基本构造函数可以用于初始化新节点。
```python
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
```
2. **链表类**:
创建一个`LinkedList`类,初始化方法`__init__()`用于创建空链表,其余方法如`get_length()`, `insert()`, `delete()`, 和 `get_data()` 分别表示获取链表长度、在指定位置插入节点、删除某个节点以及获取指定索引的数据。
```python
class LinkedList:
def __init__(self):
self.head = None
def get_length(self):
current = self.head
count = 0
while current is not None:
count += 1
current = current.next
return count
def insert(self, index, data):
if index < 0 or index > self.get_length():
raise IndexError("Invalid index")
new_node = Node(data)
if index == 0:
new_node.next = self.head
self.head = new_node
else:
current = self.head
for _ in range(index - 1):
current = current.next
new_node.next = current.next
current.next = new_node
def delete(self, index):
if index < 0 or index >= self.get_length():
raise IndexError("Invalid index")
if index == 0:
self.head = self.head.next
else:
current = self.head
for _ in range(index - 1):
current = current.next
current.next = current.next.next
def get_data(self, index):
if index < 0 or index >= self.get_length():
raise IndexError("Invalid index")
current = self.head
for _ in range(index):
current = current.next
return current.data
```
3. **测试主函数**:
可以创建一个简单的主函数,比如通过创建链表,插入一些数据,然后检查操作是否按预期工作,并打印结果,以验证算法的正确性。
```python
def test_linked_list():
ll = LinkedList()
ll.insert(0, 1)
ll.insert(1, 2)
ll.insert(2, 3)
assert ll.get_length() == 3
assert ll.get_data(0) == 1
assert ll.get_data(1) == 2
assert ll.get_data(2) == 3
# 添加更多测试用例...
if __name__ == "__main__":
test_linked_list()
```
阅读全文