DS介绍

1.数据结构由某一数据元素的集合和该集合中数据元素之间的关系组成;Data_Structure = {D,R}

 

2.根据数据元素之间的关系不同,数据结构可以分为两大类:线性结构和非线性结构;

    2.1线性结构:元素出第一个元素外有且只有一个前驱,除最后一个元素外有且只有一个后继;

        根据对现行结构中元素存取方法的不同,又可以分为:直接存取结构(数据,文件),顺序存取结构(栈,队列和优先队列),字典存取结构(和数组有相似之处,但数组是通过下标访问的,字典是通过关键码进行索引的)

    2.2非线性结构:每个数据元素可能与零个活着多个其他数据元素发生联系。根据关系的不同可以分为层次结构(树形结构即典型)和群结构(所有元素之间无顺序关系,集合,图,网络结构都是典型的群结构)

 

3.数据结构的核心技术是分解与抽象,从解决实际问题的需要出发,为实现所必要的功能建立的数据关系。

 

4.数据结构的存储结构可以使用以下四种基本的存储方法得到:

a)顺序存储方法:把逻辑上相邻的元素存放到物理位置上相邻的存储单元中,数据之间的逻辑关系由存储单元的临界位置关系来体现,由此得到的存储表示称为顺序存储结构,通常借助程序语言中的一维数组来描述;

b)链接存储方法:该方法不要求逻辑上相邻的元素在物理位置上也相邻,元素之间的逻辑关系由附加的指针指示,由此得到的存储表示称为链式存储结构,通常由语言中的指针类型来描述;

c)索引存储方法:该方法在存储元素信息的同时,还建立附加的索引表。索引表的每一项称为索引项,索引项的一般形式是(关键码,地址),关键码是能够唯一标识一个节点的数据项(类似于学号)。分为稠密索引和稀疏索引。

d)散列存储方法:根据节点的关键码通过一个函数的计算直接得到该节点的存储地址。

 

5.类型是一组值的集合,分为原子类型和结构类型,结构类型由原子类型按照一定的规则组合而成。数据类型是指一种类型,以及定义于这个值集合上的一组操作的总称。

注意:数据结构的逻辑概念与其在计算程序中的实现有很大的区别,例如:线性表数据类型有两种传统的实现方式:基于数组的顺序表示和基于链表的链接表示。(也就是说即使是同一个逻辑概念,在计算机程序中的实现也可以采取多种方式)

 

6.抽象数据类型通常由用户自己定义,用以表示应用问题的数据模型,是将数据结构作为一个软件构件的实现。

数据抽象类型的特征是:使用与实现分离,实行封装和信息隐藏,根据问题的需要,定义该抽象数据类型需要哪些信息,并根据功能确定公共接口中的服务,使用者可以使用公共接口中的服务对该抽象数据类型进行操作。(数据抽象类型:比如栈,单向链表)

 

7.算法

定义:通常将算法定义为一个有穷的指令集,这些指令是未解决某一特定任务规定了一个运算序列

特性:

1)有输入:必须有零个或者多个输入,这些输入取自于特定的对象的集合;

2)有输出:算法计算的结果,应该有一个或者多个;

3)确定性:算法的每一步都应该有确定地,无歧义的定义;

4)有穷性:一个算法无论在什么情况下都应执行有穷步后结束;(算法和程序不同,程序可以不满足该特性)

5)能行性:原则上都能通过计算机指令精确的执行;

 

8.算法的运行时间依赖于所用的计算机系统,编译器,可用存储空间的大小等,所以在不同的机型,不同的编译器版本,不同的软硬件配置情况下,想通过测量结果来判断算法的优劣性是不行的。所以最好的方法是比较算法的复杂性来评价算法的优劣性。包括时间复杂性和空间复杂性。

 

9.时间复杂度度量

程序步:指在语法上或语义上有意义的一段程序指令序列,而且这段指令序列的执行时间与实例特性无关。

程序步数统计方法:

1)注释:程序步数为0;

2)声明语句:程序步数为0。包括定义常数和变量的语句,用户自定义数据类型的语句,确定访问权限的语句,指明函数特征的语句;

3)表达式:如果表达式中不包含函数调用,则程序步数为1。如果表达式中包含函数调用,总的程序步数要包含分配给函数调用的程序步数;

4)赋值语句:<变量>=<表达式>的程序步数与表达式的程序步数相同,但如果赋值语句中的变量是数组或字符串(字符数组),则赋值语句的程序步数等于变量的体积加上表达式的程序步数;

5)循环语句:三种循环

switch(<表达式>):程序步数等于表达式具有的程序步数;执行一个条件的程序步数等于它自己的程序步数加上前面的所有条件计算的程序步数;

6)函数执行语句/函数调用语句:函数调用语句的程序步数为0.其时间开销计入函数执行语句。函数执行语句的程序步数一般为1.但是,当函数执行语句中包含有传值参数而且传值参数的体积与实例特性有关时,执行函数调用的程序步数等于这些值参的体积之和。如果是递归调用,还要考虑函数中的局部变量。

7)动态存储管理语句:new object, delete object, sizeof(object)。其中new, delete还分别调用了构造函数和析构函数,步数也要计算入内;

8)转移语句:包括contuinue, break, goto, return, return <表达式>,程序步数一般为1

 

程序步数本身不是一个精确地概念:例如,赋值语句x=a和x=a+b*(c-d)/e居然有相同的程序步数。程序步数不能确切的反应运行时间,所以用精确的程序步数来比较两个程序其结果不一定有价值。===>算法的渐进表示

 

posted @ 2012-08-07 15:03  大脚印  阅读(831)  评论(0编辑  收藏  举报