28 123
发新话题
打印

[原创]我的数据结构要点总结

[原创]我的数据结构要点总结

数据结构(用面向对象方法与C++描叙)

数据(data):是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中,被计算机程序识别和处理的符号的集合。

(1)数值性数据

(2)非数值性数据

数据元素(data element): 又称为元素、结点、记录,是数据的基本单位,在计算机程序中常作为一个整体进行考虑和处理。一个数据元素可以由若干数据项组成。

数据项(Data Item):是具有独立含义的最小标识单位,用来表示数据元素在某一方面的属性.

(1)初等项:在数据处理时不能再分割的最小单位。

(2)组合项:可以划分为更小的项。

数据对象(data object):数据对象是具有相同性质的数据元素的集合。

(1)数值型数据对象:如整数数据对象N = { 0, ±1, ±2, … }

(2)非数值型数据对象:如学生数据对象.

数据结构(data structure):指某一数据对象及该对象中所有数据成员之间的关系,是数据的组织形式.记为:

Data_Structure = {D, R}

其中,D 是某一数据对象,R 是该对象中所有数据成员之间的关系的有限集合。

(1)依据数据成员之间的关系不同来分:

①线性结构:如线性表

②非线性结构:如多维数组、广义表、树、图(或网络).

(2)依据视点的不同来分:

①数据的逻辑结构:数据元素间的逻辑关系,与数据的存储无关,可以看作是从具体问题抽象出来的数据模型,与数据元素本身的形式、内容无关.

②数据的存储表示:数据元素及其关系在计算机存储内的表示. 依赖于计算机语言, 是逻辑结构用计算机语言的实现.

a.顺序存储表示

b.链接存储表示

c.索引存储表示

d.散列存储表示

数据的运算:即对数据元素施加的操作。

数据类型:一组性质相同的值的集合, 以及定义于这个值集合上的一组操作的总称. 数据类型就是数据结构,不过它是从编程者的角度来使用的。数据类型是模板,必须定义属于某种数据类型的变量,才能参加运算。

(1)基本数据类型:可以看作是计算机中已实现的数据结构。

C语言中的基本数据类型

char int float double void

字符型 整型 浮点型 双精度型 无值

(2)构造组合类型:如数组型、构造型、文件型.

(3)抽象数据类型(ADTs: Abstract Data Types):由用户定义,用以表示应用问题的数据模型,由基本的数据类型组成, 并包括一组相关的服务(或称操作),特征是:使用与实现相分离,实行数据封装和信息隐蔽.

例如:自然数的抽象数据类型定义

ADT NaturalNumber is

objects: 一个整数的有序子集合,它开始于0,结束于机器能表示的最大整数(MaxInt)

Function: 对于所有的 x, y Î NaturalNumber; False, True Î Boolean, +-<===等都是可用的服务。

Zero( ) : NaturalNumber 返回自然数0

IsZero(x) : if (x==0) 返回True

Boolean else 返回False

Add (x, y) : if (x+y<=MaxInt)返回 x+y

NaturalNumber else 返回MaxInt

Subtract (x, y) : if (x < y) 返回 0

NaturalNumber else 返回 x - y

Equal (x, y) : if (x==y) 返回True

Boolean else 返回 False

Successor (x) : if (x==MaxInt) 返回 x

NaturalNumber else 返回 x+1

end NaturalNumber

TOP

呵呵:)
骑着小猪学VC~~~~~~~~

TOP

面向对象=对象++继承+通信:着眼于应用问题所涉及的对象.具有更好的可靠性、可修改性、可维护性、可复用性、可适用性和可理解性.相关程序设计语言有Smalltalk,Effel,C++.

(1)对象:在应用问题中出现的各种实体、事件、规格说明等,是由一组属性值和在这组值上的一组服务(或称操作)构成,其中,属性值确定了对象的状态.

(2):在面向对象方法中,把具有相同属性和服务的对象归到同一个类(class),把一个类中的每一个对象称为该类的一个实例(instance).

(3)继承:派生类的各对象能共享基类的共有的和保护性的属性和服务.

(4)消息:一个类的对象要求另一个类的对象执行某个服务的指令,指明要求哪一个对象执行这个服务,必要时还要传递调用参数.

