中小学教育资源及组卷应用平台
第二单元
初识数据结构
项目三
探索商品基本信息表的实现
——线性表的应用
第三课时
程序实现
?教材分析
本节的主要内容是程序实现。通过
Python语言实现线性表的顺序存储和链式存储,证算法的正确性。对照程序,学生从数据结构的视角审视基于数组、链表的程序,解释程序中数据的组织形式,描述数据的逻辑结构及插入和删除操作,评判其中数据结构运用的合性,在此过程中培养学生的计算思维能力。探索商品基本信息表的实现,不仅能加深学对数据结构基本概念,以及线性表顺序存储和链式存储过程的理解更重要的是能够熟练地运用所学到的线性数据结构知识解决生活中的真实问题,在编写程序过程中进行自主和协作探究,从而培养学生的数字化学习和创新能力。
?教学目标
1.编程实现线性表的顺序存储和链式存储;
?教学重点
1.编程实现。
?教学难点
1.线性表顺序存储程序实现。
2.线性表链式存储程序实现。
?教学方法
体验法、讲授法、讨论法、示例法
?教学准备
计算机教室、多媒体设备、多媒体广播软件、教学课件、安装Python编程的相关软件、学生上机练习的程序文件,学生工作单等。
?教学过程
一、新课导入
复习数组的插入和删除过程并导入本课的内容——算法的实现。
二、程序实现
根据上述算法,可以编写程序实现“商品信息表”的数据插入与删除。
用
Python语言实现顺序存储结构类型可以采用定义类的方式。商品信息定义如下:
class
goods:
def
_init_(self,bar_code=”,name="
,s_number=0,price=0):
self.
Bar_code=bar_code
#条形码
self.
name=name
#品名
self.s_number=s_
number
#库存数量
self.
price=price
#售价
思考与讨论
如果要加入生产日期,该如何定义?
小贴士
数组在不同高级语言定义是不同的,有的可以使用记录类型即结构类型的数组存储数据元素(将多种数据类型集合在一个用户自定义的数据类型中)。在
Python中可以用列表嵌套、定义类类型的对象列表等方式。为了方便理解算法思想,这里采用定义类类型的对象列表模拟数组的方式。
三、课堂活动
1.若采用数组,请参考配套资源中的“商品表(数组)py,完成以下程序,实现“商品信息表”的数据插入和删除,并上机运行。
数据插入程序
数据删除程序
#表任意位置插入操作:def
insert_
sq(self,i,elem):
if
not
isinstance(i,int):
raise
TypeError
If
i
<0
or
i>self.num:
#num是商品个数
raise
IndexError
Self.data.append(goods)
For
j
in
range(self.num,i-1):________________________________________________________________
#删除表任意位置上的元素操作:def
delete_sq(self,i):
if
not
isinstance(i,int):raise
TypeErrorif
i
<0
or
i>=self.num:
raise
IndexErrorif
self.num>0:for
j
in
range(i,self.num-1):____________________del
self.data[self.num-1]____________________
2.若采用链表,请参考配套资源中的“商品表(链表).py”,完成以下实现“商信息表”的数据插入和数据删除的程序。
数据插入程序
数据删除程序
#定义将元素icm插入表中作为第
index个元素:def
insert_lk(self,
index,
item):
if
index<0
or
index
>self.
getlength0:
print
(‘index
error.‘)returnif
index
==0:
q=
Node(item,
self.
Head)
self.
head
=q
else:
post=self.
head
#post为指针前驱
p=
self.
head.
next
j=1
while
p!=0
and
jpost=p__________________if
index==j:q=node(item,p)________________________
#定义删除表中第
index个元素的方法:def
delete_lk(self,index):
if
self.is_empty()
or
index<0
or
index>self.
getlength0:print
(‘linklist
is
empty.‘)
returnif
index
==0:self.
head
=self.
head.nextelse:
post=self.
Head
p=
self.
head.
Nextj=1
while
p!=0
and
jpost=p__________________if
index==j:_____
21世纪教育网
www.21cnjy.com
精品试卷·第
2
页
(共
2
页)
HYPERLINK
"http://21世纪教育网(www.21cnjy.com)
"
21世纪教育网(www.21cnjy.com)(共21张PPT)
第三课时
程序实现
信息技术沪教版
选择性必修1
第二单元
初识数据结构
项目三
探索商品基本信息表的实现
——线性表的应用
A
B
C
一、新课导入
二、程序实现
三、课堂活动
一、新课导入
数组与变量一样,每个数组都要有一个唯一的名称,即数组名,命名规则和变量相同。
数组元素是组成数组的基本单元,每一个存储单元对应于一个数组元素。数组元素用数组的名字和它自己在数组中的顺序位置来表示。例如,d[0]表示名字为d的数组中的第一个元素,d[1]代表数组d中的第二个元素,以此类推,如下图所示。
假设存储元素e的结点为s,若要实现将e插入到ai和ai+1之间,如图所示,该如何做呢?
只须让s.next和
p.
next的指针做一点改变即可实现插入。即:
s.next=p.
next;
p.
next=s;
通过右图可以理解以上两句代码。
那么,这两句代码的顺序是否可以交换位置?
即先p.next=s,再s.next=p.next。
如果先执行
P.next=s的话,p.next会被s覆盖,s.next=p.next就等于s.next=s了,所以这两句代码是不能颠倒次序的。
单链表的删除操作如图2-19所示。
假设元素a2的结点为q,要实现删除结点q的操作,其实就是将它的前驱结点的指针指向后继结点即可。
可以是:p.next=p.next.next
也可以是:q=p.next;
p.next=q.next;
二、程序实现
根据上述算法,可以编写程序实现“商品信息表”的数据插入与删除。
用
Python语言实现顺序存储结构类型可以采用定义类的方式。商品信息定义如下:
class
goods:
def
_init_(self,bar_code=”,name="
,s_number=0,price=0):
self.
Bar_code=bar_code
#条形码
self.
name=name
#品名
self.s_number=s_
number
#库存数量
self.
price=price
#售价
思考与讨论
如果要加入生产日期,该如何定义?
思考与讨论
如果要加入生产日期,该如何定义?
?在初始化函数中加入datetime参数。
数组在不同高级语言定义是不同的,有的可以使用记录类型即结构类型的数组存储数据元素(将多种数据类型集合在一个用户自定义的数据类型中)。在
Python中可以用列表嵌套、定义类类型的对象列表等方式。为了方便理解算法思想,这里采用定义类类型的对象列表模拟数组的方式。
小贴士
三、课堂活动
1.若采用数组,请参考配套资源中的“商品表(数组)py,完成以下程序,实现“商品信息表”的数据插入和删除,并上机运行。
数据插入程序
数据删除程序
#表任意位置插入操作:
def
insert_
sq(self,i,elem):
if
not
isinstance(i,int):
raise
TypeError
if
i
<0
or
i>self.num:
#num是商品个数
raise
IndexError
self.data.append(goods)
for
j
in
range(self.num,i-1):
__________________
_______________________
_______________________
#删除表任意位置上的元素操作:
def
delete_sq(self,i):
if
not
isinstance(i,int):
raise
TypeError
if
i
<0
or
i>=self.num:
raise
IndexError
if
self.num>0:
for
j
in
range(i,self.num-1):
____________________
del
self.data[self.num-1]
____________________
2.若采用链表,请参考配套资源中的“商品表(链表).py”,完成以下实现“商信息表”的数据插入和数据删除的程序。
数据插入程序
#定义将元素icm插入表中作为第
index个元素:
def
insert_lk(self,
index,
item):
if
index<0
or
index
>self.
getlength0:
print
(‘index
error.‘)
return
if
index
==0:
q=
Node(item,
self.
Head)
self.
head
=q
else:
post=self.
head
#post为指针前驱
p=
self.
head.
next
j=1
while
p!=0
and
jpost=p
___________
_______
if
index==j:
q=node(item,p)
___________
_____________
2.若采用链表,请参考配套资源中的“商品表(链表).py”,完成以下实现“商信息表”的数据插入和数据删除的程序。
数据删除程序
#定义删除表中第
index个元素的方法:
def
delete_lk(self,index):
if
self.is_empty()
or
index<0
or
index>self.
getlength0:
print
(‘linklist
is
empty.‘)
return
if
index
==0:
self.
head
=self.
head.next
else:
post=self.
Head
p=
self.
head.
Next
j=1
while
p!=0
and
jpost=p
__________________
if
index==j:
_____
谢谢
21世纪教育网(www.21cnjy.com)
中小学教育资源网站
有大把高质量资料?一线教师?一线教研员?
欢迎加入21世纪教育网教师合作团队!!月薪过万不是梦!!
详情请看:
https://www.21cnjy.com/help/help_extract.php