数据结构习题Word下载.docx

上传人:b****7 文档编号:22212727 上传时间:2023-02-03 格式:DOCX 页数:21 大小:24.89KB
下载 相关 举报
数据结构习题Word下载.docx_第1页
第1页 / 共21页
数据结构习题Word下载.docx_第2页
第2页 / 共21页
数据结构习题Word下载.docx_第3页
第3页 / 共21页
数据结构习题Word下载.docx_第4页
第4页 / 共21页
数据结构习题Word下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据结构习题Word下载.docx

《数据结构习题Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构习题Word下载.docx(21页珍藏版)》请在冰豆网上搜索。

数据结构习题Word下载.docx

A、O(m2)B、O(n2)C、O(m*n)D、O(m+n)

13、执行下面程序段时,执行S语句的次数为______。

for(inti=1;

A、n2B、n2/2C、n(n+1)D、n(n+1)/2

14、下面算法的时间复杂度为_______。

intf(unsignedintn){

if(n==0||n==1)return1;

elsereturnn*f(n-1);

}

A、O

(1)B、O(n)C、O(n2)D、O(n!

练习题2:

1、线性表的顺序存储结构是一种()的存储结构。

A.随机存取B.顺序存取

C.索引存取D.HASH存取

2、在下面的几个叙述中,正确的是()。

A.顺序存储方式只能用于存储线性结构。

B.顺序存储方式的优点是存储密度大,且插入、删除运算方便、效率高。

C.链式结构属于动态结构,顺序存储结构必为静态结构。

D.在链表中,逻辑上相邻的两个元素在物理上不一定相邻。

3、L为具有头结点的单链表的头指针,执行下列程序段后与原单链表比较后发现()。

if((L->

next!

=NULL)&

&

(L->

next->

=NULL))

{q=L->

next;

p=q->

L->

next=p;

while(p->

=NULL)p=p->

q->

next=p->

p->

next=q;

A.原表的头结点成了新表的尾结点

B.原表的首元结点成了新表的尾结点

C.原表的第二个元素结点成了新表的尾结点

D.原表的尾结点成了新表的首元结点

4、在一个单链表中,若P结点不是最后结点,在P之后插入S结点,则执行()。

A.s→next=p;

p→next=s;

B.s→next=p→next;

p→next=s;

C.s→next=p→next;

p=s;

D.p→next=s;

s→next=p;

5、对长度为n顺序线性表进行插入元素的操作,如果在每一个元素之前插入一个元素概率相同,则插入一个元素移动元素的平均次数为()。

A.n/2B.(n–1)/2C.(n+1)/2D.n

6、一维数组与线性表的区别是()。

A.前者长度固定,后者长度可变

B.后者长度固定,前者长度可变

C.两者长度均固定

D.两者长度均可变

7、用链表表示线性表的优点是()。

A.便于随机存取

B.便于插入和删除

C.花费的存储空间较顺序存储少

D.元素的物理顺序与逻辑顺序相同

8、在一带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为head=()。

9、一个向量第一个元素的存储地址是100,每个元素的长度为2,则第五个元素的地址是()。

10、从一个长度为n的顺序表中删除第I(1≤I≤n)个元素,需要向后移动()个元素。

11、非空的循环单链表first的尾结点(由p所指向)满足()。

A.p->

next==NULL;

 B.p==NULL;

C.p->

next==first;

  D.p==first;

12、已知L是无表头结点的单链表,其中P结点既不是首元结点,也不是尾元结点

a)在P结点后插入S结点的语句序列是:

(4,1)

b)在P结点前插入S结点的语句序列是:

(7,11,8,4,1)

c)在表首插入S结点的语句序列是:

(5,12)

d)在表尾插入S结点的语句序列是:

(11,9,1,6)

(1)P->

next=S;

(2)P->

next=P->

(3)P->

next=S->

(4)S->

(5)S->

next=L;

(6)S->

next=NULL;

(7)Q=P;

(8)WHILEP->

=QDOP=P->

(9)WHILEP->

=NULLDOP=P->

(10)P=Q;

(11)P=L;

(12)L=S;

(13)L=P;

14、设有一个由正整数组成的无序(向后)单链表,编写完成下列功能的算法:

(1)找出最小值结点,且打印该数值;

(2)若该数值是奇数,则将其与直接后继结点的数值交换;

(3)若该数值是偶数,则将其直接后继结点删除;

15、已知一头指针为head、带头结点的单链表,链表中结点的元素按非递减有序排列,请在下面括号内写一删除该表中重复元素的算法。

