数据结构与算法分析复习资料.docx

上传人:b****5 文档编号:8173318 上传时间:2023-01-29 格式:DOCX 页数:47 大小:721.21KB
下载 相关 举报
数据结构与算法分析复习资料.docx_第1页
第1页 / 共47页
数据结构与算法分析复习资料.docx_第2页
第2页 / 共47页
数据结构与算法分析复习资料.docx_第3页
第3页 / 共47页
数据结构与算法分析复习资料.docx_第4页
第4页 / 共47页
数据结构与算法分析复习资料.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

数据结构与算法分析复习资料.docx

《数据结构与算法分析复习资料.docx》由会员分享,可在线阅读,更多相关《数据结构与算法分析复习资料.docx(47页珍藏版)》请在冰豆网上搜索。

数据结构与算法分析复习资料.docx

数据结构与算法分析复习资料

数据结构复习资料总结

2012-05T.H.C2012-06-05MODIFY

目录

1.第一章3

1.1基本概念题3

1.2逻辑结构题3

1.3物理结构题3

1.4算法特性题4

2.线性表4

2.1基本概念题4

2.2顺序表4

2.3链表概念题5

2.4链表指针题5

2.5链表编程题6

3.栈和队列8

3.1栈的概念题8

3.2进栈出栈题8

3.3链栈指针题9

3.4链栈编程题9

3.5队列概念题10

3.6链队指针题10

3.7链队编程题11

3.8循环队列题12

4.串12

4.1串的基本概念12

4.2串函数13

4.5串的编程题13

5.数组和广义表14

5.1数组坐标换算题14

5.2矩阵题14

5.3广义表15

6.树和二叉树15

6.1二叉树的概念性质15

6.2二叉树的链式存储17

6.3树的遍历概念题17

6.4树的遍历操作题18

6.5树的遍历编程题20

6.6哈夫曼树21

6.7树的遍历反过来做的题22

7.图23

7.1图的基本概念23

7.2图的遍历24

7.3图的最小生成树24

7.5图的连通性25

8.查找25

8.1顺序查找25

8.2折半查找25

8.3二叉排序树26

8.4二叉判定树28

8.5哈希函数29

8.6折半查找编程题29

8.7二叉排序树编程题30

9.排序31

9.1排序基本概念31

9.2直接插入排序31

9.3折半插入排序32

9.4交换排序之冒泡排序32

9.5交换排序之快速排序33

9.6选择排序之直接选择排序34

9.7选择排序之堆排序35

9.8选择排序之归并排序38

9.9排序稳定性题38

1.第一章

1.1基本概念题

1.线性结构中数据元素的位置之间存在()的关系。

【B】

A.一对多B.一对一

C.多对多D.每一个元素都有一个直接前驱和一个直接后继

注:

D选不全的,第一个元素就木有前驱,最后一个元素就木有后继。

2.数据结构中,与所使用的计算机无关的是数据的()结构。

【D】

A.物理B.存储C.逻辑与物理D.逻辑

3.结构中的数据元素存在一对一的关系称为________结构。

【线性】

4.数据元素是数据的基本单位,它()。

【C】

A.只能有一个数据项组成B.至少有二个数据项组成

C.可以是一个数据项也可以由若干个数据项组成

D.至少有一个数据项为指针类型

5.一种逻辑结构()存储结构。

【A】

A.可以有不同的B.只能有唯一的

C.的数据元素在计算机中的表示称为D.的数据元素之间的关系称为

 

1.2逻辑结构题

1.通常数据的逻辑结构包括_____、_____、_____、_____四种类型。

【集合;线性;树形;图状】

2.通常可以把一本含有不同章节的书的目录结构抽象成_____结构。

【树形】

3.通常可以把某城市中各公交站点间的线路图抽象成_____结构。

【图状】

4.结构中的数据元素存在多对多的关系称为________结构。

【图状(网状)】

5.结构中的数据元素存在一对多的关系称为________结构。

【树形】

6.结构中的数据元素存在一对一的关系称为________结构。

【线性】

 

1.3物理结构题

