数据结构知识点文档格式.doc
- 文档编号:13076172
- 上传时间:2022-10-04
- 格式:DOC
- 页数:27
- 大小:2.34MB
数据结构知识点文档格式.doc
《数据结构知识点文档格式.doc》由会员分享,可在线阅读,更多相关《数据结构知识点文档格式.doc(27页珍藏版)》请在冰豆网上搜索。
3.算法分析:
语句频度(执行次数)计算、时间和空间复杂度分析。
表示方法
◎语句频度:
直接写次数。
◎时间复杂度:
O(执行次数),如:
O(n)。
◎空间复杂度:
O(所需空间)
第二章
1.顺序表(数组)插入、删除、有序表合并算法及其移动次数计算;
12
13
21
24
28
30
42
77
数据元素
序号12345678
表示L.elem[0][1][2][3][4][5][6][7]
◎顺序表插入
算法思想:
如果要在序号5前插入元素e,需要将序号5~8向后移动一个位置。
▲移动次数为4次,公式n-i+1
◎顺序表删除
如果要删除序号5元素,需要将6~8依次向前移动一位
▲移动次数为3次,公式n-i
◎有序表合并
LA=(3,5,8,11)
LB=(2,6,8,9,11,15,20)
则LC=(2,3,5,6,8,8,9,11,11,15,20)
算法思想(以非递减为例):
La和Lb非递减排列,La与Lb中元素逐个比较,较小的先插入Lc中。
▲注:
非递减是指递增排序,但元素有可能相等,与之相对的有非递增排序。
▲移动次数为(La.length+Lb.length)
2.链表(有无头节点、单双、循环)插入(前、后)、删除(前、本身、后)的指针挂接、建立(不带头节点)算法。
◎单链表
▲每个节点有数据域和指针域datanext
头a1a2a3a4a5a6
带头节点L→→→→→→→
P↑
a1a2a3a4a5a6
不带头节点L→→→→→→
P↑
单循环链表
●在P(a3)节点前插入S节点
(1)Q=P;
//先让Q指向a3
(2)P=L;
//P指向第一个节点(带头结点指向头结点,不带头结点指向a1)
(3)while(P->
next!
=Q)P=P->
next;
//找到a3的前驱a2,P指向a2
(4)S->
next=P->
//P->
next为a3,让S->
next等于a3
(5)P->
next=S;
//a2指针域指向节点S
●在P(a3)节点后插入S节点
(1)S-next=P->
(2)P->
●删除P(a3)前一个节点
(1)Q=P;
(2)P=L;
(3)while(P->
next->
//找到a1
(4)P->
//让a1指针域指向a3,从而删除a2
●删除P(a3)节点
//找到a2
//让a2指针域指向a4,从而删除a3
●删除P(a3)后一个节点
(1)P->
//让a3指针域指向a5,从而删除a4
◎双链表
▲每个节点有前驱指针、数据域、后继指针priordatanext
双循环链表
头a1a2a3a4
●在P(a2)节点前插入S节点
▲技巧:
先让S->
prior和S->
next与链表建立关系
注:
步骤(4)必须在步骤(3)后面
(1)S->
next=P;
//先让S->
next指向a2
(2)S->
prior=P->
prior;
//S->
prior指向a1
(3)P->
prior->
//再把a1->
next指向S
(4)P->
prior=S;
//a2->
prior指向S
●在P(a2)节点后插入S节点
注:
(1)S->
prior=P;
(2)S->
//a3->
●删除P(a2)前一个节点a1
(1)Q=P->
//Q指向要被删除的a1;
(2)P->
priro指向头
(3)P->
//头->
next指向P
(4)free(Q);
//释放a1的存储空间
●删除P(a2)节点
prior=p->
next=p->
(3)free(P);
●删除P(a2)后一个节点a3
(2)P->
//a2->
next指向a4
//a4->
prior=P
//释放a3存储空间
◎建立(不带头节点)单链表
读程序:
设n为2(i取0,1)
i=0时,
p↑L↑q↑
i=1时,→
L↑q↑p↑L↑q↑p↑
→
L↑q↑p↑
第三章
1.栈的进出序列、栈、队列、循环队列的满/空条件;
▲由于栈的插入、删除操作是限制在栈顶进行的,因而后进栈的元素必然是先出栈,0.所以栈是“后进先出”表。
▲由于队列的输入、输出操作分别在队的两端进行,因此先入队的元素必然先输出,故队列又称为“先进先出”表
◎栈的进出序列
例题:
进栈序列为123,可能得到的出栈序列是什么?
答:
共五种123/132/213/231/321
进出栈情况(以132序列为例):
1进栈→1出栈,输出1→2进栈→3进栈→3出栈→2出栈输出32
◎栈、队列、循环队列的满/空条件
栈空条件:
s.top=s.base;
栈满条件:
s.top-s.base=stacksize;
队空条件:
Q.front=Q.rear;
队满条件:
q->
rear-q->
front=MAXSIZE
循环队列空条件:
Q.front=Q.rear
循环队列满条件:
为避免在队满是队头指针和队尾指针也是重合的情况,规定队列中
还有一个空的存储单元时为队满,即为Q.front=(Q.rear+1)MODmaxsize(MOD为取余
运算符)。
因而,这种循环队列不适合用动态数组作为存储结构。
2.栈、队列的存储结构、基本操作算法(双向栈);
◎栈存储结构
●顺序栈
typedefstruct{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
●链式栈
◎队列存储结构
●顺序存储结构
●链式存储结构
◎双向栈
存储结构:
typedef
struct{
Elemtype
*base[2];
*top[2];
}BDStacktype;
//双向栈类型
初始化:
StatusInit_Stack(BDStacktype&
tws,intm)//初始化一个大小为m的双向栈tws
{
tws.base[0]=(Elemtype*)malloc(sizeof(Elemtype)*m);
tws.base[1]=tws.base[0]+m;
tws.top[0]=tws.base[0];
tws.top[1]=tws.base[1];
returnOK;
}//Init_Stack
入栈:
Statuspush(BDStacktype&
tws,inti,Elemtypex)
//x入栈,i=0表示低端栈,i=1表示高端栈
if(tws.top[0]>
tws.top[1])returnOVERFLOW;
//注意此时的栈满条件
if(i==0)*tws.top[0]++=x;
elseif(i==1)*tws.top[1]--=x;
elsereturnERROR;
returnOK;
}//push
出栈:
Statuspop(BDStacktype&
tws,inti,Elemtype&
x)
//x出栈,i=0表示低端栈,i=1表示高端栈
if(i==0)
{
if(tws.top[0]==tws.base[0])returnOVERFLOW;
x=*--tws.top[0];
}
elseif(i==1)
{
if(tws.top[1]==tws.base[1])returnOVERFLOW;
x=*++tws.top[1];
}//pop
第四章
1.字符串模式匹配的简单算法;
intIndex(SStringS,SStringT,intpos)
{//算法4.5
//返回子串T在主串S中第pos个字符之后的位置。
//若不存在,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 知识点
![提示](https://static.bdocx.com/images/bang_tan.gif)