1、编写一组程序,基于单链表,用头插法建表,实现两个寝室学生姓名数据的建 表、展示、查找、定位、插入、删除、判定表空和求表长的操作。依次输入两个宿舍学 生姓名:自己宿舍和隔壁宿舍同学。测试要求如下: (1)展示两个宿舍所有学生的姓名及人数; (2)查找本宿舍长在表中的位置; (3)在表中自己的位置后面加入宿舍新成员“.…”,删除宿舍里的已转走的学生“…” 展示两个宿舍现有的同学。
时间: 2023-11-22 21:55:56 浏览: 22
以下是基于单链表实现的两个寝室学生姓名数据的建表、展示、查找、定位、插入、删除、判定表空和求表长的操作的代码:
```python
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def is_empty(self):
return self.head == None
def length(self):
count = 0
current = self.head
while current != None:
count += 1
current = current.next
return count
def add(self, data):
new_node = Node(data)
new_node.next = self.head
self.head = new_node
def display(self):
current = self.head
while current != None:
print(current.data)
current = current.next
def search(self, data):
current = self.head
found = False
while current != None and not found:
if current.data == data:
found = True
else:
current = current.next
return found, current
def insert(self, pos, data):
if pos == 0:
self.add(data)
else:
new_node = Node(data)
current = self.head
prev = None
count = 0
while count < pos and current != None:
prev = current
current = current.next
count += 1
prev.next = new_node
new_node.next = current
def delete(self, data):
current = self.head
prev = None
found = False
while not found:
if current.data == data:
found = True
else:
prev = current
current = current.next
if prev == None:
self.head = current.next
else:
prev.next = current.next
```
下面是使用上述代码实现的两个寝室学生姓名数据的建表、展示、查找、定位、插入、删除、判定表空和求表长的操作的代码:
```python
# 建立自己宿舍的链表
dorm1 = LinkedList()
n = int(input("请输入自己宿舍学生人数:"))
for i in range(n):
name = input("请输入第{}个学生的姓名:".format(i+1))
dorm1.add(name)
# 建立隔壁宿舍的链表
dorm2 = LinkedList()
n = int(input("请输入隔壁宿舍学生人数:"))
for i in range(n):
name = input("请输入第{}个学生的姓名:".format(i+1))
dorm2.add(name)
# 展示两个宿舍所有学生的姓名及人数
print("自己宿舍的学生有:")
dorm1.display()
print("人数为:", dorm1.length())
print("隔壁宿舍的学生有:")
dorm2.display()
print("人数为:", dorm2.length())
# 查找本宿舍长在表中的位置
name = input("请输入要查找的学生姓名:")
found, current = dorm1.search(name)
if found:
print("{}在自己宿舍的位置为第{}个".format(name, dorm1.length()-dorm1.search(name)[1].data))
else:
print("{}不在自己宿舍中".format(name))
# 在表中自己的位置后面加入宿舍新成员
name = input("请输入新成员的姓名:")
pos = int(input("请输入自己在宿舍中的位置:"))
dorm1.insert(dorm1.length()-pos, name)
print("插入后自己宿舍的学生有:")
dorm1.display()
# 删除宿舍里的已转走的学生
name = input("请输入要删除的学生姓名:")
dorm1.delete(name)
print("删除后自己宿舍的学生有:")
dorm1.display()
```
以上代码可以实现基于单链表的两个寝室学生姓名数据的建表、展示、查找、定位、插入、删除、判定表空和求表长的操作。