精品word数据结构期末复习知识点兼容版良心出品必属精品Word格式文档下载.docx

上传人:b****4 文档编号:13790731 上传时间:2022-10-13 格式:DOCX 页数:41 大小:2.23MB
下载 相关 举报
精品word数据结构期末复习知识点兼容版良心出品必属精品Word格式文档下载.docx_第1页
第1页 / 共41页
精品word数据结构期末复习知识点兼容版良心出品必属精品Word格式文档下载.docx_第2页
第2页 / 共41页
精品word数据结构期末复习知识点兼容版良心出品必属精品Word格式文档下载.docx_第3页
第3页 / 共41页
精品word数据结构期末复习知识点兼容版良心出品必属精品Word格式文档下载.docx_第4页
第4页 / 共41页
精品word数据结构期末复习知识点兼容版良心出品必属精品Word格式文档下载.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

精品word数据结构期末复习知识点兼容版良心出品必属精品Word格式文档下载.docx

《精品word数据结构期末复习知识点兼容版良心出品必属精品Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《精品word数据结构期末复习知识点兼容版良心出品必属精品Word格式文档下载.docx(41页珍藏版)》请在冰豆网上搜索。

精品word数据结构期末复习知识点兼容版良心出品必属精品Word格式文档下载.docx

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(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

prior=S;

//a2->

prior指向S

●在P(a2)节点后插入S节点

prior=P;

//a3->

●删除P(a2)前一个节点a1

(1)Q=P->

//Q指向要被删除的a1;

priro指向头

//头->

next指向P

(4)free(Q);

//释放a1的存储空间

●删除P(a2)节点

prior=p->

next=p->

(3)free(P);

●删除P(a2)后一个节点a3

//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;

}//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个字符之后的位置。

//若不存在,则函数值为0。

//其中,T非空,1≤pos≤StrLength(S)。

inti=pos;

intj=1;

while(i<

=S[0]&

&

j<

=T[0]){

if(S[i]==T[j]){//继续比较后继字符

++i;

++j;

else{//指针后退重新开始匹配

i=i-j+2;

//此时i为上次开始比较位置的下一位

j=1;

}

if(j>

T[0])returni-T[0];

elsereturn0;

}//Index

2.计算NEXT。

j:

1234567

串:

abcabaa

next[j]:

0111232

▲技巧:

第一二个肯定是0,1!

如果要计算next[4],找的字符串必须是以第3个字符c为结尾,第1个字符a为开头的。

以第6个为例,a前一个字母是b,以第5个字符b为结尾的ab刚好和以第1个字

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1