1.把数据存储到计算机中,并具体体现数据之间的逻辑结构称称为物理()结构。

【存储】

2.把数据存储到计算机中,并具体体现数据之间的逻辑结构称为________结构。

(物理(存储))

 

1.4算法特性题

1.以下特征中,()不是算法的特性。

【C】

A.有穷性B.确定性C.有0个或多个输出D.可行性

2.算法的时间复杂度与()有关。

【D】

A.所使用的计算机B.与计算机的操作系统

C.与数据结构D.与算法本身

3.要求在n个数据元素中找其中值最大的元素,设基本操作为元素间的比较。

则比较的次数和算法的时间复杂度分别为________和O(n)。

【n-1】

2.线性表

2.1基本概念题

1.针对线性表,在存储后如果最常用的操作是取第i个结点及其前驱,则采用()存储方式最节省时间。

【B】

A.单链表B.顺序表C.单循环链表D.双链表

2.2顺序表

1.设有一个长度为n的顺序表,要在第i个元素之前(也就是插入元素作为新表的第i个元素),则移动元素个数为()。

【A】

A.n-i+1B.n-iC.n-i-1D.i

注:

元素要插入到i的位置,不动的是前面i-1个元素,总元素有n个,要移动的元素个数是:

n-(i-1)即:

n-i+1

2.设顺序存储的线性表长度为n,对于插入操作,设插入位置是等概率的,则插入一个元素平均移动元素的次数为()。

【A】

A.n/2B.nC.n-1D.n-i+1

3.设顺序存储的线性表长度为n,对于删除操作,设删除位置是等概率的,则删除一个元素平均移动元素的次数为()。

【A】

A.(n+1)/2B.nC.2nD.n-i

4.线性表的顺序结构中,()。

【C】

A.逻辑上相邻的元素在物理位置上不一定相邻

B.数据元素是不能随机访问的

C.逻辑上相邻的元素在物理位置上也相邻

D.进行数据元素的插入、删除效率较高

2.3链表概念题

1.链表所具备的特点是()。

【D】

A.可以随机访问任一结点

B.占用连续的存储空间

C.可以通过下标对链表进行直接访问

D.插入删除元素的操作不需要移动元素结点

2.线性表采用链式存储时,其地址()。

【C】

A.一定是不连续的B.必须是连续的

C.可以连续也可以不连续D.部分地址必须是连续的

3.设有一个不带头结点的单向循环链表,结点的指针域为next,指针p指向尾结点,现要使p指向第一个结点,可用语句_______。

【p=p->next;】

4.在双向链表中,每个结点有两个指针域,一个指向________,另一个指向________。

【结点的直接后继结点的直接前驱】

5.以下说法中不正确的是()。

【B】

A.双向循环链表中每个结点需要包含两个指针域

B.已知单向链表中任一结点的指针就能访问到链表中每个结点

C.顺序存储的线性链表是可以随机访问的

D.单向循环链表中尾结点的指针域中存放的是头指针

6.以下表中可以随机访问的是()。

【D】

A.单向链表B.双向链表

C.单向循环链表D.顺序表

2.4链表指针题

基本图形:

1.在一个单链表中,p、q分别指向表中两个相邻的结点,且q所指结点是p所指结点的直接后继,现要删除q所指结点,可用的语句是()。

【C】

A.p=q->nextB.p->next=qC.p->next=qnextD.q->next=NULL

2.在双向链表中,每个结点有两个指针域,一个指向结点的直接后继,另一个指向____。

【结点的直接前驱】

3.设有一个头指针为head的单向循环链表,p指向链表中的结点,若p->next==_______,则p所指结点为尾结点。

【head】

4.设有一个头指针为head的单向链表,p指向表中某一个结点,且有p->next==NULL,通过操作________,就可使该单向链表构造成单向循环链表。

【p->next=head;】

5.带头结点的单向链表的头指针为head,该链表为空的判定条件是()的值为真。

【C】

A.head==NULLB.head->next==head

C.head->next==NULLD.head==head->next

6.双向循环链表结点的数据类型为:

【B】

structnode