(不用写结点的结构)

Voiddelnode(ListNode*head)

{

ListNode*p,*q;

……

16、单循环链表中结点的数据类型定义为:

typedefstructLnode{

intdata;

structLnode*next;

}Lnode,*linklist;

1.编写函数voidcreatelist_L(linklist&

L,intn),构造L链表,n为链表的长度。

2.编写函数voiddeletex(linklist&

L,intx),要求

(1)输出找见的每一个值为x的元素在链表中的序号。

(2)同时从链表中删除找见的每一个值为x的元素。

练习题3:

1.设进栈的字符序列为dcba,则哪一种是不可能的出栈序列()。

A.abcdB.dcbaC.abdcD.dcab

2.判定一个栈ST(最多元素为m0)为空的条件是()。

 A.ST.t<>0  B.ST.t==0 

 C.ST.t<>m0  D.ST.t==m0

3.判定一个循环队列Q(最多元素为m0)为满队列的条件是()。

A.Q.front==Q.rearB.Q.front〈〉Q.rear

C.Q.front==(Q.rear+1)MODm0

D.Q.front〈〉(Q.rear+1)MODm0

4.用一个一维数组A来存储一个大小为n的顺序栈,假定A[1]作为栈底,以top作为栈顶指针,则当做出栈操作时,top的变化为()。

A.top=nB.top=top+1

C.top=top–1D.top=n+1

5.设计一个判别表达式中左、右括号是否匹配的算法,采用()数据结构最佳。

6.设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5、e6依次通过栈后即进入队列Q,若6个元素出队的顺序是e2、e4、e3、e6、e5、e1,则栈S的容量至少应该是多少?

7.内存中一片连续空间(不妨假设地址从1到m),提供给两个栈S1和S2使用,怎样分配这部分存储空间,使得对任一个栈,仅当这部分空间全满时才发生上溢。

8.画出对算术表达式A-B*C/D+E^F求值时操作数栈和运算符栈的变化过程。

练习题6:

1.一棵二叉树的结点数为33,则其最大的深度为(),最小的深度为()。

2.在一棵度为3的树中,度为3的结点数为n3个,度为2的结点数为n2个,则该树中的叶子结点数为(   )。

3.下列关于二叉树的说法,正确的是()。

A.二叉树的度为2

B.任何一棵二叉树中至少有一个结点的度为2

C.度为0的树是一棵二叉树

D.二叉树中任何一个结点的度都为2

4.一个后缀算术表达式为abc*+ef/-,则对应的前缀表达式为()。

A.-+a*bc/efB.a+b*c-e/f

C.-+abc*/efD.abcef*+/-

5.在下列存储形式中,()不是树的存储形式。

A.双亲表示法B.孩子链表表示法

C.孩子兄弟表示法D.顺序存储表示法

6.在二叉树结点的先序序列、中序序列和后序序列中,所有叶子结点的先后顺序()。

A.都不相同B.完全相同

C.先序和中序相同,而后序不同

D.中序和后序相同,而与先序不同

7.某二叉树结点的中序序列为ABCDEFG,后序序列为BDCAFGE,该棵二叉树对应的森林包括()棵树。

A.1B.2C.3D.4

8.在一棵具有5层的完全二叉树中,结点总数最少为()。

A.15B.16C.5D.31

9.有m个叶子结点的哈夫曼树,其总的结点数为()。

A.2mB.2m+1C.2m-1D.2(m+1)

10.设n,m为一棵二叉树上的两个结点,在中序遍历时,n在m前的条件是()。

 A.n在m右方  B.n是m的祖先

  C.n在m左方  D.n是m的子孙

11.二叉树的先序遍历序列为EFHIGJK,中序遍历序列为HFIEJKG,求二叉树的右子树的根结点。

12.设树T的度为4,其中度为1、2、3、4的结点数分别为4、2、1、1,则T中叶子结点数是多少?

13.分别画出有3个结点的二叉树的树型。

14.某二叉树的先序遍历的序列是ABDGCEFH,中序遍历的序列是DGBAECHF,请画出该棵二叉树。

15.有一份电文中共使用五个字符:

a,b,c,d,e,它们的出现频率依次为4、7、5、2、9,试构造哈夫曼树,并求出每个字符的哈夫曼编码。

练习题7:

1.对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是()。

A.nB.(n-1)2C.n-1D.n2

2.在有向图G的拓扑序列中,若顶点Vi在Vj之前,则下列情况不可能出现的是()。

A.G中有弧(Vi,Vj)B.G中有一条从Vi到Vj的路径

C.G中没有弧(Vi,Vj)D.G中有一条从Vj到Vi的路径

3.具有n个顶点的图的生成树,含有()条边。

4.无向图G的邻接距阵A中,若A[I,J]的值为1,则A[J,I]的值为()。

5.已知有向图如下,请计算从v0到其余各点的最短路径。

G=(V,E),其中V={v0,v1,v2,v3,v4,v5,v6},E={<

v0,v1,15>

<

v0,v3,2>

v0,v4,12>

v1,v2,6>

<

v3,v2,8>

v3,v5,4>

v4,v5,5>

v2,v6,9>

v5,v6,10>

练习题9:

1、已知一个待散列存储的线性表为(18,34,58,26,75,67,48,93,81),散列函数为H(K)=KMOD11,若采用线性探测的开放定址法来处理冲突,计算平均查找长度。

2、已知8个元素为(54,38,24,14,70,23,50,10),按依次插入结点的方法生成一棵二叉排序树,查找值为14的结点需要比较的次数为(    )次。

3、对线性表进行二分查找,要求线性表为()。

A.以顺序方式存储B.以链式方式存储

C.以顺序方式存储,且要求数据元素有序D.以链式方式存储,且要求数据元素有序

4、已知一个有序表(13,20,25,37,48,58,61,78,83,90,101),当二分查找值48时,()次比较查找成功。

5、为了有效地利用散列查找技术,需要解决的问题是()。

(1)找一个好的散列函数

(2)设计有效的解决冲突的方法(3)用整数表示关键字值

A.

(1)和

(2)B.

(1)和(3)

C.

(2)和(3)D.

(1)、

(2)和(3)

6、有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值为82时,()次比较后查找成功。

A.1   B.2   C.4   D.8

7、设哈希表长m=14,哈希函数H(key)=keyMOD13表中已有4个结点:

15,38,61,84,其余地址为空,如用二次探测再散列处理冲突,关键字为49的结点的地址是______。

8、已知一个待散列存储的线性表为(18,34,58,26,75,67,48,93,81),散列函数为H(K)=KMOD11,表长为11。

若采用线性探测再散列法来处理冲突,请给出散列表并计算平均查找长度。

9、何谓散列函数?

何谓冲突?

练习题10:

1.在对一组记录的关键字(65,43,100,30,21,79,60,21,90)进行直接插入排序时,当把它的第七个关键字60插入到有序子表时,为寻找插入位置需比较多少次()?

2.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值为82时,()次比较后查找成功。

3.在下列排序方法中,关键字比较次数与记录的初始排列次序无关的是()。

A.希尔排序B.冒泡排序C.简单选择排序D.直接插入排序

4.对下列的四个序列用快速排序方法排序,以序列中第一个元素为基准。

在第一趟划分过程中,元素交换次数最大的是()。

A.70,75,82,90,23,16,10,68

B.70,75,68,23,10,16,90,82

C.82,75,70,16,10,90,68,23

D.23,10,16,70,82,75,68,90

5.在对一组记录(54,38,58,20,15,72,60,45,83)进行冒泡排序时,第一趟需要进行相邻记录交换的次数为()。

6.设有关键字序列{742,301,751,129,937,863,256,694,076,438},简单选择排序试给出:

①第3趟排序结束时的关键字序列的状态:

②在整个排序过程中,关键字共需比较的次数:

7.已知12个数据元素为(34,76,45,18,26,54,92,60,25,37,3,78),对该数列按从小到大排序,若采用希尔排序方法排序,设第一趟排序的增量为6,第二趟排序的增量为3,请给出第二趟排序后的序列。

8.一组记录的关键字排列为(46,74,18,53,14,20,40,38,86,65),请给出利用堆排序的方法建立的初始堆(大顶堆)。

实验:

上机实验作业1:

1、建立空表;

2、建立含输入输出算法的程序;

3、将插入与删除的算法变成程序。

上机实验作业2:

1、将顺序表(a1,a2,...,an)重新排列为以a1为界的两部分:

a1前面的值均比a1小,a1后面的值都比a1大。

2、约瑟夫(Joseph)问题:

编号为1,2,·

·

,17的17个人围成一圈,从1开始报数,报3的人出列,问最后剩下的哪个人的编号是几?

(存储结构自选)。

上机实验作业3:

1、编写程序:

利用栈检测表达式中的圆括号的匹配。

2、判定给定的字符串是否为回文。

回文游戏:

顺读与逆读字符串一样(不含空格)

1.读入字符串

2.去掉空格(原串)

3.压入栈

4.原串字符与出栈字符依次比较

若不等,非回文

若直到栈空都相等,回文

比如字符串:

“madamimadam”

上机实验作业4:

1、已知一个由字母组成的长度为n的字符串,其存储结构为带头结点的单链表,头指针为L,结点的数据类型为:

(1)设计一个删除函数voidDeleteX(linklsitL),删除字符串中所有X字母(包括大小写)。

(2)设计一个charFindmax(linklsitL)函数,找出该链表中最大的字母,并把查找结果作为函数值返回。

 

(3)设计voidExcharge(linklsitL,charc)函数,将字符串中所有的最大字母排列到串尾。

typedefstructLnode{

chardata;

structLnodenext;

}Lnode,*linklist;

实验作业题5:

构造一棵二叉链表,输出其三种不同遍历的序列。

上机实验题6:

请编写索引顺序查找程序。

上机实验题7:

从键盘任意输入一组数据,分别使用直接插入排序、快速排序、简单选择排序、归并排序,将输入的数据按降序排列。

PPT中相关知识点:

1、预定义常量及类型

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineOVERFLOW-1

typedefintstatus

数据元素被约定为ElemType类型,用户需要根据具体情况,自行定义该数据类型。

2、例求两个n阶方阵的乘积C=A×

B,其算法如下:

for(i=0;

i<n;

j++)n+1

for(j=0;

j<n;

j++)n(n+1)

{C[j]=0;

n2

for(k=0;

k<n;

k++)n2(n+1)

C[j]=C[j]+A[k]*B[k][j];

}n3

该算法中所有语句的频度之和(即算法的时间耗费)为:

T(n)=2n3+3n2+2n+1

3、线性表的动态分配顺序存储结构的类型定义:

#defineLIST_INIT_SIZE100

#defineLISTINCREMENT10

typedefstruct{

ElemType*elem;

intlength;

intlistsize;

}Sqlist;

4、初始化的主要工作就是为顺序表分配一个预定义大小的数组空间。

statusInitList_sq(sqlist&

L)

{

L.elem=(ElemType*)malloc(100*sizeof(ElemType));

if(!

L.elem)returnERROR;

L.length=0;

L.listsize=100;

returnOK;

5、插入

StatusListInsert_sq(sqlist&

L,inti,ElemTypee){

if(i<

1||i>

L.length+1)returnERROR;

if(L.length>

=L.listsize){

newbase=(ElemType*)realloc(L.elem,

(L.listsize+10)*sizeof(ElemType));

newbase)returnERROR;

L.elem=newbase;

L.listsize+=10;

for(j=L.length;

j>

j--)

*(L.elem+j)=*(L.elem+j-1)

*(L.elem+i-1)=e;

L.length++;

returnOK;

(ElemType*)realloc(L.elem,

for(j=L.length-1;

j>

=i-1;

j--)

L.elem[j+1]=L.elem[j];

L.elem[i-1]=e;

6、删除

statusListDelete_sq(sqlist&

L,inti,ElemType&

e)

if(i<

L.length)returnERROR;

e=L.elem[i-1];

for(j=i;

=L.length-1;

j++)

L.elem[j-1]=L.elem[j];

L.length--;

7、查找

在顺序表中查找是否存在和待查元素相同的数据元素。

intLocateElem_sq(sqlistL,elemtypee)

i=1;

//第一个元素的序号

while(i<

=L.length&

e!

=L.elem[i-1])

i++;

if(i<

=L.length)returni;

return0;

8、链表中结点的数据类型的定义

typedefstructLNode{

ElemTypedata;

structLNode*next;

}LNode,*linklist;

LNode*h,*p;

Linklisth,p;

P:

是所指向结点的地址

P->

data:

表示p指向结点的数据域

next:

表示p指向结点的指针域,是其直接后继在存储器中所占单元的地址

生成一个LNode型新结点:

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

系统回收p结点:

free(p)

9、建立单链表

(1)从表尾到表头逆向建立法

Voidcreatelist1_L(linklist&

L,intn)

L=(linklist)malloc(sizeof(LNode));

for(i=n;

i>

0;

i--)

{p=(linklist)malloc(sizeof(LNode));

cin>

>

p->

data;

next=L->

(2)从表头到表尾顺序建立法

voidcreatelist2_L(linklist&

{inti;

linklistp,q;

L=q=(linklist)malloc(sizeof(LNode));

for(i=1;

{p=(linklist)malloc(sizeof(

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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