class SequenceTSet(): def __init__(self): self.Root=Student() def readFile(self, filname): #补充代码,能将文件中的信息,读入到self.Tset中 def writeFile(self, filname): #补充代码,能将self.Tset信息,写入到文件filname中 def sortAndprint(self,filename): #补充代码,对TSet中的学生的身高进行升序排序,注意排序,可通过 在有序链表中的就地添加后续节点 来完成 。 def cntHeight(self, y): #补充代码,输出TSet中身高大于y的学生个数 def splitSet(self, x,filename): #补充代码,能将TSet中性别为x的学生都删除 def del(self, sid): #补充代码,删除TSet中学号为sid的学生 def insert(self, hei): #补充代码,添加身高为hei的学生到TSet中,要求添加学生后,学生表中的身高保持有升序。
时间: 2024-03-04 21:50:20 浏览: 23
补充代码如下:
```
class SequenceTSet():
def __init__(self):
self.Root = Student()
def readFile(self, filename):
with open(filename, 'r') as f:
lines = f.readlines()
for line in lines:
sid, name, height, sex = line.strip().split()
self.insert(int(height))
def writeFile(self, filename):
with open(filename, 'w') as f:
cur = self.Root.next
while cur:
f.write("{} {} {} {}\n".format(cur.sid, cur.name, cur.height, cur.sex))
cur = cur.next
def sortAndprint(self, filename):
cur = self.Root.next
newRoot = Student()
while cur:
prev = newRoot
nxt = prev.next
while nxt:
if nxt.height > cur.height:
break
prev = nxt
nxt = nxt.next
temp = cur.next
cur.next = nxt
prev.next = cur
cur = temp
self.Root = newRoot
self.writeFile(filename)
def cntHeight(self, y):
cnt = 0
cur = self.Root.next
while cur:
if cur.height > y:
cnt += 1
cur = cur.next
return cnt
def splitSet(self, x, filename):
newRoot = Student()
cur = self.Root.next
while cur:
if cur.sex == x:
temp = cur.next
cur.next = None
newRoot.next = cur
cur = temp
else:
prev = cur
cur = cur.next
self.Root = prev
self.writeFile(filename)
def del(self, sid):
cur = self.Root.next
prev = self.Root
while cur:
if cur.sid == sid:
prev.next = cur.next
cur.next = None
return
prev = cur
cur = cur.next
def insert(self, hei):
cur = self.Root.next
prev = self.Root
while cur:
if cur.height > hei:
break
prev = cur
cur = cur.next
newStudent = Student()
newStudent.height = hei
newStudent.next = cur
prev.next = newStudent
```
解释:
1. `readFile` 方法:从文件中读取学生信息,并逐个插入到 `TSet` 中。
2. `writeFile` 方法:将 `TSet` 中的学生信息写入到文件中。
3. `sortAndprint` 方法:对 `TSet` 中的学生身高进行升序排序,并写入到指定文件中。在这里,我们采用了链表的插入排序算法。
4. `cntHeight` 方法:统计 `TSet` 中身高大于 `y` 的学生个数。
5. `splitSet` 方法:将性别为 `x` 的学生从 `TSet` 中删除,并写入到指定文件中。
6. `del` 方法:删除学号为 `sid` 的学生。
7. `insert` 方法:向 `TSet` 中插入身高为 `hei` 的学生,要求插入后仍然保持身高升序。