》数据结构是一门专业技术基础课程,课程分析/研究计算机加工数据的特征、数据的逻辑结构、数据的存储结构、数据涉及的算法、以及不同特征数据应用情况。
〉结构化程序=(算法)+(数据结构)
〉面向对象的程序=(算法+数据结构)
数据:客观事物的符号表示;所有能够输入到计算机中并被计算机程序处理的符号集合。
数据元素: 数据的基本单位,计算机中通常作为一个整体来考虑。
数据项:一个数据元素可以有若干个数据项组成。
数据对象:性质相同的数据元素的集合。
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。
结构:数据元素之间的关系。
四种基本结构:线性结构、树形结构、图形结构、集合
数据逻辑结构S=(D,R)
例:复数
Complex=(C,R) 其中:C={c1,c2},R={r1} r1={<c1,c2>}
逻辑结构:数据元素之间的逻辑关系
物理结构:数据元素在计算机中的存储方法(表现和实现)
逻辑结构分为:集合、线性结构、树状结构、网状结构
物理结构分为:
顺序结构:利用存储器中的物理关系来表示逻辑关系。
链式结构:用在存储器中附加指针的方式来表示逻辑关系。
数据类型:数据值+操作 原子(基本)数据类型 结构数据类型
抽象数据类型(ADT):数据结构+定义在此结构上的一组操作(和其表示实现无关)
抽象数据类型的三元组表示(D,S,P)
例: 抽象数据类型Circle
ADT Circle{
Data: /*数据对象
double r;double x,y; 数据关系
Operations: 基本操作*/
CreateCircle(double x,double y,double r);
double Area(){return 3.14*r*r;}
double Circumference(){return 2*3.14*r;}
}ADT Circle
C语言的ADT技术
-.h文件定义数据表示和操作原型
-.c文件实现操作
例:Circle
/* circle.h
typedef struct{double x,y,r;}Circle;
Circle CreateCircle(double X,double y,double r);
double Area(Circle c);
double Circumference(Circle c);
*/
/* circle.c
#include “circle.h”
const float pi=3.14;
Circle CreateCircle(double x,double y,double r){
Circle c;
c.x=x;c.y=y;c.r=r;
return c;
}//Ciccle
double Area(Circle c){return c.r*c.r*pi;}
double Circumference(Circle c){return 2*c.r*pi;}
*/
预定义常量及类型
const int TRUE=1;
const int FALSE=0;
const int OK=1;
const int ERROR=0;
const int OVERFLOW=-2;
数据元素被约定为ElemType类型,用户需要根据具体情况自行定义该数据类型。
算法描述为函数形式:
函数类型 函数名(函数参数表)
{
语句序列;
}
方法命名 Pascal casing格式
-方法中每个词的第一个字母都是大写,其他字母都是小写。
-OpenFile
参数命名 camel casing格式
-类似方法的命名,但第一个字母不需要大写。
-myCount
变量命名 匈牙利表示法
-Integer int
选择结构语句
-条件语句1 if(表达式)语句;
-条件语句2 if(表达式)语句;
else 语句;
开关语句
switch(表达式)
{
case 值1:语句序列1;break;
case 值2:语句序列2;break;
……
default:语句序列n+1;
}
循环结构语句
-for语句 for(表达式1;循环条件表达式;表达式2)语句;
-while语句 while(循环条件表达式)语句;
-do-while语句 do{语句序列;} while(循环条件表达式);
结束语句
-函数结束语句 return
return 表达式; return;
-case或循环结束语句(结束整个循环)
break;
-continue(结束本次循环,直接进行下一次循环)
continue;
-异常结束语句
exit(异常代码);
输入输出语句(可以连续输入输出)
-输入语句 cin>>x>>y>>z;
-输出语句 cout<<x<<y<<z;
注释格式
-单行注释 //注释内容
-多行注释
/*
注释内容
*/
逻辑运算
-与 &&
-或 ||
-非 !
操作(逻辑结构)
-创建:创建一个空的数据结构。
-清除:删除数据结构中的所有数据元素。
-插入:在数据结构指定位置上插入一个新数据元素。
-删除:将数据结构中的某个数据元素删去。
-搜索:在数据结构中搜索满足特定条件的数据元素。
-更新:修改数据结构中的某个数据元素的值。
-访问:访问数据结构中的某个数据元素。
-遍历:按照某种次序访问数据结构中的每一数据元素,使每个数据元素恰好被访问一次。
程序:解决问题的方法步骤。特点是有始有终、每个步骤都能操作、所有步骤执行完对应问题就能得到解决。
算法的表示方法
-自然语言表示算法(文字冗长,容易出现歧义)
-伪代码
-流程图
算法的基本机构
-顺序结构
-选择结构
-循环结构 (当型循环while、直到型循环do-while;)
算法的概念
-对特定问题求解步骤的一种描述,是指令的有序序列(有穷的、解决一个特定问题的运算序列)。
算法的特性 (评估标准:时间复杂度、空间复杂度)
-有穷性:执行有穷步后结束、每一步都在有穷时间内完成。
-确定性:每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。
-可行性:精确地运行、有限次运算实现
-输入:初始值,可以有零个或多个。
-输出:结果值,可以有一个或多个。
评估问题的规模:例如矩阵的阶数、图的结点个数。
时间复杂度:算法执行时间随规模增长而增长的趋势。
-T(n)=O(f(n)) 大O表示法,f(n)算法规模, T(n)称算法复杂度。
-估算办法:以算法中重复执行的次数作为算法时间复杂度的依据。
三种最常见时间复杂度:O(1)常量级 O(n) 线性级 O(n2)平方级
空间复杂度:算法执行过程中所需的最大空间。
-S(n)=O(f(n)
-估算办法:输入数据所占空间+程序所占空间+辅助变量所占空间
求解具体问题的具体算法时,对问题的不同实例,可能需要耗费不同的时间和空间,因此一般考虑 -平均时间复杂性 (-最坏与最好情况时间复杂性)一般不考虑