面向过程:着眼于系统要实现的功能.用自顶向下、逐步进行功能分解的方式建立系统的功能结构和相应的程序模块结构.

数据结构的抽象层次:

聚集:共有的操作有初始化(Initial)、插入(Insert)、删除(Remove)和查找(Search).

(1)线性聚集:类中所有成员都按某种次序排列在一个序列中.

①广义索引:是"关键码—值"偶对的集合.

a.词典

b.散列表

②直接存取:可以直接存取某一指定项而不须先访问其前驱.

a.数组

b.记录

c.文件

③顺序存取:只能从序列中第一个元素起,按序逐个访问直到指定的元素.

a.表

b.栈

c.队列

d.优先队列

(2)非线性聚集:所有数据元素与其他数据元素之间不存在简单的线性关系.

①层次聚集:按层次划分的数据元素的集合,指定层次上元素可以有零个或多个处于下一个层次上的直接后继.

a.

b.

②群聚集:所有元素之间没有任何顺序关系.

a.集合

b.

TOP

gjw,你也是考清华cs的战友么?呵呵

TOP

good!

TOP

以下是引用Guru_Net在2004-8-13 23:42:07的发言: gjw,你也是考清华cs的战友么?呵呵

是啊,你也是吗?

TOP

算法:一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列.其特性是:

(1)输入 0个或多个输入

(2)输出 有一个或多个输出(处理结果)

(3)确定性 每步定义都是确切、无歧义的

(4)有穷性 算法应在执行有穷步后结束

(5)有效性 每一条运算应足够基本

算法的性能标准:

(1)正确性最重要的标准)

(2)可使用性(用户友好性)

(3)可读性

(4)效率

(5)健壮性(容错性或例外处理)

算法的后期测试:就是在算法中的某些部位插装时间函数time ( ),来测定算法完成某一功能所花费时间.

算法的事前估计:

(1)空间复杂度(Space Complexity):当问题的规模以某种单位从1增加到n,解决这个问题的算法在执行时所占用的存储空间也以某种单位由1增加到f(n),则称此算法的空间复杂度为f(n).空间单位一般规定为一个工作单元所占用的存储空间大小.

①存储空间的固定部分:空间大小与输入输出的个数多少、数值大小无关.程序指令代码的空间,常数、简单变量、定长成分(如数组元素、结构成分、对象的数据成员等)变量所占空间

②存储空间的可变部分:尺寸与问题规模有关的成分变量所占空间、引用变量所占空间以及递归栈所用空间、通过newdelete命令动态使用的空间.

(2)时间复杂度(Time Complexity): 当问题的规模以某种单位从1增加到n,解决这个问题的算法在执行时所耗费的时间也以某种单位由1增加到g(n),则称此算法的时间复杂度为g(n).时间单位一般规定为一个程序步(Progrem Step).程序步是指在语法上或语义上有意义的一段指令序列,而且这段指令序列的执行时间与实例特性无关. 有时, 算法的时间复杂度不仅依赖于问题规模n,还与输入实例的初始排列有关。

语句执行一次所需时间取决于机器的指令性能和速度和编译所产生的代码质量,很难确定。

算法的渐进时间复杂度:时间复杂度 T(n) 是问题规模 n 的函数。当 n 趋于无穷大时,称时间复杂度的数量级为算法的渐进时间复杂度.

加法规则:针对并列程序段

T1(n) = O( f (n) )

T2(m) = O( g (m) )

T(n, m) = T1 (n) + T2 (m) = O(max (f (n), g (m)))

乘法规则:针对嵌套程序段

T1(n) = O( f (n) )

T2(m) = O( g (m) )

T(n, m) = T1(n) * T2(m) = O(f (n)*g (m))[br][br]-----------------------------------------[br]奖励用户:原因:奖励 用户操作:金钱30,经验1,魅力2 操作者:bluewhite

TOP

顶一把!努力![em01]
多多交流.多多关照.

TOP

另;你打这一些很辛苦

但是如果你能坚持下去,每天都能打一些,会对你有促进的

多多交流.多多关照.

TOP

UP

[em01]
多多交流.多多关照.

TOP

 28 123
发新话题