python创建链表实例,Python创建单向链表,

链表(LinkList)是由许多相同数据类型的数据按照特定顺序排列而成的顺序表。

特性:各个数据项在计算机内存中的位置是不连续且随机存放的

优点:数据的插入与删除相当方便

缺点:设计数据结构时比较麻烦,查找数据时,无法像数组那样随机读取数据,必须按序查找

单向链表:

在动态分配内存空间时,最常用的就是:单向链表(Single Link List)

一个单向链表节点:由数据字段与指针组成,指针指向下一个元素所在内存中的位置

20cf16b7bab5e451157157c5a24e6e22.png

由于单向链表所有节点都知道下一个节点在哪里,但是对于前一个节点却不知道,所以链表头指针很重要。

建立单向链表:

如果以动态分配产生链表节点的节点,可以先定义一个类,接着在该类里面定义一个指针字段,作用是指向下一个链表节点,另外该类里面至少一个数据字段。

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))

运行结果:

43760ae7f2fd033534bf9869422a2737.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值