数据结构基础1——概念

## 1、数据结构研究内容   这是一门研究==非数值计算程序设计中的操作对象==,及这些对象之间的==关系==和==操作==的学科。   ==程序设计的实质==:为所处理的问题选择一种好的数据结构,并在此结构的基础上施加一种好的算法。 ## 2、基本概念 ### (1)数据   一切能输入计算机并被计算机程序处理的符号的总称。 ### (2)数据元素   组成数据的基本单位,在计算机中通常被当作一个整体进行考虑和处理。 ### (3)数据项   组成数据的,局有独立含义的,不可分割的最小单位。 ### (4)数据对象   性质相同的数据元素的集合。   是数据的子集。 ## 3、数据结构   互相之间存在一种或多种特性关系的数据元素的集合。   结构指的是数据元素之间的关系 ### (1)逻辑结构   从逻辑关系上描述数据,与数据的存储无关,独立于计算机   两要素:数据元素,关系 ####   集合结构:     数据元素之间除了“同属于一个集合”之外,再无其他关系。 ####   线性结构:     数据元素之间存在一对一的关系。例如,数组、字符串、线性表、栈、队列等 ####   树形结构:     数据元素之间存在一对多的关系。例如,二叉树(两个分支),树(多个分支) ####   图形结构或网状结构     数据元素之间存在多对多的关系。例如,有向图、无向图 ### (2)存储结构   数据对象在计算机中的存储表示,也被称为物理结构。   将数据存入计算机时,通常要求既要存储数据元素,又要存储数据元素之间的关系。 ####   顺序存储:     将数据元素存入一片连续的存储空间中,借助数据元素在存储器中的相对位置表示数据元素之间的逻辑关系,通常借助程序设计语言中的数组描述 ####   链式存储     链式存储无需占用连续的存储空间,为了表示元素之间的关系,需要给每个元素附加一个节点,保存下一个元素的地址,通常借助指针来描述 ## 4、数据类型   是高级程序设计语言中的一个基本概念,是一个值集以及定义在这个值集上的一组操作的总称   体现了程序设计语言的数据描述和处理能力 ## 5、抽象数据类型(abstract data type,缩写为:ADT)   是由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称   包括:数据对象,数据关系,对数据对象的基本操作   定义格式如下: ```C ADT 抽象数据类型名{ 数据对象:(数据对象的定义) 数据关系:(数据关系的定义) 基本操作名1(参数列表) 初始条件:条件描述 操作结果:结果描述 基本操作名2(参数列表) 初始条件:条件描述 操作结果:结果描述 ... }ADT 抽象数据类型名 ```   基本操作有两种参数     赋值参数:只为操作提供输入     引用参数:以&符号打头,除了提供输入外,还将返回操作结果   初始条件:描述了操作之前数据结构和参数列表应满足的条件,若为空,则省略。   操作结果:描述了操作正常结束之后,数据结构的变化状况和应返回的结果 ```C //复数的抽象数据的定义 ADT Complex{ 数据对象:D = {e1, e2 | e1, e2∈R,R是实数集}; 数据关系:S = {<e1, e2> | e1是复数的实部, e2是复数的虚部} 基本操作: Create(&C, x, y) 操作结果:构造复数C,实部与虚部的值分别为x和y GetReal(C) 初始条件:复数C已存在 操作结果:返回复数C实部的值 GetImag(C) 初始条件:复数C已存在 操作结果:返回复数C虚部的值 Add(C1, C2) 初始条件:C1,C2是复数 操作结果:返回C1、C2的和 Sub(C1, C2) 初始条件:C1,C2是复数 操作结果:返回C1、C2的差 Delete(C) 初始条件:复数C已存在 操作结果:删除复数C }ADT Complex //复数的抽象数据类型的实现 typedef struct { float real; float imag; }Complex; void Creat(Complex ** C, float x, float y) { *C = malloc(sizeof(Complex)); *C->real = x; *C->imag = y; } float GetReal(Complex C) { return C.real; } float GetImag(Complex C) { return C.imag; } Complex Add(Complex C1, Complex C2) { Complex sum; sum.real = C1.real + C2.real; sum.imag = C1.imag + C2.imag; return sum; } Complex Sub(Complex C1, Complex C2) { Complex dif; dif.real = C1.real - C2.real; dif.imag = C1.imag - C2.imag; return dif; } viod Delete(Complex * C) { free(C); } ```
上一篇:【PID优化】基于matlab粒子群算法PID控制器优化设计【含Matlab源码 1122期】


下一篇:C1任务02—HelloWorld—ambitiousF