数据结构习题.docx
- 文档编号:9076607
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:21
- 大小:24.89KB
数据结构习题.docx
《数据结构习题.docx》由会员分享,可在线阅读,更多相关《数据结构习题.docx(21页珍藏版)》请在冰豆网上搜索。
数据结构习题
各章相关习题:
练习题1:
1、数据结构阐述的主要内容是什么?
2、数据的存储结构有()和()两种。
3、抽象的数据类型定义(ADT)可以用三元组(D,S,P)表示,其中D是(),S是(),P是()。
4、数据的逻辑结构包括()、()和()。
5、设计算法时,通常应考虑达到的目标是()、()、()和()。
6、数据的逻辑结构和()及在这些结构上的()是《数据结构》的主要研究内容。
7、算法分析的两个主要方面是()和()。
8.在线性结构、树形结构和图形结构中,前驱和后继结点之间分别存在着()、()和()的联系。
9.在下面程序段中,s=s+p语句的执行次数为(),p*=j语句的执行次数为(),该程序段的时间复杂度为()。
inti=0,s=0;
while(++i<=n){
intp=1;
for(intj=1;j<=i;j++)
p*=j;
s=s+p;
}
10、计算机执行下列程序时,若S操作为简单操作,其时间复杂度为O
(1),则此程序的时间复杂度为()。
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
S;
A.O(n2/2)B.O((n-1)(n-2)/2)C.O(n2+n)D.O(n2)
11、在数据结构中,从逻辑上可以把数据结构分为()。
A.动态结构和静态结构B.紧凑结构和非紧凑结构
C.线性结构和非线性结构D.内部结构和外部结构
12、下面程序段的时间复杂度为____________。
for(inti=0;i for(intj=0;j a[i][j]=i*j; A、O(m2)B、O(n2)C、O(m*n)D、O(m+n) 13、执行下面程序段时,执行S语句的次数为______。 for(inti=1;i<=n;i++) for(intj=1;j<=i;j++) S; 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->next! =NULL)) {q=L->next;p=q->next;L->next=p; while(p->next! =NULL)p=p->next; q->next=p->next;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->next->next; (3)P->next=S->next; (4)S->next=P->next; (5)S->next=L; (6)S->next=NULL; (7)Q=P; (8)WHILEP->next! =QDOP=P->next; (9)WHILEP->next! =NULLDOP=P->next; (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={ 练习题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时,()次比较查找成功。 A.1B.2C.3D.4 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插入到有序子表时,为寻找插入位置需比较多少次()? A.1B.2C.3D.4 2.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值为82时,()次比较后查找成功。 A.1 B.2 C.4 D.8 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)); if(! newbase)returnERROR; L.elem=newbase;L.listsize+=10;} for(j=L.length;j>=i;j--) *(L.elem+j)=*(L.elem+j-1) *(L.elem+i-1)=e; L.length++;returnOK; } (ElemType*)realloc(L.elem, (L.listsize+10)*sizeof(ElemType)); 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<1||i>L.length)returnERROR; e=L.elem[i-1]; for(j=i;j<=L.length-1;j++) L.elem[j-1]=L.elem[j]; L.length--; returnOK; } 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指向结点的数据域 P->next: 表示p指向结点的指针域,是其直接后继在存储器中所占单元的地址 生成一个LNode型新结点: p=(LNode*)malloc(sizeof(LNode)); 系统回收p结点: free(p) 9、建立单链表 (1)从表尾到表头逆向建立法 Voidcreatelist1_L(linklist&L,intn) { L=(linklist)malloc(sizeof(LNode)); L->next=NULL; for(i=n;i>0;i--) {p=(linklist)malloc(sizeof(LNode)); cin>>p->data; p->next=L->next;L->next=p;} } (2)从表头到表尾顺序建立法 voidcreatelist2_L(linklist&L,intn) {inti; linklistp,q; L=q=(linklist)malloc(sizeof(LNode)); for(i=1;i<=n;i++) {p=(linklist)malloc(sizeof(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 习题
![提示](https://static.bdocx.com/images/bang_tan.gif)