- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构复习讲解
数据结构;基本概念; (1)线性结构
节点之间关系:一对一。
特点:开始节点和终端节点都是唯一的,除了开始节点和终端节点以外,其余节点都有且仅有一个前驱节点,有且仅有一个后继节点。线性表就是典型的线性结构。; (2)树形结构
节点之间关系:一对多。
特点:开始节点唯一,终端节点不唯一。除终端节点以外,每个节点有一个或多个后续节点;除开始节点外,每个节点有且仅有一个前驱节点。; (3)图形结构
节点之间关系:多对多。
特点:没有开始节点和终端节点,所有节点都可能有多个前驱节点和多个后继节点。; (2)抽象数据类型
抽象数据类型(Abstract Data Type简写为ADT)指的是用户进行软件系统设计时从问题的数学模型中抽象出来的逻辑数据结构和逻辑数据结构上的运算,而不考虑计算机的具体存储结构和运算的具体实现算法。
抽象数据类型=逻辑结构+抽象运算
抽象数据类型实质上就是描述一个求解问题本身(与计算机无关),计算机人员就是在理解问题基础上实现用计算机求解问题的过程。; 数据的运算是通过算法来描述的,即算法是对特定问题求解步骤的一种描述,如果将问题看作函数,那么算法就能把输入转化为输出。解决一个问题可以有多种算法,但一个给定算法只能解决一个特定问题。;1.3 算法分析 ;;● 算法的时间复杂度; 在一个算法中,进行基本运算的次数越少,其运行时间也就相对地越少;基本运算次数越多,其运行时间也就相对地越多。
所以,通常把算法中包含基本运算次数的多少称为算法的时间复杂度,也就是说,一个算法的时间复杂度是指该算法的基本运算次数。
算法中基本运算次数T(n)是问题规模n的某个函数f(n),记作:
T(n)=O(f(n));例1.6 分析以下算法的时间复杂度。
void func(int n)
{ int i=0,s=0;
while (sn)
{ i++;
s=s+i;
}
}; 解:对于while循环语句,设执行的次数为m,i从0开始递增1,直到m为止,有:
s=0+1+2+…+(m-1)=m(m-1)/2,
并满足s=m(m-1)/2n,则有m< 。
T(n)=O( )
所以,该算法的时间复杂度为O( )。
;第2章 线性表 ;2.1.1 线性表的定义
线性表是具有相同特性的数据元素的一个有限序列。
该序列中所含元素的个数叫做线性表的长度,用n表示,n≥0。
当n=0时,表示线性表是一个空表,即表中不包含任何元素。设序列中第i(i表示逻辑位序)个元素为ai(1≤i≤n)。
线性表的一般表示为:
(a1,a2,…ai,ai+1,…,an); 其中a1为第一个元素,又称做表头元素,a2为第二个元素,an为最后一个元素,又称做表尾元素。
例如,在线性表
(1,4,3,2,8,10)
中,1为表头元素,10为表尾元素。;2.2 线性表的顺序存储;2.2.1 线性表的顺序存储—顺序表
线性表的顺序存储结构:把线性表中的所有元素按照其逻辑顺序依次存储到从计算机存储器中指定存储位置开始的一块连续的存储空间中。
这样,线性表中第一个元素的存储位置就是指定的存储位置,第i+1个元素(1≤i≤n-1)的存储位置紧接在第i个元素的存储位置的后面。 ; #define MaxSize 100
typedef struct
{ ElemType data[MaxSize];
int length;
} SqList; //顺序表类型
其中data成员存放元素,length成员存放线性表的实际长度。
说明:由于C/C++中数组的下标从0开始,线性表的第i个元素ai存放顺序表的第i-1位置上。为了清楚,将ai在逻辑序列中的位置称为逻辑位序,在顺序表中的位置称为物理位序。;2.2.2 顺序表基本运算的实现;1. 建立顺序表
其方法是将给定的含有n个元素的数组的每个元素依次放入到顺序表中,并将n赋给顺序表的长度成员。算法如下:
void CreateList(SqList *L,ElemType a[],int n)
//建立顺序表
{ int i;
L=(SqList *)malloc(sizeof(SqList));
for (i=0;in;i++)
L-data[i]=a[i];
L-length=n;
};2. 顺序表基本运算算法
(1
文档评论(0)