《数据结构》知识点
- 格式:docx
- 大小:31.82 KB
- 文档页数:9
第1章 绪论
1.1 数据是表示客观事物的符号,是对客观事物的抽象,是信息的载体。对计算机科学而言,经抽象(数字化)后,能被计算机识别、存储和加工处理的客观事物均称作数据。
1.2 具有某种共同属性的数据集合称作数据对象。数据集中的元素称作数据元素,简称元素,又称结点、顶点、记录等。
数据对象={数据元素,数据元素,…,数据元素}
1.3 就数据的自身结构而言,分为原子型和结构型,前者是不可分解或无须分解的数据,后者可分解为若干个数据项。
1.4 通常,数据项是无须分解或不可分解的所谓最小数据单位,数据元素是作为整体对待的基本数据单位。
1.5 数据集和其上定义的一组操作合称数据类型,即,
数据类型=数据集+一组操作=(数据集,一组操作)
[了解]狭义地说,数据类型侧重于数据的值,不区分值相同的数据,忽略数据的自身结构。
例. 复数类=(复数集,运算集),复数集以复数为基本元素,复数由两个数据项组成:实部和虚部或模和幅角。
1.6 数据集和其元素间的一组关系合称数据结构,即,
数据结构=数据对象+数据关系=(数据对象,数据关系)
1.7 数据结构的抽象描述称作逻辑结构。逻辑结构分为:①集合结构;②线性结构;③树形结构(简称树结构);④图形结构(简称图结构)。
1.8
树结构和图结构统称非线性结构。
1.9 数据结构在计算机上的具体实现称作存储结构或物理结构。存储结构分为:①顺序存储;②链式存储;③索引存储;④散列存储。
1.10 数据结构和其上定义的一组操作的抽象描述合称抽象数据类型,即,
抽象数据类型=数据结构+基本操作=数据对象+数据关系+基本操作
1.11
求解问题的步骤称作算法,是合法指令的有限序列,具有以下主要特性:①有穷性;②确定性;③可行性。
1.12 算法所用的总时间称作时间复杂度,通常用算法中执行次数最多(频度最高)的操作的执行次数(频度)或数量级表示。
时间复杂度又称时间效率,但两者的高低是相反的。
1.13 算法所用最大存储量称作空间复杂度。
空间复杂度又称空间效率,但两者的高低是相反的。
1.14 从数量级上说,算法的时间复杂度和空间复杂度与规模n的某个函数同级。常见数量级由低到高排列如下:
1、logan、nk、an、n!、nn (k>0,a>1)
对同一个具体问题,数据本身所用存储量与算法无关,通常,空间复杂度只考虑附加存储空间复杂度。
1.15 算法的性能分析主要包括时间复杂度和空间复杂度。
1.16 数据元素间的关系分为有序关系和无序关系。有序关系简称弧(或有向弧、有向边),无序关系简称边(或无向弧、无向边),分别表为:
、(元素,元素) 或 前驱 → 后继 、 元素 — 元素
1.17 k阶斐波那契序列的定义及其化简式。
f0=f1=…=fk-2=0,fk-1=1,n≥k时,fn=fn-1+fn-2+…+fn-k
1.18 一元多项式的高效计算式。
Pn(x)=p0+p1x+p2x2+…+pnxn=p0+x(p1+x(…Pn-1+xpn…))
递推算法为:for(P=p[n],i=n-1;i>=0;i--)(P*=x)+=p[i];
第2章 线性表
2.1 同类型元素的有限序列称作线性表。简记为(a1,a2,…,an) 或 a1,a2,…,an 或
({ai|i=1,2,…,n},{|i=1,2,…,n-1})
2.2 线性表中元素的个数称作表长,表长为0的线性表称作空表。
2.3 在线性表中,第一个元素称作首元,它没有前驱,其它元素均有唯一前驱;最后一个元素称作尾元,它没有后继,其它元素均有唯一后继。线性表的这种关系称作一对一关系,记作1:1。
例. 既有首元又有尾元的线性表的表长≥1,某元素既有前驱又有后继的线性表的表长≥3。
2.5 用连续的一片存储空间依次顺序存放线性表的元素,称作线性表的顺序存储,简称顺序表。 顺序表中逻辑相邻者的存储位置也相邻。
顺序表有三个要素:①基址;②表长(或尾元下标);③预留表长(或最大下标)。
如果顺序表的预留表长是常量,可用普通数组存储(称作静态顺序表,只有两个要素),否则,用动态数组存储(称作动态顺序表)。
对于顺序表,附加存储空间复杂度为O(1),插入、删除、查找操作的时间复杂度为O(n),其它基本操作的时间复杂度均为O(1)。
2.6 附加“链”将逻辑相邻数据元素的存储位置链接起来的存储结构称作链式存储。
链式存储的线性表称作线性链表,简称链表。
附加一个链的线性链表称作单链表。习惯上,链域指向其后继。
单链表中第一个结点的地址称作头指针。
作为线性链表首元的形式前驱的附加结点称作头结点。
对于单链表,附加存储空间复杂度为O(n),初始化操作的时间复杂度为O(1),其它基本操作的时间复杂度均为O(n)。
2.7 静态顺序表的具体实现
⑴存储结构
typedef struct{//用静态数组存储的顺序表
int last;//尾元下标(表长-1)
DataType data[MAX];//MAX为最大表长(常量)
}SeqList;
⑵初始化操作的核心步骤
SeqList *p=new SeqList;
p->last=-1; ⑶插入操作的核心步骤
for(j=L->last++;j>=i-1;j--)//后移
L->data[j+1]=L->data[j];
L->data[i-1]=x;//插入x
注意后移次序:从后向前逐个后移。
⑷删除操作的核心步骤
for(j=i;j<=L->last;j++)//前移
L->data[j-1]=L->data[j];
L->last--;//修改表长
注意前移次序:从前向后逐个前移。
2.8 单链表的具体实现
⑴结点的存储结构
typedef struct node{//结点结构
DataType data;//数据域
struct node *next;//指针域
}Lnode,*LinkList;//结点及结点的地址
⑵附加头结点初始化操作的核心步骤
Lnode *L=new Lnode;
L->next=0;
⑶求表长操作的核心步骤
for(int j=0;L;L=L->next)j++;
return j;
附加头结点时,j的初值改为-1或返回值改为j-1或
int j=0; while(L=L->next)j++;
⑷在结点p之后插入元素x的核心步骤
s=new Lnode;
s->data=x;
s->next=p->next; p->next=s;
⑸删除结点p后继的核心步骤
s=p->next;
p->next=s->next; delete s;
⑹返回第i个元素地址的核心步骤
for(int j=1;jnext)j++;
return i<1||!L?0:L;
附加头结点时,j的初值改为0或
int j=1; while(jnext)j++; ⑺返回数据元素x地址的核心步骤
while(L&&L->data!=x)L=L->next;
return L;
附加头结点时,改为:
while(L=L->next&&L->data!=x);
⑻返回数据元素x序号的核心步骤
int j=1;
while(L&&L->data!=x)L=L->next,j++;
return L?j:0;
附加头结点时,改为:
while(L=L->next&&L->data!=x)j++;
⑼清空操作的核心步骤
Lnode *p;
while(p=L){L=L->next; delete p;}
另外,调用后需补上语句:
L=0;
附加头结点时,改为:
while(p=L->next){L=p->next; delete p;}
⑽某些操作的递归算法
①求表长
return L?1+Len(L->next):0;
②清空
if(L)Clear(L->next);
delete L;
第3章 栈和队列
3.1 只许一端插入和删除的线性表称作栈,此端称作栈顶,另一端称作栈底。
3.2 栈具有先进后出的特点(FILO),即,后进先出的特点(LIFO)。
3.3 由入栈序列“…前…中…后…”不可能得到出栈序列“…后…前…中…”。
3.4 只许一端插入、另端删除的线性表称作队列,允许删除的一端称作队首,另端称作队尾。
3.5
队列具有先进先出的特点(FIFO),即,后进后出的特点(LILO)。出队序列和入队序列相同。
3.6 顺序存储的栈简称顺序栈。通常,顺序栈以表尾作为栈顶。
⑴存储结构
typedef struct{//静态顺序栈
int top;//栈顶下标(或栈长)
DataType data[MAX];
}SeqStack;
⑵初始化的核心步骤
Stack *s=new SeqStack;
s->top=-1;
⑶栈空的条件:s->top==-1; ⑷栈满的条件:s->top+1==MAX
⑸入栈的核心步骤
s->data[++s->top]=x;
⑹出栈的核心步骤
return &s->data[s->top--];
或 return s->data[s->top--];
或 x=&s->data[s->top--];
或 x=s->data[s->top--];
3.7 链式存储的栈简称链栈。通常,链栈以表头作为栈顶。
⑴结点存储结构
typedef struct node{
DataType data;
struct node *next;
}StackNode,*LinkStack;
⑵栈空的条件:!L 或 L==0
⑶入栈的核心步骤
LinkStack p=new StackNode(x); p->next=s; s=p;
⑷出栈的核心步骤
Stack p=s; s=p->next;
*x=p->data; delete p;
⑸清空操作
Stack p;
while(s){p=s; s=s->next; delete p;}
3.8 由“入栈序列”、“出栈序列”、“栈操作序列”中的任意两项可确定另一项。
例. 习题3-2。
3.9 对于双目运算,运算符在两个操作数之前的表达式称作波兰式或前缀表达式。同理,可定义逆波兰式(或后缀表达式)。