本站笔记内容以“数据结构(C语言版本)”严蔚敏为教材进行整理。
简述下学习C语言的过程
我的学习流程:C语言入门(翁凯)–>(线性代数–>离散数学)–>C语言程序设计进阶(翁凯)->数据结构–>bilibili:算法左神视频
这里推荐:C Primer Plus(教材)+ C primer Plus 习题解答
套装。对于新手进阶的了解关于C99,C11特性的区别有些许帮助
关于编程练习推荐:Dotcpp(入门)–>PTA(熟悉)–>蓝桥杯(进阶)–>LeetCode(加深)
如果学校给予支持(建议):大一参加程序设计天梯赛–>大二参加蓝桥杯–>大三以LeetCode(企业题目训练)为后续就业做准备。
数据结构(目录)
- 绪论
- 线性表
- 栈和队列
- 串
- 数组和广义表
- 树和二叉树
- 图
- 动态存储管理
- 查找
- 内部排序
- 外部排序
- 文件
1:绪论
1.1:何为数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。················本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。
数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以
及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得
到的新结构仍保持原来的结构类型。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集
合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构。
数据的逻辑结构和物理结构是数据结构的两个密切相关的方面,同一逻辑结构可以对应不同的存储结构。
算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。
数据结构的研究内容是构造复杂软件系统的基础,它的核心技术是分解与抽象。
通过分解可以划分出数据的3个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构。
类似地,通过分解将处理要求划分成各种功能,再通过抽象舍弃实现细节,就得到运算的定义。
上述两个方面的结合可以将问题变换为数据结构。
这是一个从具体(即具体问题)到抽象(即数据结构)的过程。
然后,通过增加对实现细节的考虑进一步得到存储结构和实现运算,从而完成设计任务。
这是一个从抽象(即数据结构)到具体(即具体实现)的过程。
摘录 百度百科
看了摘录是不是感觉有点多呢?其实就是纸老虎,只需要了解数据结构就是
程序从
- 抽象–>具体
- 内容程序结构化
1.2:数据结构概念和术语
后续常见的术语概念的定义
- 数据(data):对客观事物的符号表示,一般表述为(程序的原料)
- 数据元素(data element):数据的基本单位
- 数据对象(data object):性质相同的数据元素的集合
- 数据结构(data structure):一种或多种特定关系数据元素的集合
数据结构
根据数据元素之间的关系称为结构(structure)
这里主要分为四类:
- 集合
- 线性结构
- 树形结构
- 网状结构/图转结构
-
集合:结构中数据元素之间除了“同属性一个集合”外,别无其他关系。
例如:高一(1)班中有50名学生,这些学生构成一个集体,而这个集体的属性都是学生 -
线性结构:结构中数据元素之间存在一个对一个的关系,是一个有序数据元素的集合。
常用的线性结构有:线性表,栈,队列,双队列,串(一维数组)。例如:我们的项链,项链就是由一串一串的珍珠或其他窜接起来。
-
树形结构:结构中的数据元素之间存在一个对多个的关系
上图为树形样例
4.图形结构(网状结构):结构中数据元素之间存在多对多的关系
上图为图形样例
1.3:算法与算法分析
**算法(algorithm)**是对特定问题求解步骤的一种描述,是指令的优先序列,其中:每一条指令表示一个或多个操作,此外,算法(algorithm)还有下列5个重要特性:
- 有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。
- 确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。即对于相同的输入只能得出相同的输出。
- 可行性:一个算法是可行的,即算法中描述的操作都是吋以逋过已经实现的基本运算执行有限次来实现的。
- 输入:一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合。
- 输出:一个算法有一个或多个的输出,这些输出是同输入有着某种特定关系的量。
1.3.1:算法设计要求
对于一个“好”的算法通常有以下目标:
(1)**正确性(correctness):**算法应满足具体问题需求,一般对于输入、输出、加工等具有明确的无歧义的描述,否则,算法的正确与否的衡量标准则不存在。
对于算法的正确性一般有一下4个层次关系:
- 程序不含语法错误
- 程序对于几组输入数据能够满足规格说明要求的结果。
- 程序对于具有刁难性输入能够得到满足规格说明要求的结果
- 程序对于一切合法的输入数据能长生说明要求的结果。
1.3.2:算法效率的度量
算法执行时间需通过依据算法在计算机上所消耗的时间来度量。度量一个程序的执行时间通常有两种方法。
一、事后统计的方法(时间复杂度)
T(n)=O(f(n))
二、事前分析估算的方法
1.3.3:算法的存储空间需求(空间复杂度)
S(n)=O(f(n))