数据结构(c#语言实现)
- 第1章 绪论
- 第2章 c#语言基础
- 第3章 线性表
- 第4章 栈与队列
- 第5章 迭代与递归
- 第6章 串
- 第7章 数组与广义表
- 第8章 树与二叉树
- 第9章 图
第1章 绪论
前言
本章讨论数据结构的重要概念,以及介绍算法分析的基本算法
1.1 数据结构的基本概念
1.1.1 数据结构的研究内容
程序 = 算法 + 数据结构
1.1.2 基本概念和术语
- 数据——计算机程序的处理对象,即所有能够输入到计算机中描述客观事物的符号,分为数值型数据和非数值型数据。
- 数据元素——数据的最小单位,也称结点或记录
- 数据项——有独立含义的数据的最小单位,也称域
- 数据对象——相同特性数据元素的集合,是数据的一个子集
对于以上含义,举一个具体的例子。例如:一个学生成绩的表格,包括所有学生的各门成绩,每个学生就是一个是数据元素,也称一个数据结点,学生的各门成绩就是一个数据项,由学生组成集合就是一个数据对象。 - 数据结构——三种定义:
(1)数据结构是相互之间存在一种或多种特定关系的数据元素的集合
(2)数据结构是带“结构”的数据元素的集合,“结构”就是数据元素之间的关系
(3)数据结构包括两个层次 + 一个操作,即逻辑结构、存储结构和操作
- 对于这三个定义,这里做具体的解释:
逻辑结构:数据元素兼抽象化的相互关系,独立于计算机,从具体问题抽象出来的数学模型
存储结构:又称物理结构,是数据元素及其关系在计算机中的存储方式
操作:执行不同功能的算法
分类:
- 数据类型
(1)基本数据类型:int型、double型等等
(2)构造数据类型:数组、共用体、结构体、文件
(3)抽象数据类型:更高层次的数据抽象,由用户自定义,并由一些基本数据类型构成,再加上操作,这样就能得到用户想要实际解决的问题答案
- 对于抽象数据类型(Abstract Data Type),这里做具体的解释:
无论什么抽象数据类型,都可由以下的三元组表示:
ADT = (D, S, P)【(Data, Structural, Process)】
即(数据对象, 数据关系,基本操作)
| 数据对象 | <数据对象的定义> |
| 数据关系 | <数据关系的定义> |
| 基本运算 | <基本操作的定义> | - 下面给出一个,具体的案例:
实际问题:描述一个集合ASet的数据元素类型,其中所有元素为正整数,并求两个集合的并集
相关代码不作具体的实现
ADT ASet
{
数据对象:D = { d | 0 < d < n, n为一个正整数 }
数据关系:无
基本运算:
public ASet();//创建一个集合(构造函数)
public void Show();//输出一个集合
public void InSet();//判断元素是否在集合中
public void Add();//求集合的并集
}
- 运算描述和运算实现
(1)运算描述:对逻辑结构施加的操作
(2)运算实现:完成该运算功能的算法
1.2 算法
1.2.1 算法的定义
- 一个有穷的指令集,描述了某一特定任务的运算方法
1.2.2 算法的特性
- 输入——有0个或多个输入
- 输出——有一个或多个输出
- 确定性——每一步都是确切的
- 有穷性——算法在执行有穷步后结束,值得注意的是:程序可以无限循环
- 有效性——每一条运算应可行
1.2.3 算法设计的评价
- 正确性
- 可读性
- 健壮性
- 高效性
1.2.4 算法效率的度量
- 时间复杂度
- 算法效率:用依据该算法编制的程序在计算机上执行所消耗的时间来度量
注意:消耗的时间并非是绝对运行时间,而是基本数量级
(1)方式一:事后统计
利用计算机内代码的计时功能比较
-缺点:必须先运行算法的程序;硬件、软件可能会掩盖算法本身的优劣
(2)方式二:事前分析
分析问题的规模、采用的语言、代码的质量以及算法的频度
(3)表示方法
语句频度法:计算语句重复执行的次数
大O法:利用某个函数的增长率描述
- 空间复杂度
- 算法效率:用执行该算法所需要的空间来度量
具体包括:
存储算法本身所占用的空间
算法的输入输出数据所占有的空间
算法在运行过程中为临时变量所开辟的空间
- 常见函数的增长率
1 < log n < n < nlog n < n的平方 < 2的n次方
总结
小编认为:数据结构的学习方法就是准确知道任何问题的抽象数据模型,写出其ADT,最后进行算法实现
这样,无论多么复杂的问题,都能解决!
以上就是今天要讲的内容,本章仅仅简单介绍绪论,接下来才会真正开始学习数据结构。希望大家有所收获,感谢!