点击目录传送ฅʕ•̫͡•ʔฅ
记录
DS知识点与理解
第一章 绪论
1.1 什么是数据结构
1.必须分析待处理对象的特性以及各处理对象之间存在的关系。
2.数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科
1.2 基本概念和术语
3.数据(data)是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并且被计算机程序处理的符号的总称。
4.数据元素(data element)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
有时,一个数据元素可由若干个数据项(data item)组成
数据项是数据的不可分割的最小单位。
5.数据对象(data object)是性质相同的数据元素的集合,是数据的一个子集。
6.数据结构(data structure)是相互之间存在一种或多种特定关系的数据元素的集合。
数据元素之间的关系称为结构
7.四类基本结构:
(1)集合:属于同一个集合(其实就是没关系)。
(2)线性结构:结构中的数据元素之间存在一个对一个的关系(一对一)。
(3)树形结构:存在一个对多个的关系(一对多)。
(4)图状结构或网状结构:存在多个对多个的关系(多对多)。
8.Data Structure = (D , S)
D是数据元素的有限集,S是D上关系的有限集(无限集没法讨论)。
在ADT中:数据对象 D,数据关系 R。
9.结构定义中的“关系”描述的是数据元素之间的逻辑关系,因此又称为数据的逻辑结构。
10.数据结构在计算机中的表示(又称映像)称为数据的物理结构,又称存储结构。它包括数据元素的表示和关系的表示。
11.数据元素之间的关系在计算机中有两种不同的表示方法:顺序映像和非顺序映像,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。
前者借助 数据元素的相对位置,后者借助 地址的指针(pointer),来表示数据元素之间的逻辑关系。
12.任何一个算法的设计取决于选定的数据(逻辑)结构,而算法的实现依赖于采用的存储结构。
数据结构从逻辑上可分为两大类,分别是线性结构和非线性结构。
13.数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
14.抽象数据类型(abstract data type,简称ADT)是指一个数学模型以及定义在该模型上的一组操作。
15.ADT的基本操作中有两种参数:赋值参数只为操作提供输入值;引用参数以&打头,除可提供输入值外,还将返回操作结果。
1.4 算法和算法分析
16.算法(algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。
算法的5个重要特性:1.有穷性 2.确定性 3.可行性 4.输入 5.输出
17.效率指的是算法的执行时间。
事前分析:对算法所消耗资源的一种估算方法。
一个特定算法“运行工作量”的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。
一个算法是由控制结构(顺序、分支和循环3种)和原操作(指固有数据类型的操作)构成的,则算法时间取决于两者的综合效果。
从算法中选取一种对于所研究的问题(或算法类型)来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间量度。
18.渐近时间复杂度(asymptotic time complexity),简称时间复杂度。T 均指最坏情况。语句的频度指的是该语句重复执行的次数。空间复杂度 S。
第二章 线性表
2.1 线性表的类型定义
1.在稍微复杂的线性表中,一个数据元素可以由若干个数据项(item)组成。在这种情况下,常把数据元素称为记录(record),含有大量记录的线性表又称文件(file)。
2.ADT的基本操作:InitList(&L),结构初始化;DestroyList(&L),销毁结构;ClearList(&L),置空;ListEmpty(L),是否为空;
ListLength(L),元素个数;GetElem(L,i,&e),获取元素;LocateElem(L,e,compare()),定位;PriorElem(L,cur_e,&pre_e),直接前驱;
NextElem(L,cur_e,&next_e),直接后继;ListInsert(&L,i,e),插入;ListDelete(&L,i,&e),删除;ListTraverse(L,visit()),遍历,访问,任意操作;
2.2 线性表的顺序表示和实现
3.线性表的顺序存储结构是一种随机存取的存储结构。
顺序表的优点:随机存取表中任一元素。特点:两个元素逻辑相邻,物理也相邻。缺点:需要移动大量元素(克服缺点:链式结构)。
4.一般情况下,在第i(1<=i<=n)个元素之前插入一个元素时,需将第n至第i(共n-i+1)个元素向后移动一个位置。
T(n)=O(移动元素次数)——算法的时间主要消耗在移动元素上。
malloc 为结点分配空间;realloc 在原有空间基础上再分配空间;(个人理解)
2.3 线性表的链式表示和实现
5.线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。逻辑上相邻,物理上不相邻。
6.数据元素ai的存储映像,称为结点(node)。它包括两个域:其中存储数据元素信息的域称为数据域;存储直接后继存储位置的域称为指针域。
指针域中存储的信息称做指针或链。n个结点链结成一个链表,即为线性表的链式存储结构。又由于此链表的每个结点中只包含一个指针域,故又称线性链表或单链表。
7.头指针可以确定一个单链表。单链表是一种动态结构。整个链表的存取必须从头指针开始进行。
假设L是LinkList型的变量,则L为单链表的头指针,它指向表中第一个结点。若L为“空”(L=NULL),则所表示的线性表为“空”表,其长度n为“零”。
8.头结点是在第一个结点之前附设的一个结点。头结点的数据域可以不存储任何信息,也可存储如线性表的长度等类的附加信息,头结点的指针域
存储指向第一个结点的指针(即第一个元素结点的存储位置)。头结点不能计入链表总长度中。
9.执行p=(LinkList)malloc(sizeof(LNode))的作用是由系统生成一个LNode型的结点,同时将该结点的起始位置赋给LinkList型指针变量p。
free(q)的作用是由系统收回一个LNode型的结点,回收后的空间可以备作再次生成结点时用。
10.用数组描述的链表起名叫静态链表。静态链表用于在不设“指针”类型的高级程序设计语言中使用链表结构。
11.循环链表(circular linked list)是另一种形式的链式存储结构。表中最后一个结点的指针域指向头结点,整个链表形成一个环。
从表中任一结点出发均可找到表中其他结点,算法中的循环条件是它们是否等于头指针。
12.双向链表,后继的前驱=前驱的后继=本身。
单链表的长度是一个隐含的值(需遍历后才知道)。
13.一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项;
对于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去。
第三章 栈和队列
3.1 栈
1.栈和队列是两种重要的线性结构。
从数据结构角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表,可称为限定性的数据结构。
从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型。在面向对象的程序设计中,它们是多型数据类型。