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