zoukankan      html  css  js  c++  java
  • 单链表的节点插入

    在单链表中插入节点有三种方式,插入到节点的头部、插入到最后一个节点后面、以及插入到链表中间任意位置

    1.新节点插入第一个节点之前,即成为此链表的首节点,只需要把新节点的指针指向链表原来的第一个节点,再把链表头指针指向新节点即可

    算法如下

    newnode.next=first

    first=newnode

    2.新节点插入最后一个节点之后,只需要把链表最后一个节点的指针指向新节点,新节点的指针再指向None即可

    算法如下:

    ptr.next=newnode
    newnode.next=None

    3.新节点插入链表中间位置例如插入节点在X、Y之间只要将X节点的指针指向新节点,新节点指针指向Y即可

    算法如下

    newnode.next=x.next
    x.next=newnode

    我们设计一个Python程序,建立一个员工数据的单向链表并允许在链表头部尾部和链表中间插入新节点,最后离开时列出此链表的最后所有节点的数据字段内容

    import sys
    
    class employee:
        def __init__(self):
            self.num=0
            self.salary=0
            self.name=''
            self.next=None
            
    def findnode(head,num):
        ptr=head
        
        while ptr!=None:
            if ptr.num==num:
               return ptr
            ptr=ptr.next
        return ptr
    
    def insertnode(head,ptr,num,salary,name):
        InsertNode=employee()
        if not InsertNode:
            return None
        InsertNode.num=num
        InsertNode.salary=salary
        InsertNode.name=name
        InsertNode.next=None
        if ptr==None: #插入第一个节点
            InsertNode.next=head
            return InsertNode
        else:
            if ptr.next==None: #插入最后一个节点
                ptr.next=InsertNode
            else: #插入中间节点
                InsertNode.next=ptr.next
                ptr.next=InsertNode
        return head
    
    position=0
    data=[[1001,32367],[1002,24388],[1003,27556],[1007,31299], 
          [1012,42660],[1014,25676],[1018,44145],[1043,52182], 
          [1031,32769],[1037,21100],[1041,32196],[1046,25776]]
    namedata=['Allen','Scott','Marry','John','Mark','Ricky', 
              'Lisa','Jasica','Hanson','Amy','Bob','Jack']
    print('员工编号 薪水 员工编号 薪水 员工编号 薪水 员工编号 薪水')
    print('-------------------------------------------------------')
    for i in range(3):
        for j in range(4):
            print('[%4d] $%5d ' %(data[j*3+i][0],data[j*3+i][1]),end='')
        print()
    print('------------------------------------------------------
    ')
    head=employee() #建立链表的头部
    head.next=None
    
    if not head:
        print('Error!! 内存分配失败!!
    ')
        sys.exit(1)
    head.num=data[0][0]
    head.name=namedata[0]
    head.salary=data[0][1]
    head.next=None
    ptr=head
    for i in range(1,12): #建立链表
        newnode=employee()
        newnode.next=None
        newnode.num=data[i][0]
        newnode.name=namedata[i]
        newnode.salary=data[i][1]
        newnode.next=None
        ptr.next=newnode
        ptr=ptr.next
    
    while(True):
        print('请输入要插入其后的员工编号,如输入的编号不在此链表中,') 
        position=int(input('新输入的员工节点将视为此链表的链表头部,要结束插入过程,请输入-1:'))
        if position ==-1:
            break
        else:
            
            ptr=findnode(head,position)
            new_num=int(input('请输入新插入的员工编号:'))
            new_salary=int(input('请输入新插入的员工薪水:'))
            new_name=input('请输入新插入的员工姓名: ')
            head=insertnode(head,ptr,new_num,new_salary,new_name)
        print()
                  
    ptr=head
    print('	员工编号    姓名	薪水')         
    print('	==============================')
    while ptr!=None:
        print('	[%2d]	[ %-7s]	[%3d]' %(ptr.num,ptr.name,ptr.salary))
        ptr=ptr.next

  • 相关阅读:
    json
    用data的方法获取值的时候,要注意的问题一定要在先封装好
    勾选框图片代替,两张图片进行切换
    Google统计
    1,全局变量;2,图形验证码;3,解决bug的毅力
    怎么快速写好看的手机menu菜单
    用css、如何让图片自动适应屏幕大小,不出现滚动条,不变形,兼容各个浏览器?急!!!
    怎么安装mybatis以及快速生成xml文件
    mysql连接数据库时报2003错误怎么解决
    屏幕的遮挡层,js得到屏幕宽高、页面宽高 (window.screen.availHeight)等--
  • 原文地址:https://www.cnblogs.com/jzxs/p/10284177.html
Copyright © 2011-2022 走看看