这个程序按升序创建一个链表我们必须按降序创建它我尝试过更改insert_unit_result
,但它只会在顶部打印最后插入的元素,但它会按原样打印其余的元素。有人能帮我把数据按降序排列吗
class UnitMark:
def __init__(self, marks, next = None):
self.length=len(marks)-1
self.rep=self.__str(marks)
self.marks = marks
self.next = next
def __str(self, marks):
terms = ["(ID: "+str(marks[0])+ \
", A1: "+str(marks[1])+ \
", A2: "+str(marks[2]) + \
", exam: "+str(marks[3])]
return str(terms)
def __eq__(self, that):
return self.marks[0] == that[0]
def insert_unit_result(self, st_unit_marks):
new_node =[0]*4
old_node =[0]*4
old_node[0]=self.marks[0]
old_node[1]=self.marks[1]
old_node[2]=self.marks[2]
old_node[3]=self.marks[3]
new_node[0]=st_unit_marks.marks[0]
new_node[1]=st_unit_marks.marks[1]
new_node[2]=st_unit_marks.marks[2]
new_node[3]=st_unit_marks.marks[3]
if self is None:
return st_unit_marks
else:
previous = None
curr = self
while curr is not None:
curr_marks = curr.marks
curr_node_id = curr.marks[0]
print("current id: "+ str(curr_node_id)+" new id: " + str(new_node[0]))
if curr_node_id > new_node[0]:
previous = curr
curr = curr.next
#print("-------curr_node_id > new_node[0] - continue...")
elif curr_node_id == new_node[0]:
curr.marks = st_unit_marks
#print("-------curr_node_id = new_node[0] - same id...")
return self
else:
#print("-------curr_node_id > new_node[0] - insert here...")
st_unit_marks.next =curr
if previous is None:
return st_unit_marks
else:
previous.next = st_unit_marks
return self
if curr is None:
previous.next = st_unit_marks
return self
def print_one_unit_result(u_list):
if u_list is None:
print("No student records")
return
else:
print("Current unit result:")
lyst = u_list.marks
total = lyst[1]+lyst[2] +lyst[3]
print(" Student_ID.: " + str(lyst[0])+" A1: " + str(lyst[1])+" A2: "
+ str(lyst[2])+" Eaxm: " + str(lyst[3])+" ->total " + str(total)+"\n")
""" -----print all student marks of the unit-------- """
def print_unit_result(u_list):
if u_list is None:
print("No student records")
return
else:
print("Current linked list contains:")
curr = u_list
while curr is not None:
lyst = curr.marks
total = lyst[1]+lyst[2] +lyst[3]
print(" Student_ID.: " + str(lyst[0])+" A1: " + str(lyst[1])+" A2: "
+ str(lyst[2])+" Eaxm: " + str(lyst[3])+" ->total " + str(total))
curr = curr.next
print()
def main(size = 7):
unit_node1 = None
#create SLL
unit_node2 = UnitMark([1189, 2, 30, 30], unit_node1)
unit_node3 = UnitMark([1145, 9, 16, 20], unit_node2)
unit_node4 = UnitMark([1122, 11, 19, 40], unit_node3)
unit_node5 = UnitMark([1116, 8, 16, 35], unit_node4)
unit_node6 = UnitMark([1114, 14, 21, 30], unit_node5)
unit_node7 = UnitMark([1112, 10, 6, 50], unit_node6)
unit_node8 = UnitMark([1111, 17, 22, 30], unit_node7)
unit_list_head = unit_node8
print_unit_result(unit_list_head)
lyst = [1325, 17, 20, 20]
print("Insert a new record: ID: "+ str(lyst[0]) +" A1: "+ str(lyst[1])+ " A2: "+ str(lyst[2]) +" Exam: "+ str(lyst[3])+"\n")
new_unit_node = UnitMark(lyst, None)
new_unit_list_head = unit_list_head.insert_unit_result(new_unit_node)
print_unit_result (new_unit_list_head)
if __name__ == "__main__":
main()
电流输出
Current linked list contains:
Student_ID.: 1111 A1: 17 A2: 22 Eaxm: 30 ->total 69
Student_ID.: 1112 A1: 10 A2: 6 Eaxm: 50 ->total 66
Student_ID.: 1114 A1: 14 A2: 21 Eaxm: 30 ->total 65
Student_ID.: 1116 A1: 8 A2: 16 Eaxm: 35 ->total 59
Student_ID.: 1122 A1: 11 A2: 19 Eaxm: 40 ->total 70
Student_ID.: 1145 A1: 9 A2: 16 Eaxm: 20 ->total 45
Student_ID.: 1189 A1: 2 A2: 30 Eaxm: 30 ->total 62
Insert a new record: ID: 1325 A1: 17 A2: 20 Exam: 20
current id: 1111 new id: 1325
The current linked list contains:
Student_ID.: 1325 A1: 17 A2: 20 Eaxm: 20 ->total 57
Student_ID.: 1111 A1: 17 A2: 22 Eaxm: 30 ->total 69
Student_ID.: 1112 A1: 10 A2: 6 Eaxm: 50 ->total 66
Student_ID.: 1114 A1: 14 A2: 21 Eaxm: 30 ->total 65
Student_ID.: 1116 A1: 8 A2: 16 Eaxm: 35 ->total 59
Student_ID.: 1122 A1: 11 A2: 19 Eaxm: 40 ->total 70
Student_ID.: 1145 A1: 9 A2: 16 Eaxm: 20 ->total 45
Student_ID.: 1189 A1: 2 A2: 30 Eaxm: 30 ->total 62
目前没有回答
相关问题 更多 >
编程相关推荐