师:同学们,今天我们将学习必修一3.2数据与结构,用两个课时来探究数据之间的关系与应用,为利用数据实现数据的价值做准备。今天是第一课时,本节课的学习目标有:了解常见的数据类型;了解常见的数据结构;了解队列结构及其特点,并体验使用Python语言对队列进行操作。
老师这里有网上买书的订单截图,大家看看截图里有什么数据呢?
生:有姓名、电话号码、收货地址、商品名称、商品图片、单价、购买数量等。
师:对,这些数据是从计算机系统里调用出来的,它们在计算机系统里是怎样存储和应用的呢?各种计算机语言都定义了多种数据类型来存储和组织这些数据。下面以Python为例了解数据类型。刚才那些数据在Python里会被表示为什么类型的数据呢?请同学们在Python的开发环境中,利用type函数探究订单数据类型,把结果填写在学案的表一。我们通过视频来看看是怎么操作的。
type函数可以返回参数的数据类型,我们可以把订单里的数据作为参数传递给type函数,它会把这个数据的数据类型返回给我们。通过type函数我们就能知道商品名称、单价、数量的数据类型。
(学生操作)
师:通过探究我们发现商品名称是字符串数据,单价是浮点型数据,数量是整型数据。我们前面学习了数据编码,知道怎样把数据输入并存储到计算机中。接下来为了方便对数据进行处理,我们可以选择合适的软件工具,例如Python,根据问题的需要,为数据抽象出合适的数据类型,然后对数据进行组织和计算。数据类型用来定义一系列值及应用于这些值的一系列操作。
大多数程序设计语言都定义了两类数据类型,简单数据类型和复合数据类型。在Python中,整型、浮点型、字符串、布尔型不能分解成更小的数据类型,这些属于简单数据类型。而列表、字典、元组、集合等由简单数据类型组成的则是复合数据类型。在第二单元第三节,我们初步认识了列表,接下来进一步探究列表这种复合数据类型。请根据表2中的订单数据,在Python中创建列表order_list,同时把表2填写完整。
(学生操作)
师:同学们看看你填的结果和老师填的一样吗?在第二单元的学习中,我们知道数据元素相应的索引号从列表的第一个元素开始,依次是0、1、2。通过索引号我们可以找到相应数据元素的值,比如order_list[0]的值是商品的名称,order_list[1]的值是19.90。同学们发现没有,订单中的每一个数据项可以抽象为简单数据类型,商品名称抽象为字符串、单价抽象为浮点型、数量抽象为整型,而商品名称、单价、数量等基本数据组合在一起形成了一个订单数据。这样的订单数据可以抽象为列表这种复合数据类型,这个复合数据类型是由简单数据类型构成的。
现在请同学们思考一个问题,有大量订单的话,计算机如何有效地操作和管理数据呢?各种类型的数据被编码表示成二进制数据存储到计算机中。在计算机解决问题的过程中,这些数据将是最基本的元素。比如我们网购的时候,每消费一笔就会产生一个订单,包含了很多相关的数据,零散孤立的数据是很难被有效利用的。大量的订单数据,每个订单管理模式应该是一样的,每个订单独立管理的话,管理效率低下。因此要根据所要解决的问题的不同,我们还需要依据数据关系建立合适的结构,采用这些结构将数据组织起来,才能有利于操作和管理,进而更高效地解决实际问题。
那什么是数据结构呢?数据结构是存在特定关系的数据元素的集合,这种特定的关系包括了数据的逻辑结构和存储结构。在解决问题的时候,一些相关联的数据将集中在一起,形成了一个数据的集合,这种集合能够单独或者作为一个整体被访问和处理。这里所讲的数据结构属于逻辑结构,每一种数据结构里的数据元素之间都存在着一定的关系,我们可以依据这种关系分为线性结构和非线性结构。线性数据结构有队列、栈等,而非线性数据结构有树和图。今天这节课我们将学习线性数据结构,下节课将学习树和图。线性数据结构也称为线性表,在线性数据结构中,除了首元素没有前驱元素,尾元素没有后继元素外,其他元素都有一个前驱元素和一个后继元素。数据元素之间是一对一的关系,队列是一种有限制的线性结构。数据元素只能在一端依次加入,在另一端依次删除。添加的这一端叫队尾,添加的操作称为进队,删除的那端叫队首,删除的操作也称为出队。队列的特点是先进先出(First In,First Out),也就是说先进来的总是要先出去,就像付款排队、候车排队、医院电子屏上的候诊名单一样,依次进行。
今天这节课的两个重点分别是数据类型和数据结构,它们之间有什么关系吗?实际上它们关系密切,我们可以通过订单数据处理问题来分析两者之间的关系和应用。许多程序设计语言定义了复杂数据类型,以实现对数据结构更高层级的抽象。复杂数据类型可以封装并隐藏数据结构中的操作细节,让程序设计者更多地关注数据结构能做什么,便于利用数据结构解决问题。现在我们回到前面的订单数据处理问题,订单处理的一般原则是先下单、先发货,这个原则跟我们刚才讲的线性数据结构队列的操作特点先进先出刚好吻合,结合我们前面讲的列表,同学们是不是有解决问题的思路了呀?