{intdata;

structnode*next;/*指向直接后继*/

structnode*prior;

};

设p指向表中某一结点,要显示p所指结点的直接前驱结点的数据元素,可用操作()。

A.printf(“%d”,p->next->data);B.printf(“%d”,p->prior->data);

C.printf(“%d”,p->prior->next);D.printf(“%d”,p->data);

7.要在一个带头结点的单向循环链表中删除头结点,得到一个新的不带头结点的单向循环链表,若结点的指针域为next,头指针为head,尾指针为p,则可执行head=head->next;_______。

【p->next=head;】

8.设有一个头指针为head的单向链表,p指向表中某一个结点,且有p->next==NULL,通过操作________,就可使该单向链表构造成单向循环链表。

【p->next=head;】

9.双向循环链表中,p指向表中某结点,则通过p可以访问到p所指结点的直接后继结点和直接前驱结点,这种说法是________的(回答正确或不正确)。

【正确】

10.设有一个单向链表,结点的指针域为next,头指针为head,p指向尾结点,为了使该单向链表改为单向循环链表,可用语句________。

【p->next=head;】

11.设有一个单向循环链表,结点的指针域为next,头指针为head,指针p指向表中某结点,若逻辑表达式________的结果为真,则p所指结点为尾结点。

【p->next==head;】

 

12.设有一个单向循环链表,头指针为head,链表中结点的指针域为next,p指向尾结点的直接前驱结点,若要删除尾结点,得到一个新的单向循环链表,可执行操作_____。

【p->next=head;】

13.要在一个单向链表中p所指向的结点之后插入一个s所指向的新结点,若链表中结点的指针域为next,可执行________和p->next=s;的操作。

【s->next=p->next;】

14.要在一个单向链表中删除p所指向的结点,已知q指向p所指结点的直接前驱结点,若链表中结点的指针域为next,则可执行_______。

【q->next=p->next;】

2.5链表编程题

1.编程题以下是用头插法建立带头结点且有n个结点的单向链表的程序,要求结点中的数据域从前向后依次为n,n-1,……,1,完成程序中空格部分。

NODE*create2(n)

{NODE*head,*p,*q;

inti;

p=(NODE*)malloc(sizeof(NODE));

p->next=NULL;

head=

(1);

(2);

for(i=1;i<=n;i++)

{p=(3);

p->data=i;

if(i==1)

p->next=NULL;

else

p->next=(4);

q->next=(5);

}

return(head);

}

下面答案:

(1)p

(2)q=p

(3)(NODE*)malloc(sizeof(NODE))

(4)q->next

(5)p

2.编程题以下函数在head为头指针的具有头结点的单向链表中删除第i个结点,

structnode

{intdata;

structnode*next;

};

typedefstructnodeNODE

intdelete(NODE*head,inti)

{

NODE*p,*q;

intj;

q=head;

j=0;

while((q!

=NULL)&&(___

(1)_____))

{

___

(2)_____;

j++;

}

if(q==NULL)

return(0);

p=___(3)_____;

___(4)_____=p->next;

free(___(5)_____);

return

(1);

}

下面答案:

(1)j

(2)q=q->next

(3)q->next

(4)q->next

(5)p

3.栈和队列

3.1栈的概念题

1.栈的插入删除操作在()进行。

【B】

A.栈底B.栈顶C.任意位置D.指定位置

2.以下说法正确的是()。

【C】

A.栈的特点是先进先出,队列的特点是先进后出B.栈和队列的特点都是先进后出

C.栈的特点是先进后出,队列的特点是先进先出D.栈和队列的特点都是先进先出

3.栈和队列的相同点是()。

【D】

A.都是后进先出B.都是后进后出

C.逻辑结构与线性表不同

D.逻辑结构与线性表相同,都是操作规则受到限制的线性表

 

3.2进栈出栈题

1.元素3,6,9按顺序依次进栈,则该栈的不可能输出序列是()(进栈出栈可以交替进行)。

A.9,3,6B.9,6,3【A】

C.6,3,9D.3,9,6

2.元素2,4,6,8按顺序依次进栈,则该栈的不可能输出序列是()(进栈出栈可以交替进行)。

