一、数据是数据对象的集合,数据对象是数据元素(相同性质的)的集合,数据元素是数据项的集合。
数据结构是带结构的数据元素的集合,DS = (D,R),D是数据元素的集合,R是D上关系的集合。
数据元素及其相互关系称为数据结构。
二、数据结构总览:
数据的逻辑结构与存储结构密切相关,算法设计取决于选定的逻辑结构,算法的实现取决于采用的存储结构。数据结构通过算法实现操作,算法根据数据结构设计程序。逻辑结构是面向问题的,而存储结构是面向计算机的。用数据元素 、数据关系和基本操作,定义一个完整的抽象数据类型。
1、逻辑结构:是指数据对象中数据元素之间的相互关系。
逻辑结构分为以下四种:
①、集合结构:集合结构中的数据元素除了属于同一个集合外,它们之间没有其他关系。各个数据元素是“平等”的,它们的共同属性是“同属于同一个集合”。
②、线性结构:线性结构中的数据元素是一对一的关系。
③、树形结构:树形结构中的数据元素存在着一种一对多的层次关系。
④、图形结构:图形结构的数据元素是多对多的关系。
在图形结构中,我们在表示数据的逻辑结构时,要注意以下两点:
a、将每一个数据元素看做一个结点,用圆圈表示。
b、元素之间的逻辑关系用结点之间的连线表示,如果这个关系是有方向的,用带箭头的连线表示。
2、存储结构(也叫物理结构):是指数据的逻辑结构在计算机中的存储形式。
存储结构,就是如何把数据元素及其逻辑关系存储到计算机中的存储器中。存储器主要是针对内存而言的,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。
数据的存储结构应正确反映数据元素之间的逻辑关系,数据元素的存储结构形式有两种:顺序存储和链式存储。
(1)、顺序存储结构:是把数据元素放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
(2)、链式存储结构:把数据元素放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。链式存储结构中,数据元素的存储关系并不能反映其逻辑关系,因此需要一个指针存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置。
3、算法,是解决特定问题求解步骤的表述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
算法的五个基本特性:输入,输出,有穷性,确定性,可行性
算法的设计要求,设计良好的算法应满足:正确性:算法所做的事情是严格满足问题要求的;可读性:易于理解(相对)、调试及扩展(从工程角度);健壮性:当输入不合理、恶意,或到达边界条件,算法均能正确处理,而不能得到非预期结果或崩溃;高效率:所需计算量和存储空间尽可能小(有时优先级高于可读性)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /* 2 换硬币,100元换成1、2、5分硬币50枚 3 */ 4 #include <stdio.h> 5 int main () 6 { 7 /* 8 由 9 i+j+k=50 10 i+2j+5k=100 11 得到 12 j+4k=50,k小于13 13 */ 14 int i, j, k; 15 for(k=0; k<13; k++) 16 { 17 j = 50-4*k; 18 i = 50-j-k; 19 printf("%5d%5d%5d\n",i,j,k); 20 } 21 return 0; 22 }
算法与程序:算法可以用任何语言表述,而程序必须用计算机能够理解的语言;程序是算法的实现,可用不同编程语言实现同一算法;算法不能被计算机运行,而程序可以;算法必须满足有穷性,而程序可以无限运行下去,比如操作系统
算法复杂度:解决问题方法的效率, 跟数据的组织方式(逻辑结构、物理存储结构)有关;解决问题方法的效率, 跟空间的利用效率有关;解决问题方法的效率, 跟算法的巧妙程度有关。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /* 2 clock():捕捉从程序开始运行到clock()被调用时所耗费的时间。 3 这个 时间单位是clock tick,即“时钟打点”。 4 常数CLK_TCK(或CLOCKS_PER_SEC):机器时钟每秒所走的时钟打点数。 5 */ 6 #include <stdio.h> 7 #include <time.h> 8 clock_t start, stop; 9 /* clock_t是clock()函数返回的变量类型*/ 10 double duration; 11 /* 记录被测函数运行时间,以秒为单位*/ 12 int main () 13 { /* 不在测试范围内的准备工作写在clock()调用之前*/ 14 start = clock(); /* 开始计时 */ 15 //MyFunction(); /* 把测试函数加在这里 */ 16 stop = clock(); /* 停止计时 */ 17 duration = ((double)(stop-start))/CLK_TCK; 18 /* 计算运行时间 */ 19 /* 其他不在测试范围的处理写在后面,例如输出duration的值*/ 20 return 0; 21 }
三、抽象数据类型(Abstract Data Type 简称ADT)
数据类型,是一个值的集合和定义其上的一组操作。
抽象数据类型,是指一个数学模型和定义其上的一组操作,通过固有的数据类型表示和实现,用已存在的数据类型说明新的结构,用已实现的操作来组合新的操作。ADT{ 数据对象, 数据关系, 基本操作(初始条件,操作结果) }
抽象数据类型的三要素:类型名称,数据对象集,操作集。
抽象数据类型的两个重要特征:数据抽象,数据封装