一、数据结构的基本概念和术语

》数据结构是一门专业技术基础课程,课程分析/研究计算机加工数据的特征、数据的逻辑结构、数据的存储结构、数据涉及的算法、以及不同特征数据应用情况。

            〉结构化程序=(算法)+(数据结构)

            〉面向对象的程序=(算法+数据结构)

数据:客观事物的符号表示;所有能够输入到计算机中并被计算机程序处理的符号集合。


数据元素: 数据的基本单位,计算机中通常作为一个整体来考虑。


数据项:一个数据元素可以有若干个数据项组成。


数据对象:性质相同的数据元素的集合。


数据结构:相互之间存在一种或多种特定关系的数据元素的集合。


结构:数据元素之间的关系。


四种基本结构:线性结构、树形结构、图形结构、集合


数据逻辑结构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)

-估算办法:输入数据所占空间+程序所占空间+辅助变量所占空间

求解具体问题的具体算法时,对问题的不同实例,可能需要耗费不同的时间和空间,因此一般考虑   -平均时间复杂性     -最坏与最好情况时间复杂性)一般不考虑



猜你喜欢

转载自blog.csdn.net/darkxiaoming/article/details/79949500