【D】

A.8,6,4,2B.2,4,6,8

C.4,2,8,6D.8,6,2,4

3.一个栈的进栈序列是5,6,7,8,则栈的不可能的出栈序列是()(进出栈操作可以交替进行)【A】

A.5,8,6,7B.7,6,8,5

C.7,6,5,8D.8,7,6,5

4.一个栈的进栈序列是efgh,则栈的不可能的出栈序列是()(进出栈操作可以交替进行)。

【D】

A.hgfeB.gfehC.fgehD.ehfg

3.3链栈指针题

1.从一个栈顶指针为h的链栈中删除一个结点时,用x保存被删结点的值,可执行x=h->data;和________。

(结点的指针域为next)【h=h->next;】

2.向一个栈顶指针为h的链栈中插入一个s所指结点时,可执行______和h=s;。

【s->next=h;】

3.从一个栈顶指针为h的链栈中删除一个结点时,用x保存被删结点的值,可执行______和h=h->next;。

(结点的指针域为next)【x=h->data;】

4.设有一个非空的链栈,栈顶指针为hs,要进行出栈操作,用x保存出栈结点的值,栈结点的指针域为next,数据域为data,则可执行x=______;和hs=______;【hs->data;hs->next;】

5.设top是一个链栈的栈顶指针,栈中每个结点由一个数据域data和指针域next组成,设用x接收栈顶元素,则出栈操作为()。

【A】

A.x=top->data;top=top->next;B.top=top->next;x=top->data;

C.x=top->next;top=top->data;D.top->next=top;x=top->data;

6.设top是一个链栈的栈顶指针,栈中每个结点由一个数据域data和指针域next组成,设用x接收栈顶元素,则取栈顶元素的操作为()。

【C】

A.top->data=x;B.top=top->next;

C.x=top->data;D.x=top->data;top=top->next;

11.C12.C13.D14.B15.A

7.设有一个链栈,栈顶指针为hs,现有一个s所指向的结点要入栈,则可执行操作s->next=hs;________。

【hs=s;】

8.设有一个非空的链栈,栈顶指针为hs,要进行出栈操作,用x保存出栈结点的值,栈结点的指针域为next,则可执行x=hs->data;_______。

【hs=hs->next;】

9.设有一个链栈,栈顶指针为hs,现有一个s所指向的结点要入栈,则可执行操作_______和hs=s;

【s->next=hs;】

3.4链栈编程题

1.编程题以下函数为链栈的进栈操作,x是要进栈的结点的数据域,top为栈顶指针

structnode

{ElemTypedata;

structnode*next;

};

structnode*top;

voidPush(ElemTypex)

{

structnode*p;

p=(structnode*)malloc(___

(1)_____);

p->data=x;

___

(2)_____;

_____(3)___;

}

下面答案:

(1)sizeof(structnode)

(2)p->next=top

(3)top=p

3.5队列概念题

1.队列的删除操作在()进行。

【A】

A.队头B.队尾C.队头或队尾D.在任意指定位置

2.以下说法正确的是()。

【C】

A.队列是后进先出B.栈的特点是后进后出

C.栈的删除和插入操作都只能在栈顶进行

D.队列的删除和插入操作都只能在队头进行

3.以下说法不正确的是()。

【C】

A.栈的特点是后进先出B.队列的特点是先进先出

C.栈的删除操作在栈底进行,插入操作在栈顶进行

D.队列的插入操作在队尾进行,删除操作在队头进行

4.在队列的顺序存储结构中,当插入一个新的队列元素时,指针的值增1,当删除一个元素队列时,指针的值增1。

【尾头】

3.6链队指针题

1.在一个链队中,假设f和r分别为队头和队尾指针,则删除一个结点的运算为()。

【D】

A.r=f->next;B.r=r->next;C.f=r->next;D.f=f->next;

2.在一个链队中,设f和r分别为队头和队尾指针,则插入s所指结点的操作为________和r=s;(结点的指针域为next)【r->next=s;】

