Python数据结构与算法——第一课 什么是数据结构?

  首先,我们要知道什么是数据?也许我们会望文生义地认为数据就是一些数,真的是这样吗?下面是用随机数模块生成的一些数(程序代码附录1),它们是数据吗?

 

  上面这些虽然是数,只是杂乱无章的一些数,而不是数据,因为它们根本就没有啥意思。有意思才是数据的根本。

  现在天气比较冷,小明想进一批羽绒服售卖,但不知道各种颜色的羽绒服分别要进多少货,于是他到街上记录行人的羽绒服颜色,笔记如下:

  (1)红色:98

  (2)蓝色:20

  (3)黄色:90

  (4)白色:50

  (5)绿色:30

  (6)黑色:56

  小明记录下来的是数据吗?当然是。但里面不单单是数,是的,数据不一定是数。数据是信息的载体。

  信息又是什么呢?我们都很熟悉对牛弹琴的典故。一首美妙的旋律,传给我们听觉上的美感,但对于牛可能毫无意义。也就是说,对于人,这旋律是信息,对于牛就不是了。信息是个元概念,只可意会不可言传。

  载体又是什么呢?这概念是清晰的——承载的实体。一篇有关全球气候变暖的论文打印在一张纸上。这篇论文的文字载体是这张纸;这篇论文所传递的信息的载体是这纸上的文字;也可以认为这张纸是信息的间接载体。可见,信息的载体往往是一些符号或图像,即使这些符号或图像是实物做的,例如广告牌,但信息的载体是这些实物上的符号或图像而不是实物本身。

  一边是看不见摸不着的信息,一边是可看见、可听见或可触摸的实物,数据在它们之间架起了桥梁。数据的重要性就不言而喻了。

  数据那么重要,我们一定要研究它。但发现无从下手,因为数据混沌不分。为了研究数据,我们创造了数据元素作为数据的基本单位。上面小明记录行人羽绒服颜色的纸上也记录了行程和消费,笔记如下:

  (1)红色:98

  (2)蓝色:20

  (3)黄色:90

  (4)白色:50

  (5)绿色:30

  (6)黑色:56

  早上到北京路,在小青早餐店吃早餐,用20元。中午到红旗路,在旺旺餐厅吃饭,用80元。下午到广康路。

  很自然,为了研究他的这份数据,先把它分为三部分:

  第一部分,羽绒服颜色:

  (1)红色:98

  (2)蓝色:20

  (3)黄色:90

  (4)白色:50

  (5)绿色:30

  (6)黑色:56

  第二部分,行程:

  早上到北京路,在小青早餐店吃早餐,中午到红旗路,在旺旺餐厅吃饭,下午到广康路。

  第三部分,消费:

  吃早餐,用20元,吃午饭,用80元。

  若每个部分再往下分,表达的意思就不完整了。也就是说,数据元素是能表达一个完整信息的最少载体,通常作为一个整体进行考虑。上面小明的笔记就有三个数据元素。

  一个数据元素可由若干数据项组成,也称为节点记录。比如:上面的(1)红色:98”就是一项数据项。

  小明的调查活动,产生了三个数据元素——羽绒服颜色行程消费,这三个数据元素构成了小明的调查活动的数据。数据结构是相互之间存在一种或者多种特定关系的数据元素的集合。在任何问题中,数据结构中的数据元素都不是独立存在的,它们之间存在某种关系,这种关系称为结构

  数据结构包含逻辑结构存储结构(物理结构)和运算三个要素;数据结构的逻辑结构和存储结构密不可分,一个算法的设计取决于所选的逻辑结构,算法的时间则依赖于所采用的存储结构。后续课程中继续讨论。

 

参考资料:

1、《Python算法图解》何韬编著 清华大学出版社

 

 

附录1:

import random
for i in range(5):
    for j in range(10):
        print(random.randint(1, 10000), end="\t")
    print("")