数据结构课程习题集第1页共25页Word文件下载.docx
- 文档编号:21570944
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:15
- 大小:26.40KB
数据结构课程习题集第1页共25页Word文件下载.docx
《数据结构课程习题集第1页共25页Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程习题集第1页共25页Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
A.仅修改队头指针B.仅修改队尾指针
C.队头、队尾指针都要修改D.队头,队尾指针都可能要修改
.15.下面关于串的的叙述中,哪一个是不正确的?
A.串是字符的有限序列B.空串是由空格构成的串
C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储
.16.串是一种特殊的线性表,其特殊性体现在()
A.可以顺序存储B.数据元素是一个字符
C.可以链接存储D.数据元素可以是多个字符
.17.关于空串与空格串,下面说法正确的是()。
A.空串与空格串是相同的B.空串与空格串长度是相同的
C.空格串中存放的都是空格D.空串中存放的都是NULL
.18.图中有关路径的定义是()。
A.由顶点和相邻顶点序偶构成的边所形成的序列B.由不同顶点所形成的序列
C.由不同边所形成的序列D.上述定义都不是
.19.设无向图的顶点个数为n,则该图最多有()条边。
A.n-1B.n(n-1)/2C.n(n+1)/2D.0E.n2
.20.一个n个顶点的连通无向图,其边的个数至少为()。
A.n-1B.nC.n+1D.nlogn;
.21.某内排序方法的稳定性是指()。
A.该排序算法不允许有相同的关键字记录
B.该排序算法允许有相同的关键字记录
C.平均时间为0(nlogn)的排序方法
D.以上都不对
.22.如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用()方法最快。
A.起泡排序B.快速排列C.Shell排序D.堆排序E.简单选择排序
.23.排序趟数与序列的原始状态有关的排序方法是()排序法。
A.插入B.选择C.冒泡D.都不是
.24.下面给出的四种排序方法中,排序过程中的比较次数与排序方法无关的是。
A.选择排序法B.插入排序法C.快速排序法D.都不是
.25.对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15};
则采用的是()排序。
A.选择B.快速C.希尔D.冒泡
.26.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1则T中的叶子数为()
A.5B.6C.7D.8
.27.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()
A.250B.500C.254D.505E.以上答案都不对
.28.有关二叉树下列说法正确的是().
A.二叉树的度为2B.一棵二叉树的度可以小于2
C.二叉树中至少有一个结点的度为2D.二叉树中任何一个结点的度都为2
.29.二叉树的第I层上最多含有结点数为().
A.2IB.2I-1-1C.2I-1D.2I-1
.30.对于有n个结点的二叉树,其高度为().
A.nlog2nB.log2nC.⎣log2n⎦|+1D.不确定
.31.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用()次序的遍历实现编号。
A.先序B.中序C.后序D.从根开始按层次遍历
.32.对N个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为()
A.(N+1)/2B.N/2C.ND.[(1+N)*N]/2
.33.对线性表进行二分查找时,要求线性表必须()
A.以顺序方式存储B.以顺序方式存储,且数据元素有序
C.以链接方式存储D.以链接方式存储,且数据元素有序
.34.当在一个有序的顺序存储表上查找一个数据时,即可用折半查找,也可用顺序查找,但前者比后者的查找速度().
A.必定快B.不一定C.在大部分情况下要快D.取决于表递增还是递减
.35.具有12个关键字的有序表,折半查找的平均查找长度().
A.3.1B.4C.2.5D.5
.36.既希望较快的查找又便于线性表动态变化的查找方法是()
A.顺序查找B.折半查找C.索引顺序查找D.哈希法查找
二、填空题
.1.对于长度为255的表,采用分块查找,每块的最佳长度为__________。
.2.顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为____次;
当使用监视哨时,若查找失败,则比较关键字的次数为____。
.3.在有序表A[1..12]中,采用二分查找算法查等于A[12]的元素,所比较的元素下标依次为__________。
.4..在一棵二叉树中,第5层上的结点数最多为个。
.5.、n(n>
0)个结点构成的二叉树,叶结点最多有个,最少有个。
若二叉树有m个叶结点,则度为2的结点有个。
.6.二叉树中某一结点左子树的深度减去右子树的深度称为该结点的____。
.7.假定一棵二叉树的结点数为18,则它的最小深度为,最大深度为;
.8.在一棵二叉树中,度为零的结点的个数为n0,度为2的结点的个数为n2,则有n0=。
.9.现有按中序遍历二叉树的结果为abc,问有____种不同形态的二叉树可以得到这一遍历结果,这些二叉树分别是____。
.10.若不考虑基数排序,则在排序过程中,主要进行的两种基本操作是关键字的______和记录的_____。
.11.直接插入排序用监视哨的作用是_______。
.12.不受待排序初始序列的影响,时间复杂度为O(N2)的排序算法是_____,在排序算法的最后一趟开始之前,所有元素都可能不在其最终位置上的排序算法是_____。
.13.判断一个无向图是一棵树的条件是______。
.14.具有10个顶点的无向图,边的总数最多为______。
.15.若用n表示图中顶点数目,则有_______条边的无向图成为完全图。
.16.空格串是指___,其长度等于____。
.17.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为___,又称P为____。
.18.串的两种最基本的存储方式是____、____;
两个串相等的充分必要条件是___。
.19.已知链队列的头尾指针分别是f和r,则将值x入队的操作序列是_______。
.20.向栈中压入元素的操作是____。
.21.在具有n个单元的循环队列中,队满时共有___个元素。
.22.用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为_______。
.23.单链表是____的链接存储表示。
.24.在双链表中,每个结点有两个指针域,一个指向____,另一个指向____。
.25.链接存储的特点是利用________来表示数据元素之间的逻辑关系。
.26.顺序存储结构是通过________表示元素之间的关系的;
链式存储结构是通过________表示元素之间的关系的。
.27.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是________。
.28.根据线性表的链式存储结构中每一个结点包含的指针个数,将线性链表分成________和_______;
而又根据指针的连接方式,链表又可分成________和________。
.29.数据的物理结构包括的表示和的表示。
.30.抽象数据类型的定义仅取决于它的一组___,而与__无关,即不论其内部结构如何变化,只要它的__不变,都不影响其外部使用。
.31.数据结构中评价算法的两个重要指标是
.32.数据结构是研讨数据的_和_,以及它们之间的相互关系,并对与这种结构定义相应的,设计出相应的_。
.三.程序填空题
.1.已知单链表H为一个用带头结点的链表表示的线性表,如下算法是将其倒置。
请在下划线处填上正确的语句。
template<
classT>
voidLine_ListLink<
T>
:
Reverse()
{Line_ListNode<
*p,*head=newLine_ListNode<
();
while(____________)
{p=first;
first=first–>
link;
p–>
link=____________;
head–>
link=p;
}
first=head–>
delete____________;
}
.2.在顺序表中随机存取的数据,很容易在顺序表中实现按序号查找元素。
代码如下所示,请在下划线处填上正确的语句。
template<
boolLine_ListSqu<
Find(____________,T&
x)const
//在线性表中查找第i个元素并用x返回
{if(____________)returnfalse;
x=elem[i–1];
return____________;
.3.线性表的插入操作是指在线性表的第m–1个数据元素和第m个数据元素之间插入一个新的数据元素x,其结果是使长度为n的线性表(a1,a2,…,am–1,am,…,an)变成长度为n+1的线性表(a1,a2,…,am–1,x,am,…,an),并且数据元素am–1和am之间的逻辑关系发生了变化。
实现步骤如下:
(1)合法性判断:
插入位置i是否合法?
表是否已满?
(2)将第i至第n位的元素向后移动一个位置;
(3)将要插入的元素写到第i个数据元素的位置;
(4)表长加1。
具体算法如下,请在下划线处填上正确的语句。
Line_ListSqu<
&
Line_ListSqu<
Insert(inti,T&
x)
{if(____________)throwOutOfBounds();
if(length==MaxSize)throwNoMem();
for(____________;
j>
=i–1;
j––)elem[j+1]=elem[j];
elem[i–1]=____________;
length++;
.4.-冒泡排序(BubbleSort)的基本思想是:
设数组a中存放了n个数据元素,循环进行n趟如下的排序过程,请在下划线处填上正确的语句。
voidBubbleSort(DataTypea[],intn)
{
inti,j,flag=1;
DataTypetemp;
for(i=1;
____________;
i++)
{flag=0;
for(j=0;
j++)
{if(____________)
{
flag=1;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
.5.按值查找是指在线性表中查找与给定值x相等的数据元素,具体实现代码如下,请在下划线处填上正确的语句。
intLine_ListSqu<
Search(constT&
x)const
{int____________;
if(IsEmpty())return0;
//线性表为空时返回0
while(____________)i++;
if(elem[i]==x)return++i;
elsereturn____________;
.6.线性表的删除操作是使长度为n的线性表(a1,a2,…,am–1,am,…,an)变为长度为n–1的线性表(a1,a2,…,am–1,am+1,,…,an),并且数据元素am–1、am和am+1之间的逻辑关系也会发生变化,需要把第m+1~n个元素(共n–m个元素)依次向前移动一个位置来反映这种变化。
具体实现步骤如下:
①判断删除位置i是否合法,合法则将该位置元素放入x中,否则抛出异常;
②将第i+1至第n位的元素向前移动一个位置;
③表长减1。
Delete(____________,T&
{if(Find(i,x))
{for(____________;
j<
length;
j++)
elem[____________]=elem[j];
length––;
return____________elsethrowOutOfBounds();
}
.7.假设以数组a[m]存放循环队列的元素,同时设变量rear和length分别作为队尾指针和队中元素个数,试给出判别此循环队列的队满条件,并写出相应入队和出队的算法(在出队的算法中要返回队头元素)。
#definem100
intenqueue(inta[],intrear,intlength,intx)
{if(___________)
{printf(“queueisfull”);
return0;
rear=(rear+1)%m;
a[rear]=x;
length___________;
returnlength;
intdequeue(inta[],intrear,intlength,int*x)
{printf(“queueempty”);
*x=a[(rear-length+m)%m];
Length___________;
.8.--删除运算是将单链表的第i个结点删去。
先在单链表中找到第i–1个结点,再删除其后的结点。
具体算法代码如下所,请在下划线处填上正确的语句。
Line_ListLink<
Line_ListLink<
Delete(inti,T&
{if(__________||!
first)throwOutOfBounds();
//删除位置不合法
Line_ListNode<
*p=first;
if(___________)first=first–>
else{Line_ListNode<
*q=first;
intj=1;
//查找第i个结点
while(___________j<
i){q=q–>
++j;
}
if(!
q||___________)throwOutOfBounds();
//没有第i个结点
p=q–>
q–>
link=p–>
.9.删除运算是将单链表的第i个结点删去。
具体算法代码如下所示:
{if(___________)throwOutOfBounds();
while(q&
j<
x=p–>
data;
deletep;
return*this;
.10.求子串Sub_String
已知串S,1≤pos≤Length_Str(S)且0≤len≤Length_Str(S)–pos+1,用串Sub返回S的自第i个字符起长度为j的子串。
stringSub_String(string&
Sub,stringS,inti,intj);
{intp;
Sub.length=0;
if(i<
=0||i>
S.length||j<
=0||___________)
returnSub;
//参数错误时,返回空串
for(p=i–1;
___________;
p++)//把S.ch[i–1]至S.ch[i–1+j]复制到串Sub中
Sub.ch[p–i+1]=S.ch[p];
Sub.ch[j]='
\0'
;
___________=j;
returnSub;
}}
.四.阅读理解题(描述算法思路,再综合出其功能)
本题说明:
算法思路指的是对某种数据结构(如,记录序列),进行操作(如,移动位置),的处理步骤(如,1,2,3….).
算法功能指的是要达到的处理目标(如,合并成有序的单链表.)
.1.阅读如下算法代码:
描述算法思路,再综合出其功能.
main(){inti,max,a[10];
printf(“请输入10个整数:
”);
for(i=0;
i<
=10;
i++)
scanf(“%d”,&
a[i]);
max=a[0];
i=1;
while(i<
10)
{if(a[i]>
max)
max=a[i];
i++;
printf(“值为:
”,max);
.2.阅读如下算法代码:
voiddelete(node*head,intx)
{node*p,*q;
q=head;
p=head->
next;
while((p!
=NULL)&
(p->
data!
=x))
{q=p;
p=p->
if(p==NULL)printf("
未找到x!
\n"
);
elseif(q==head)
printf("
x为第一个结点,无前趋!
else
{q->
data=x;
q->
next=p->
free(p);
.3.阅读如下算法代码:
intInsertPosList(structList*L,intpos,ElemTypex)
{inti;
if(pos<
1||pos>
L->
size+1)/*若pos越界则插入失败*/
return0;
if(L->
size==L->
MaxSize)/*重新分配更大的存储空间*/
againMalloc(L);
for(i=L->
size-1;
i>
=pos-1;
i--)
L->
list[i+1]=L->
list[i];
L->
list[pos-1]=x;
size++;
return1;
.4.阅读如下算法代码:
voidInsertIncreaseList(Seqlist*L,Datatypex)
{
inti;
if(L->
length>
=ListSize)
Error(“overflow"
for(i=L->
length;
0&
data[i-1]>
x;
L->
data[i]=L->
data[i];
//比较并移动元素
L->
data[i]=x;
L->
length++;
}
.5.阅读如下算法代码:
voidDele
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程 习题集 25