3.在一个链队中,f和r分别为队头和队尾指针,队结点的指针域为next,s指向一个要入队的结点,则入队操作为________;________;【r->next=s;r=s;】

4.在一个链队中,f和r分别为队头和队尾指针,队结点的指针域为next,则插入一个s所指结点的操作为________;r=s;【r->next=s】

5.栈和队列的操作特点分别是________和________。

【先进后出(后进先出)先进先出(后进后出)】

6.在一个不带头结点的非空链队中,f和r分别为队头和队尾指针,队结点的数据域为data,指针域为next,若要进行出队操作,并用变量x存放出队元素的数据值,则相关操作为________;_______。

【x=f->data;f=f->next;】

7.综合题

(1)设head1和p1分别是不带头结点的单向链表A的头指针和尾指针,head2和p2分别是不带头结点的单向链表B的头指针和尾指针,若要把B链表接到A链表之后,得到一个以head1为头指针的单向循环链表,写出其中两个关键的赋值语句(不用完整程序,结点的链域为next)。

(2)单向链表的链域为next,设指针p指向单向链表中的某个结点,指针s指向一个要插入链表的新结点,现要把s所指结点插入p所指结点之后,某学生采用以下语句:

p->next=s;s->next=p->next;

这样做正确吗?

若正确则回答正确,若不正确则说明应如何改写

下面答案:

(1)p1->next=head2;p2->next=head1;

(2)不对,s->next=p->next;p->next=s;

3.7链队编程题

1.编程题以下函数为链队列的入队操作,x为要入队的结点的数据域的值,front、rear分别是链队列的队头、队尾指针

structnode

{ElemTypedata;

structnode*next;

};

structnode*front,*rear;

voidInQueue(ElemTypex)

{

structnode*p;

p=(structnode*)___

(1)_____;

p->data=x;

p->next=NULL;

___

(2)_____;

rear=___(3)_____;

}

下面答案:

(1)malloc(sizeof(structnode))

(2)rear->next=p

(3)p

2.编程题以下函数为链队列的出队操作(链队列带有头结点),出队结点的数据域的值由x返回,front、rear分别是链队列的队头、队尾指针

structnode

{ElemTypedata;

structnode*next;

};

structnode*front,*rear;

ElemTypeOutQueue()

{

ElemTypex;

if(___

(1)_____){

printf("队列下溢错误!

\n");

exit

(1);

}

else{

structnode*p=front->next;

x=p->data;

front->next=___

(2)_____;

if(p->next==NULL)rear=front;

free(p);

___(3)_____;

}

}

下面答案:

(1)front==rear

(2)p->next

(3)return(x)

3.8循环队列题

1.循环队列的队头指针为f,队尾指针为r,当_____时表明队列为空。

【r==f】

2.循环队列的最大存储空间为MaxSize=6,采用少用一个元素空间以有效地判断栈空或栈满,若队头指针front=4,当队尾指针rear=_______时队满,队列中共有________个元素。

【3;5】

3.循环队列的最大存储空间为MaxSize=8,采用少用一个元素空间以有效的判断栈空或栈满,若队头指针front=4,则当队尾指针rear=_______时,队列为空,当rear=________时,队列有6个元素。

【4;2】

4.循环队列的引入,目的是为了克服_____。

【假上溢】

5.循环队列的最大存储空间为MaxSize,队头指针为f,队尾指针为r,当_______时表明队列已满。

【(r+1)%MaxSize=f】

4.串

4.1串的基本概念

性质:

“”双引号内的字符串是以‘\0’表示结束的。

要多占一个字节。

1.在C语言中,顺序存储长度为3的字符串,需要占用()个字节。

【】

A.3B.4C.6D.12

2.在C语言中,利用数组a存放字符串“Hello”,以下语句中正确的是()。

【A】

A.chara[10]=“Hello”;B.chara[10];a=“Hello”;

C.chara[10]=‘Hello’;D.chara[10]={‘H’,’e’,’l’,’l’,’o’};

3.两个串相等的充分必要条件是__________。

【串长度相等且对应位置的字符相等】

4.串的两种最

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

当前位置:首页 > 初中教育 > 语文

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

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