数据结构基本知识点

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章
1、什么是数据结构
①数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。

②数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

③4类基本结构:⑴集合;⑵线性(一个前驱,一个后继)结构;⑶树形结构;
⑷图状结构或网状结构。

2、数据结构的二元组表示:Data_Structure=(D,S)//D是数据元素的有限集,S是D上关系的有限集。

3、算法的5大特性:⑴有穷性;
4、衡量算法的标准:时间复杂度和空间复杂度
5、数据的逻辑结构分四类
6、数据结构写出逻辑结构,反之。

第二章
0、线性表的基本概念。

1、线性表的顺序存储的基本操作:Insert, E Is=n/2 Delete. E dl=(n-1)/2
2、线性表的顺序存储的特点:连续地址,随机查找。

3、线性表的链式存储的特点:地址不保证连续,顺序查找。

(1)重点1:结构类型P28
Typedef struct LNode{
ElemType data;
Struct LNode *next;
}LNode,*LinkList;
(2)重点2:基本方法
Status GetElem_L(LinkList L,int i,ElemType &e); Status ListInsert_L(LinkList &L,int i,ElemType e); Status ListDelete_L(LinkList &L,int i,ElemType &e); void CreateList_L(LinkList &L,int n);
void Print(LinkList L)
{ LinkList p=L->next;(有头结点)
if(!p) printf(“this link is empty!\n”);
else{ printf(“%d,”,p->data);
while(p->next)
{p=p->next; printf(“%d,”,p->data); } printf(“\n”);
}
}
void CountNodes(LinkList L,int &nd)
{ nd=0;//
LinkList p=L->next;(有头结点)
if(!p) printf(“this link is empty!\n”);
else{ nd++;//
while(p->next)
{p=p->next; nd++;}//
}
}
voidCountAve(LinkList L,int &av)
{ int n=0,s=0//
av=0;
LinkList p=L->next;(有头结点)
if(!p) printf(“this link is empty!\n”);
else{ s=s+p->data; n++;//
while(p->next)
{p=p->next;s=s+p->data; n++;}// av=s/n;
}
return av;//
}
void PrintMax(LinkList L,)
{ int max;
LinkList p=L->next;(有头结点)
if(!p) printf(“this link is empty!\n”);
else{ max=p->data;
while(p->next)
{p=p->next; if(p->data>max) max=p->data;}//
printf(“max=%d\n”,max);
}
}
void DeletaMaxNode(LinkList L,)
{ int max;
LinkList q,t;//q---记录p的前驱结点指针,t-----保存最大结点的前驱指针。

LinkList p=L->next;(有头结点)
q=L;//
if(!p) printf(“this link is empty!\n”);
else{ max=p->data;t=q;//
while(p->next)
{q=p; p=p->next; //
if(p->data>max) {max=p->data; t=q;}//
}
q=t->next; t->next=q->next; free(q);
}
}
(3)循环链表的特点:首尾特点
(4)链表为空的条件:分有头链表与无头链表。

(5)分清头结点,开始结点、尾结点。

第三章栈和队列
1、栈和队列是端点受限操作的线性表。

2、栈的定义及特点:FILO
3、Push(&s,e) Pop(&s,&e)基本操作过程。

4、判定通过栈操作的序列正确否或可能性。

5、栈空或栈满的条件。

6、队列特性:FIFO
7、循环队列:为空的条件,为满的条件。

8、EnQueue(&Q,e)的操作
9、DeQueue(&Q,&e)的操作
第四章串
1、串的定义与表示
2、空串与空白串的区别
3、串的基本操作
4、什么是模式匹配
5、int Index(string S,string T,int pos);作用P79
6、统计子串的个数
第五章数组与广义表
1、数组的定义
2、数组元素存储方式:按行存储或按列存储(不同语言)
3、数组元素地址的计算(重点会计算)
数组A[a....m][b.....n], 行数M=m-a+1, 列数N=n-b+1; 每个元素L个字节。

按行:loc(A ij)=loc(A ab)+((i-a)*N+(j-b))*L;
按列:loc(A ij)=loc(A ab)+((j-b)*M+(i-a))*L;
4、广义表的定义。

5、广义表的表示与存储
6、广义表的长度与深度
7、GetHead(T),GetTail(T)的作用。

第六章树与二叉树
1、树的定义与基本术语
2、二叉树的定义与特点
3、二叉树的5种基本形态
4、二叉树的性质(1)(2)(3)(4)(5)
5、满二叉树与完全二叉树的异同
6、完全二叉树的相关计算
n个结点的完全二叉树,h=|log2n|+1, n0=|(n+1)/2|;n2=n0-1; n1=(n+1)%2
7、二叉树的存储结构:顺序结构(完全二叉树的顺序)与链式结构。

8、二叉树的三种遍历方式
9、计算结点数,叶子数
10、线索二叉树中增加2个标志域LTag,RTag的作用
11、会画线索树
12、树与二叉树的相互转换
13、森林与二叉树的相互转换
14、树的先根遍历相当于二叉树的先根遍历,后根遍历相当于二叉树中根。

15、Huffman树的定义
16、Huffman树的建立、编码形成法则、WPL的计算。

第七章图
1、图的定义与术语P159
2、图的表示与存储
3、完全图的定义
4、邻接矩阵与邻接链表的形成(重点)
5、会写图的遍历结果:DFS(栈,碰头回) BFS(队列,齐步走)
(利用邻接矩阵或邻接表,进行遍历操作)
6、连通分量与连通图
7、最小生成树的确定(Prim,Kruskal,重点)
8、会写拓扑排序的序列(队列)
9、关键路径的确立
10、最短路径。

11、单源到其它各点的最短路径。

第八章查找
1、顺序表查找中,哨兵的谁,有什么效果ASL=(n+1)/2
2、有序表查找中,最多查找比较的次数=|log2n|+1
3、索引表查找结合有序分块顺序进行查找。

ASL=log2(n/s+1)+s/2
4、二叉排序树的定义(递归)
5、创建二叉排序树、如何删除结点。

6、平衡二叉树的定义、平衡因子,如何确立插入后不平衡,如何调整。

RR/LL/LR/RL
7、哈希函数,哈希表
8、H(key1)=H(key2)=c;称为冲突,key1,key2互为同义词。

9、哈希函数的目标是建立散布均匀的分布。

10、处理冲突的方法:开放地址法,进行线性探测。

第九章内部排序
1、直接插入法。

O(n2),最好有序情况下为O(n)。

(会写分步过程)
2、折半插入法。

O(n2).
3、希尔排序法。

最后一步长度必须为1.。

O(n3/2)。

(会写分步过程)
4、快速排序法。

O(nlog n),最差O(n2)。

会画过程,知道如何判定过程多少。

5、冒泡排序法、选择排序法。

O(n2)
6、归并排序法。

O(nlog n),最差O(n2)
P283
初始关键字[49] [38][65] [97][76] [13][27]
一趟后[38 49] [65 97] [13 76] [27]
二趟后[38 49 65 97] [13 27 76]
三趟后[13 27 38 49 65 76 97]
数据结构重点(60分)~1.算法时间复杂度2.线性表查找用顺序表,删除和插入用链表3.广义表p108 4.树和二叉数(1.遍历二叉树和线索二叉树2.树和二叉树和森林的转换3.哈夫曼树和哈夫曼编码) 5.图的定义和语,图的遍历,最小生成树,邻接表和邻接矩阵,拓扑排序 6.二排序树和平衡二叉树,建散列表(除留取余法)7.第八,十一,十二章不考8.综合题在第六,七,九章。

相关文档
最新文档