《数据结构》基本概念
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基本概念
➢数据
数据是信息的载体,在计算机科学中是指所有能输入到计算机中并能被计算机程序识别和处理的符号集合。
➢数据元素
数据元素也称为结点,是表示数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。➢数据项
数据项是构成数据元素的不可分割的最小单位。
➢数据对象
数据对象是具有相同性质的数据元素的集合,是数据的子集。
注意:在不产生混淆的情况下,将数据对象简称为数据。
➢数据结构
数据结构是指相互之间存在一定关系的数据元素的集合,即数据结构是一个二元组DataStructure = (D,R),其中D是数据元素的集合,R是D上关系的集合。按照视点的不同,数据结构分为逻辑结构和存储结构。
➢数据的逻辑结构
数据的逻辑结构是指数据元素之间逻辑关系的整体。根据数据元素之间逻辑关系的不同,数据结构分为四类:
⑴集合:数据元素之间就是“属于同一个集合”,除此之外,没有任何关系;
⑵线性结构:数据元素之间存在着一对一的线性关系;
⑶树结构:数据元素之间存在着一对多的层次关系;
⑷图结构:数据元素之间存在着多对多的任意关系。
注意:数据结构分为两类:线性结构和非线性结构。
➢数据的存储结构
数据的存储结构又称为物理结构,是数据及其逻辑结构在计算机中的表示。通常有两种存储结构:顺序存储结构和链接存储结构。
顺序存储结构的基本思想是:用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系是由元素的存储位置来表示的。
链接存储结构的基本思想是:用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系是用指针来表示的。
注意:存储结构除了存储数据元素之外,必须存储数据元素之间的逻辑关系。
➢抽象数据类型
抽象数据类型是一个数据结构以及定义在该结构上的一组操作的总称。抽象数据类型提供了使用和实现两个不同的视图,实现了封装和信息隐藏。
➢算法的定义
通俗地讲,算法是解决问题的方法,严格地说,算法是对特定问题求解步骤的一种描述,是指令的有限序列。
➢算法的特性
⑴输入:一个算法有零个或多个输入(即算法可以没有输入),这些输入通常取自于某个特定的对象集合。
⑵输出:一个算法有一个或多个输出(即算法必须要有输出),通常输出与输入之间有着某种特定的关系。
⑶有穷性:一个算法必须总是(对任何合法的输入)在执行有穷步之后结束,且每一步都在有穷时间内
完成。
⑷确定性:算法中的每一条指令必须有确切的含义,不存在二义性。并且,在任何条件下,对于相同的输入只能得到相同的输出。
⑸可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现。
➢线性表的定义
线性表简称表,是零个或多个具有相同类型的数据元素的有限序列。数据元素的个数称为线性表的长度,长度等于零时称为空表。
➢线性表的逻辑关系
在一个非空表L=(a1,a2,……,an)中,任意一对相邻的数据元素ai-1和a i之间(1<i≤n)存在序偶关系(a i-1,ai),且a i-1称为ai的前驱,a i称为a i-1的后继。在这个序列中,a1无前驱,an无后继,其它每个元素有且仅有一个前驱和一个后继。
➢顺序表的存储结构定义
用MaxSize表示数组的长度,顺序表的存储结构定义如下:
#define MaxSize 100
typedefstruct
{
ElemType data[MaxSize]; // ElemType表示不确定的数据类型
int length; //length表示线性表的长度
} SeqList;
➢顺序表是随机存取结构
设顺序表的每个元素占用c个存储单元,则第i个元素的存储地址为:
LOC(a i)=LOC(a1)+(i-1)×c
➢顺序表的优缺点
顺序表利用了数组元素在物理位置上的邻接关系来表示线性表中数据元素之间的逻辑关系,这使得顺序表具有下列优点:
⑴无需为表示表中元素之间的逻辑关系而增加额外的存储空间;
⑵可以快速地存取表中任一位置的元素(即随机存取)。
同时,顺序表也具有下列缺点:
⑴插入和删除操作需移动大量元素。在顺序表上做插入和删除操作,等概率情况下,平均要移动表中一半的元素。
⑵表的容量难以确定。由于数组的长度必须事先确定,因此,当线性表的长度变化较大时,难以确定合适的存储规模。
⑶造成存储空间的“碎片”。数组要求占用连续的存储空间,即使存储单元数超过所需的数目,如果不连续也不能使用,造成存储空间的“碎片”现象。
➢单链表的存储结构定义
单链表的存储结构定义如下:
Struct Node
{ ElemTypedata; // ElemType表示不确定的数据类型
structNode *next;
}*first; //first为单链表的头指针
➢双链表的存储结构定义
双链表存储结构定义如下:
struct DulNode
{
El emType d at a; // ElemType 表示不确定的数据类型
st ruct DulNode *pr io r, *next; // pr ior 为前驱指针域,next 为后继指针域
} *f irst; //fir st表示双链表的头指针
➢ 栈的定义
栈是限定仅在表尾进行插入和删除操作的线性表。允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。
➢ 栈的操作特性
栈的操作具有后进先出的特性。
➢ 队列的定义
队列是只允许在一端进行插入操作,而另一端进行删除操作的线性表。允许插入的一端称为队尾,允许删除的一端称为队头。
➢ 队列的操作特性
队列的操作具有先进先出的特性。
➢ 循环队列中解决队空队满的判断条件
方法一:附设一个存储队列中元素个数的变量num,当num=0时队空,当nu m=QueueSize 时为队满; 方法二:修改队满条件,浪费一个元素空间,队满时数组中只有一个空闲单元;即队空的条件是front =rear,队满的条件是(re ar+1) % Q ue ue Siz e=f ront,队列长度为(r ear -front +Qu eueSize ) % QueueSiz e。
方法三:设置标志fl ag,当fro nt=rear 且fla g=0时为队空,当front=rear 且flag=1时为队满。
➢ 串的定义
串是零个或多个字符组成的有限序列。
➢ 空格串和空串的定义
只包含空格的串称为空格串。串中所包含的字符个数称为串的长度,长度为0的串称空串,记作 " "。
➢ 串的比较
串的比较是通过组成串的字符之间的比较来进行的。
给定两个串:
X ="x 1x 2…xn"
Y ="y 1y2…y m"
则当n=m且x1=y1,…,xn =y m 时,称X=Y ;
当下列条件之一成立时,称X <Y :
⑴ n <m,且x i =y i(i=1,2,…,n);
⑵ 存在某个k≤min (m ,n ),使得x i =y i(i =1,2,…,k -1),xk ➢ 改进的模式匹配算法中ne xt[j ]的求法 用nex t[j]表示t j 对应的k值(1≤j ≤m ),其定义如下: ➢ 数组的基本操作 数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。因此,在数 0 j=1 max {k | 1≤k <j 且"t 1t 2 … t k -1 " ="t j -k +1t j -k +2 … t j -1"} 1 其它情况 next[j]=