目录
为什么要学习数据结构与算法
-
软件开发工程师必学掌握编程功底
-
计算机及相关专业考研考博课程
-
全国计算机等级考试(二级)
-
国家软件资格考试:程序员考试课程(初级)
-
等等
数据结构与算法课程目录
-
数据结构概论
-
线性表
-
栈和队列
-
串、数组和广义表
-
树和二叉树
-
图
-
动态存储管理技术
-
查找与排序
-
文件技术
可以参考教材:
-
《数据结构》(C语言版),严蔚敏,吴伟民,清华大学出版社
-
《数据结构与算法分析》电子工业出版社
数据结构的研究内容
-
N.沃思(Niklaus Wirth)教授提出 ------> 程序 = 算法 + 数据结构
-
电子计算机的主要用途
(1)早期主要用于数值计算
(2)后来处理逐渐扩大到非数值计算领域,能处理多种复杂的具有一定结构关系的数据
-
研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作
基本概念与术语
-
数据(data) ------> 所有能输入到计算机中去的描述客观事物的符号
(1)数值性数据
(2)非数值性数据
-
数据元素(data element) ------> 数据的基本单位,也称结点(node)或记录(record)
-
数据项(data item)—有独立含义的数据最小单位,也称域(field)
三者之间的关系:数据 > 数据元素 > 数据项 如:学生表 > 个人记录 > 学号、姓名……
-
数据对象(Data Object):相同特性数据元素的集合,是数据的一个子集
(1)整数数据对象 ------> N = { 0, +-1, +-2, … }
(2)学生数据对象 ------> 学生记录的集合
-
数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元素的集合 ------> 数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系
-
逻辑结构 ------> 数据元素间抽象化的相互关系,与数据的存储无关,独立于计算机,它是从具体问题抽象出来的数学模型
(1)划分方法一 ------> 线性结构(线性表、栈、队列、串)和非线性结构(树、图)
(2)划分方法二 ------> 集合(同属一个结合外,无其他关系)、线性结构(一个对一个)、树形结构(一个对多个)、图形结构(多个对多个)
-
存储结构
(1)顺序存储结构 ------> 借助元素在存储器中的相对位置来表示数据元素间的逻辑关系
(2)链式存储结构 ------> 借助指示元素存储地址的指针表示数据元素间的逻辑关系
-
数据运算
(1)逻辑结构和存储结构都相同, 但运算不同, 则数据结构不同. 例如, 栈与队列
(2)对于一种数据结构, 常见的运算 ------> 插入、删除、修改、查找、排序
-
数据类型 ------> 在一种程序设计语言中,变量所具有的数据种类
(1)FORTRAN语言:整型、实型、和复数型
(2)C语言 ------> 基本数据类型: char int float double void 构造数据类型:数组、结构体、共用体、文件
数据类型是一组性质相同的值的集合, 以及定义于这个集合上的一组运算的总称
-
抽象数据类型
(1)更高层次的数据抽象
(2)由用户定义,用以表示应用问题的数据模型
(3)由基本的数据类型组成, 并包括一组相关的操作
抽象数据类型的表示与实现
-
抽象数据类型可以通过固有的数据类型(如整型、实型、字符型等)来表示和实现
-
它有些类似C语言中的结构(struct)类型,但增加了相关的操作,教材中用的是类C语言(介于伪码和C语言之间)作为描述工具
-
教材中用的是类C语言(介于伪码和C语言之间)作为描述工具
(1) 预定义常量及类型 //函数结果状态代码 #define OK 1 #define ERROR 0 #define OVERFLOW -2 // Status是函数返回值类型,其值是函数结果状态代码。 typedef int Status; (2)数据元素被约定为ElemType 类型,用户需要根据具体情况,自行定义该数据类型。 (3)算法描述为以下的函数形式: 函数类型 函数名(函数参数表) { 语句序列; } (4)内存的动态分配与释放 C++:使用new和delete动态分配和释放内存空间 分配空间 指针变量 = new数据类型; 释放空间 delete指针变量; C:malloc calloc / free等 (5)赋值语句 (6)选择语句 (7)循环语句 (8)使用的结束语句形式有: 函数结束语句 return 循环结束语句 break; 异常结束语句 exit(异常代码); (9)输入输出语句形式有: 输入语句 cin(scanf()) 输出语句 cout(printf()) (10)扩展函数有: 求最大值 max 求最小值 min
算法和算法分析
-
算法定义 ------> 一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列
-
算法描述 ------> 自然语言、流程图、程序设计语言、伪码
-
算法特性
(1)输入 有0个或多个输入
(2)输出 有一个或多个输出(处理结果)
(3)确定性 每步定义都是确切、无歧义的
(4)有穷性 算法应在执行有穷步后结束
(5)有效性 每一条运算应足够基本
-
算法的评价
(1)正确性
(2)可读性
(3)健壮性
(4)高效性(时间代价和空间代价)
-
算法的效率的度量 ------> 算法效率:用依据该算法编制的程序在计算机上执行所消耗的时间来度量
(1)事后统计
(2)事前分析估计
-
时间复杂度
- 空间复杂度