内容正文:
数据与结构
全一课时
主讲人:鹿寻老师
信息技术教科版
情境导入
同学们,相信大家都有过网购的经历。请看大屏幕,这是一个非常普通的订单。谁能快速告诉我,这个订单里都包含了哪些信息?
图1 淘宝网商品的订单数据
图2 京东商城商品的订单数据
活动1:了解订单数据
请参照图1图2所示的订单数据或者你自己的购物车订单数据填写表3.2.1。
网站名称 订单中的数据 Python中对应的数据类型
商品名称 字符串
表3.2.1 网购中的订单数据
活动1:了解订单数据
请参照图1图2所示的订单数据或者你自己的购物车订单数据填写表3.2.1。
网站名称 订单中的数据 Python中对应的数据类型
某电商
网站 商品名称 字符串
单价 浮点型
数量 整型
高中
学籍网 姓名 字符串
出生日期 日期型
是否是团员 布尔型(逻辑型)
表3.2.1 网购中的订单数据
数据类型
如果一个网店每天要处理成千上万个订单,我们还能用一个个孤立的变量order1, order2, order3...来存储吗?为什么?
为了解决这个问题,我们不仅需要知道数据的‘类型’,更需要知道如何组织它们之间的关系。这就是我们今天要学习的“数据结构”。
线性数据结构
数据结构是存在特定关系的数据元素的集合。
线性数据结构又称线性表,在线性数据结构中,除首元素没有前趋元素、尾元素没有后继元素外,其他元素都只有一个前趋元素和一个后继元素。
线性表中数据元素之间是一对一的关系。
队列
队列是一种有限制的线性结构,它的数据元素只能从一端依次添加(进队),在另一端依次删除(出队)。比如,超市里排队付款的队伍。
对于订单处理,‘先下单先发货’的原则像什么?
在计算机中,我们用一种叫“队列”的结构来模拟这种先进先出的关系。
活动2:编制订单数据处理程序
listque=[] #定义列表listque存储订单
x=0
while(x!=4): #当x=!4时,执行循环
print('
1. 添加订单')
print('2. 发货')
print('3. 查看订单列表')
print('4. 退出')
x=int(input("输入你的选择:")) #输入选择项
if x==1:
y=input("输入订单编号:") #输入订单编号
#在列表listque中添加订单号
elif x==2:
if len(listque)==0: #如果订单列表为空
print("订单列表为空")
else:
#删除列表listque的首元素,表示发货
elif x==3:
print("等待发货:",listque) #查询列表listque中的订单号
下面的Python程序可以实现以下功能:
提供“添加订单”“发货”“查看订单列表”“退出” 四个操作选项。
当我们选择“1”后输入订单数据,程序将订单数据添加到订单数据表中;
选择“2”后,程序将当前订单列表中最早进入的数据删除(表示已安排发货处理) ;
选择“3”可以显示当前订单列表中所有的订单数据;
选择“4”将结束运行。
请你完善下列Python程序,模拟添加订单和发货的过程,了解订单列表的操作过程。
活动2:编制订单数据处理程序
listque=[] #定义列表listque存储订单
x=0
while(x!=4): #当x=!4时,执行循环
print('
1. 添加订单')
print('2. 发货')
print('3. 查看订单列表')
print('4. 退出')
x=int(input("输入你的选择:")) #输入选择项
if x==1:
y=input("输入订单编号:") #输入订单编号
listque.append(y) #在列表listque中添加订单号
elif x==2:
if len(listque)==0: #如果订单列表为空
print("订单列表为空")
else:
print("发货单号:"+listque.pop(0))
elif x==3:
print("等待发货:",listque) #查询列表listque中的订单号
下面的Python程序可以实现以下功能:
提供“添加订单”“发货”“查看订单列表”“退出” 四个操作选项。
当我们选择“1”后输入订单数据,程序将订单数据添加到订单数据表中;
选择“2”后,程序将当前订单列表中最早进入的数据删除(表示已安排发货处理) ;
选择“3”可以显示当前订单列表中所有的订单数据;
选择“4”将结束运行。
请你完善下列Python程序,模拟添加订单和发货的过程,了解订单列表的操作过程。
活动3:了解快递派送路线
快递到达目的地城市化,物流图的结构呈树状,如图3.2.4所示。
图3.2.4 城市物流配送线路
“请大家观察物流路径:一级快件集散中心 -> 二级快件集散中心 -> 共同配送点 -> 快递驿站/快递柜。这个过程中,一件快递从一个大节点分拨到多个下级小节点,层层展开。”
这种一对多的层次关系,在计算机中用树结构来表示。
树结构
树结构是一种具有层次关系的非线性结构。
树是由 n (n>0) 个节点组成的有限集合。
若 n=0, 则称为空树。
任何一个非空树均满足以下两个条件:
仅有一个称为根的节点;
(2) 当 n>0 时,其余节点可分为 m(m≥0) 个互不相交的有限集合,其中每个集合又是一棵树,并称为根的子树。
在图 3.2.3 中,节点 A 为根节点,B、C、D 为 A 白的子树的根节点。同理,E、F、G 是 B 的子树的根节点,B 是 E、F、G 的父节点。在树结构中,数据元素之间是一对多的关系。
图 3.2.3 树结构
活动4:了解物流网络
“如果我们考虑多个城市之间的物流运输网络,情况就变得更复杂了。一个城市(如长沙转运中心)可以直达多个城市,也可以被多个城市直达。”
请查看书中图3.2.5中的物流过程,尝试用圆圈表示城市,用线段表示城市之间的送达关系,将图3.2.6补充完整。
岳阳市
南通市
扬州市
图3.2.6 物流数据图形化示意图
13
活动4:了解物流网络
图3.2.6 物流数据图形化示意图
这种多对多的复杂关系,是树结构无法表示的,需要用更强大的图结构来建模。
岳阳市
长沙市
南通市
南京市
泰州市
扬州市
14
图结构
图结构是由一组节点(称为顶点)和一组节点间的连线(称为边或弧)构成的一种数据结构。图结构中的每个顶点都可以与其他顶点有边相连,图结构中数据元素之间是多对多的关系。
图3.2.6表示的是商品从供货点到收货点的派送过程的图结构。
图3.2.7也是一个图结构。
图3.2.7 图结构
1
2
8
4
9
6
7
5
3
活动5:规划取快递最短路线
某同学网购的书已经到达家附近的快递门店,需要他自己去取。不巧的是,这次购买的三本书是三个不同的物流公司派送的,他家与各快递门店的位置如图3.2.8所示。该同学估算了在这些地点之间步行需要的时间,详见表3.2.2,请你帮他规划最省时的路线。
图3.2.8 快递门店位置分布图
表3.2.2 该同学家及快递门店间步行所需时间表
地点——地点 时间/分
家——快递门店A 2
家——快递门店B 5
家——快递门店C 10
快递门店A——快递门店B 4
快递门店A——快递门店C 6
快递门店B——快递门店C 4
活动5:规划取快递最短路线
我们可以将该同学家和各个快递门店的位置抽象成顶点,两个位置间的步行线路抽象为边,边上的值表示步行时间,如图3.2.9所示。
第一步:
图3.2.9 该同学家及附近快递门店之间步行所需时间数据(单位:分)
活动5:规划取快递最短路线
将所有可能的情况一一列举出来,我们发现,分析过程的图形是树结构。
第二步:
图3.2.10 求解最短用时分析数(单位:分)
拓展练习
请分析队列、树、图三种结构的区别,并将结果填在表3.2.3中。
结构类型 数据(节点)之间的关系 生活中相应结构应用案例
队列
(线性) 一对一
树
图
表3.2.3 数据结构的比较
拓展练习
请分析队列、树、图三种结构的区别,并将结果填在表3.2.3中。
结构类型 数据(节点)之间的关系 生活中相应结构应用案例
队列
(线性) 一对一 排队(上车、过马路、付款)、医院就诊电子牌上的就诊队列
树 一对多 行政区划、书的目录结构、磁盘文件存储结构、注册表结构
图 多对多 全国航运图、铁路运输图、高速公路网
表3.2.3 数据结构的比较
Thank you
主讲人:鹿寻老师
信息技术教科版
$