写在数据结构系列的开头
使用的教材是王红梅老师的《数据结构——从概念到C++实现(第3版)》。
笔者是一名大三软件工程的学生,因为大二第一次修的时候绩点太低所以这学期再修了数据结构。整理这个系列主要是为了可爱的软件一霸的小朋友和我自己提升期末成绩。整理都整理了不放上来可惜了~这个系列的会更多的以我们的期末重点为重点,有一些我其实很感兴趣但是不在考试范围内的内容,我会后面有时间的时候再补充嘻嘻。
第一章 绪论
数据结构的基本概念
数据结构
数据元素(data element)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理
数据项(data item)是构成数据元素的最小单位,并且数据元素通常具有相同个数和类型的数据项。
数据结构(data structure)是指相互之间存在一定关系的数据元素的集合。
数据元素时讨论数据结构时涉及的最小数据单位,其中的数据项不予考虑。按照视点的不同,数据结构分为逻辑结构和存储结构。
数据的逻辑结构(logical structure)是指数据元素以及数据元素之间的逻辑关系。
数据的存储结构是数据及其逻辑结构在计算机中的表示(也称映像)。
抽象数据类型
算法概念
算法是对特定问题求解步骤的一种描述,是指令的优先序列。
算法特性
除概念外,算法还必须满足以下基本特性:
- 有穷性:一个算法必须总是(对于任何合法的输入)在执行有穷步之后结束,且每一步都在有穷时间内完成。
- 确定性:算法中的每一条指令必须有明确的含义,不存在二义性。并且,在任何条件下,对于相同的输入只能得到相同的输出。
- 可行性:描述算法的每一条指令可以转换为某种程序设计语言对应的语句,并在计算机上可以执行
算法的描述方法
重点掌握程序设计语言方法与伪代码形式,接下来以欧几里得算法为例(C++)实现
程序设计语言
#include<iostream>
using namespace std;
int ComFactor(int m,int n)
{
int r = m%n;
while(r!=0){
m = n;
n = r;
r = m % n;
}
return n;
}
int main()
{
count<<"最大公约数是:"<<ComFactor(35,25)<<endl;
return 0;
}
伪代码
算法:ComFactor
输入:两个自然数m和n
输出:m和n的最大公约数
1. r=m%n;
2.循环直到r等于0
2.1m=n;
2.2n=r;
2.3r=m%n;
3.输出n;
算法分析
算法的时间复杂度
概念详解
基本语句(basic statement)是执行次数与整个算法的执行次数成正比的语句。基本语句对算法运行时间的贡献最大,是算法中最重要的操作。
时间复杂度(time complexity)全称算法的渐进时间复杂度。即只考虑当问题规模充分大时,算法中基本语句的执行次数在渐进意义下的阶。通常用 O ( n ) O(n) O(n)记号表示
常见的时间复杂度
O ( l o g 2 n ) < O ( n ) < O ( n l o g 2 n ) < O ( n 2 ) < O ( n 3 ) < … < O ( 2 n ) < O ( n ! ) O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<…<O(2^n)<O(n!) O(log2n)<