采用数组实现链表、初始化、插入、删除、查找、遍历的功能。自己输入元素,通过不同指令输出不同功能
时间: 2023-12-10 20:03:01 浏览: 35
好的,以下是基于数组实现链表的代码实现。你可以根据注释理解每个功能的实现,也可以直接输入指令来测试。
```python
# 定义链表节点类
class Node:
def __init__(self, data=None):
self.data = data # 数据
self.next = None # 指向下一个节点的指针
# 定义链表类
class LinkedList:
def __init__(self):
self.head = None # 链表头节点
self.size = 0 # 链表长度
# 初始化链表
def init_list(self, data_list):
self.head = Node(data_list[0]) # 创建头节点
p = self.head # 指针指向头节点
for i in data_list[1:]:
node = Node(i) # 创建新节点
p.next = node # 将指针指向新节点
p = p.next # 移动指针到新节点
self.size = len(data_list) # 更新链表长度
# 插入节点
def insert_node(self, position, data):
if position < 0 or position > self.size:
print("error: out of range")
return
node = Node(data)
if position == 0:
node.next = self.head
self.head = node
else:
p = self.head
for i in range(position - 1):
p = p.next
node.next = p.next
p.next = node
self.size += 1
# 删除节点
def delete_node(self, position):
if position < 0 or position >= self.size:
print("error: out of range")
return
if position == 0:
self.head = self.head.next
else:
p = self.head
for i in range(position - 1):
p = p.next
p.next = p.next.next
self.size -= 1
# 查找节点
def find_node(self, data):
p = self.head
index = 0
while p:
if p.data == data:
return index
p = p.next
index += 1
return -1
# 遍历链表
def traverse(self):
p = self.head
while p:
print(p.data, end=" ")
p = p.next
print()
# 测试代码
if __name__ == '__main__':
linked_list = LinkedList()
while True:
print("请选择操作:")
print("1. 初始化链表")
print("2. 插入节点")
print("3. 删除节点")
print("4. 查找节点")
print("5. 遍历链表")
print("6. 退出")
choice = int(input())
if choice == 1:
data_list = list(map(int, input("请输入链表元素,以空格分隔:").split()))
linked_list.init_list(data_list)
print("初始化成功!")
elif choice == 2:
position = int(input("请输入插入位置:"))
data = int(input("请输入插入数据:"))
linked_list.insert_node(position, data)
print("插入成功!")
elif choice == 3:
position = int(input("请输入删除位置:"))
linked_list.delete_node(position)
print("删除成功!")
elif choice == 4:
data = int(input("请输入查找数据:"))
index = linked_list.find_node(data)
if index == -1:
print("查找失败!")
else:
print("元素 %d 在链表中的位置是 %d" % (data, index))
elif choice == 5:
linked_list.traverse()
elif choice == 6:
break
else:
print("输入有误,请重新输入!")
```
你可以根据以下指令进行测试:
1. 初始化链表:选择操作 1,然后输入链表元素,以空格分隔。
2. 插入节点:选择操作 2,然后输入插入位置和插入数据。
3. 删除节点:选择操作 3,然后输入删除位置。
4. 查找节点:选择操作 4,然后输入查找数据。
5. 遍历链表:选择操作 5。
6. 退出:选择操作 6。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)