不枯燥!数据结构 - 导读

专栏作者/ 树华子

专栏导读

算法+ 数据结构 = 程序

在计算机领域,有这样一个人尽皆知的著名公式,「算法+ 数据结构 = 程序」,可以说如果把编写程序比作烹饪,那么数据结构就好比菜谱中食材用量,算法就好比烹饪步骤。这个公式由瑞士计算机科学家,Pascal之父,尼古拉斯·沃斯于1976年提出。很多人觉得它已经完全过时了,其实并不然。邹欣的《构建之法》一书中对这个著名公式进行了补充,他说道「程序 = 数据结构+算法、 软件 = 程序 + 软件工程」。虽然当今的软件开发过程已经不像是上个世纪那样简单,但这并不是不去好好学习数据结构这门课程的理由。算法和数据结构就如同程序员的基本功,是重中之重,掌握了其中的思想和原理,很多问题才可以迎刃而解。

很多同学可能会问,「我大概知道算法的含义,可数据结构到底是什么呢?」

什么是数据结构?

要回答这个问题,首先要回答「什么是数据?

数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机处理的符号的总称,在不同是场景中数据有不同的表现形式,可以是数字(整数、浮点数等等)、字符串甚至是图像、声音。

现在你明白了数据的概念,但还不够,你需要明白「什么是数据元素?

数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。


数据元素

为了便于理解,我们举一个简单的例子。在整数数据中,整数“1”可以视作一个数据元素,在本文中我们暂且以上图形式表示它。

接下来你还需要知道另一个概念,「什么是数据对象?

数据对象是性质相同的数据元素的集合,是数据的一个子集。


数据对象

继续刚才的例子,整数数据对象可以表示为N={...,-1,0,1,2,...},在本文中我们暂且以上图形式表示它。

好了,现在我们可以回到一开始提出的问题,「什么是数据结构?

数据结构相互之间存在一种或多种特定关系的数据元素的集合。换言之,我们可以将数据结构当作是一种附带关系的数据对象。

对于数据集合{1,2,3,7,10},当数据元素之间关系仅为“同属一个集合”,此外无其他关系时,我们暂且以如下的集合来表示:

集合

当数据元素之间存在一对一的关系时,例如对于上述集合,若任意两个元素A和元素B之间存在「A是集合中大于B的最小的元素」这种关系,则可以使用如下的线性结构加以表示:


线性结构

当数据元素之间存在一对多的关系时,例如对于同样的集合,若元素A和元素B之间存在「可由A和集合中另一元素相加得到B」这种关系,则可以使用如下的树形结构加以表示:


树形结构

当数据元素之间存在多对多的关系时,例如对于同样的集合,若元素A和元素B之间存在「A和B互质」这种关系,则可以使用如下的图状结构加以表示:


图状结构

想必你已经对数据结构和它的种类有了大体的认识,实际上,对于数据结构这个概念,至今尚未有一个被一致公认的定义,不同的人在使用这个词的时候所表达的意思可能是不同的,请看一段关于数据结构英文定义:

A data structure is a specialized format for organizing and storing data.General data structure types include the array, the file, the record, the table, the tree,and so on. Any data structure is designed to organize data to suit a specific purpose so that it can be accessed and worked with in appropriate ways. In computer programming, a data structure may be selected or designed to store data for the purpose of working on it with various algorithms.

(请尝试阅读理解上面这段话,计算机领域对英语水平是有基本的要求的...毕竟作为一个“程序员”以后有很多机会混迹SO或是github)

一种数据结构是用来组织和存储数据的一种特定格式。常见的数据结构类型包括数组、文件、记录、表、树等等。任何数据结构都被设计用来组织数据以适应于特定的目的,因此它必须可以访问并且可以在特定方式下工作。在计算机编程中,一个数据结构可以被选择或设计以为不同的算法存储数据。

如果你暂时认为上述解释有些晦涩难懂也没有关系,在日后的学习中相信你会慢慢理解这段话的含义。

数据结构研究什么?

数据的逻辑结构和其存储的物理结构

为不同的数据结构设计不同的算法

对应的算法的时间复杂度(效率)

缘何产生

1968年唐纳德·克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。

20世纪70年代初,出现了大型程序,软件也开始相对独立,结构程序设计成为程序设计方法学的主要内容,数据结构作为一门独立的课程开始进入大学课堂。

课程框架

课程纲要

0.1 / 专栏导读

第一章线性结构

1.1 / 线性表

1.2 / 栈

1.3 / 队列

第二章树结构

2.1 / 树和二叉树

2.2 / 遍历二叉树和线索二叉树

2.3 / 哈夫曼树和哈弗慢编码

2.4 / 堆

第三章图结构

3.1 / 图和图的遍历

3.2 / 最短路径问题

3.3 / 最小生成树

第四章查找

4.1 / 静态查找表

4.2 / 动态查找表

4.3 / 哈希表

第五章排序

5.1 / 插入排序

5.2 / 快速排序

5.3 / 选择排序

5.4 / 归并排序

5.5 / 基数排序

第六章延伸

(本章内容和篇数视情况而定)

参考资料

严蔚敏《数据结构》(清华大学出版社)

陈越《数据结构》(高等教育出版社)

教学工具预备知识

本专栏教学内容以C语言为样例代码,希望你可以具备C语言的基本知识。

C语言基础可参考:

http://www.runoob.com/cprogramming/c-tutorial.html

http://www.imooc.com/learn/249

推荐阅读

以下书目虽然和本专栏教学内容并无太大关系,请相信我,他们对于刚刚走上或者即将走上这条道路的你会有很大的帮助。

结城浩(Hiroshi Yuki)《程序员的数学》(人民邮电出版社)

乔恩·本特利(Jon Bentley)《编程珠玑》(人民邮电出版社)

邹欣《构建之法》(人民邮电出版社)

吴军《数学之美》(人民邮电出版社)



本来这个系列作为《了不起的数据结构》是发豆瓣专栏的,可仿佛豆瓣不太喜欢专业性的文章,看来还要继续修订《信息浪潮》。

也好没了交稿日期,可以轻松一点写这个系列,在简书慢慢与大家分享。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容