Python创建单向链表,

链表(LinkList)是由许多相同数据类型的数据按照特定顺序排列而成的顺序表。
特性:各个数据项在计算机内存中的位置是不连续且随机存放的
优点:数据的插入与删除相当方便
缺点:设计数据结构时比较麻烦,查找数据时,无法像数组那样随机读取数据,必须按序查找
单向链表:
在动态分配内存空间时,最常用的就是:单向链表(Single Link List)
一个单向链表节点:由数据字段与指针组成,指针指向下一个元素所在内存中的位置
在这里插入图片描述
由于单向链表所有节点都知道下一个节点在哪里,但是对于前一个节点却不知道,所以链表头指针很重要。
建立单向链表:
如果以动态分配产生链表节点的节点,可以先定义一个类,接着在该类里面定义一个指针字段,作用是指向下一个链表节点,另外该类里面至少一个数据字段。
eg:声明一个学生成绩链表,包含姓名,成绩两个数据字段 与一个指针

class student:
    def  __init__(self):
        self.name=' '
        self.score=0
        self.next=None

完成节点类的声明后,可以动态建立链表的每一个节点了,假设要增加一个节点到链表的末尾,且ptr指向链表的第一个节点(尾插发建链表):
step 1:动态分配内存空间给新节点
step 2:将原链表尾部的next指针指向新元素所在内存
step 3:将ptr指针指向新节点的内存位置,表示这是新的链表链尾
step4:由于新节点为当前链表的最后一个元素,因此它的指针指向None

Python建立学生节点的单向链表 :

head=student() #建立链表头节点
head.next=None
ptr=head
select=0

while select !=2:
    print('(1)新增 (2)离开=>')
    try:
        select=int(input('请输入一个选项:'))
    except ValueError:
        print('输入错误')
        print('重新输入')
    if select==1:
        new_data=student() #新增
        new_data.name=input('name:')
        new_data.num=eval(input('ID numbe; '))
        new_data.score=eval(input('score: '))
        ptr.next=new_data
        new_data.next=None
        ptr=ptr.next
                          
        

单向遍历链表:

ptr=head.next#设置存取指针从链表的头开始
while ptr!=None:
    print('姓名:%s\t学号:%d \t成绩:%d'\
          %(ptr.nsme,ptr.num,ptr.scor))
    sumscore=sumscore+ptr.score
    ptr=ptr.next
          

设计一个Python程序,根据学生信息建立单向链表,并遍历显示内容,输出所有学生平均成绩:



import sys          #导入系统模块

class student:
    def __init__(self):
        self.name=' '
        self.num=0
        self.score=0
        self.next=None


head=student() #建立链表头节点
head.next=None
ptr=head
select=0
sumscore=0
student_num=0

while select !=2:
    print('(1)新增 (2)离开=>')
    try:
        select=int(input('请输入一个选项:'))
    except ValueError:
        print('输入错误')
        print('重新输入')
    if select==1:
        new_data=student() #新增
        new_data.name=input('name:')
        new_data.num=eval(input('ID numbe; '))
        new_data.score=eval(input('score: '))
        ptr.next=new_data
        student_num=student_num+1
        new_data.next=None
        ptr=ptr.next
                          
        
        
ptr=head.next#设置存取指针从链表的头开始
while ptr!=None:
    print('姓名:%s\t学号:%d \t成绩:%d'\
          %(ptr.name,ptr.num,ptr.score))
    sumscore=sumscore+ptr.score
    ptr=ptr.next

if student_num!=0:
    print('-----------------------------------------------')
    print('学生平均成绩:%.2f'%(sumscore/student_num))
          

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值