按降序对链表排序

2024-09-29 23:15:48 发布

您现在位置:Python中文网/ 问答频道 /正文

这个程序按升序创建一个链表我们必须按降序创建它我尝试过更改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

Tags: selfidnodea2newa1unitstudent

热门问题