2022年数据结构习题 .pdf
《2022年数据结构习题 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构习题 .pdf(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学习必备欢迎下载第一章绪论一、填空题1 数据是描述客观事物的数、字符以及所有能输入到计算机且能够被计算机程序加工处理的符号集合。_ 是数据的基本单位; _ 是数据的最小单位。 通常被计算机加工处理的数据不是孤立无关的,而是彼此之间存在着某种联系,将这种数据间的联系称为_ 。2 数据结构进行形式化定义时, 可以从逻辑上认为数据结构DS 是_ 的集合 D 和 D 上_ 的集合 R 所构成的二元组: DS=(D,R) 。3 已知某数据结构的二元组形式表示为:A=(D,R),D=01,02,03,04,05,06,07,08,09,R=r ,r=,。则此数据结构属于 _ 结构。4 一个算法的时间复杂度
2、通常用问题规模大小的函数来表示,当一个算法的时间复杂度与问题规模n大小无关时, 则表示为 _ ; 成正比关系时,则表示为_ ; 成对数关系时,则表示为 _ ;成平方关系时,则表示为 _ 。5 数据结构的逻辑结构包括 _ 、树型结构和图型结构三种类型,其中树型结构和图型结构合称为_ ;数据结构的存储结构主要包括 _ 和_ 两种类型。6 线性结构的特点是: 第一个结点 _ 前驱结点,其余结点有且仅有 _ 个前驱结点;最后一个结点_ 后继结点,其余每个结点有且仅有_ 个后继结点。7 树型结构的特点是:根结点没有_ 结点,其余每个结点有且仅有_个前驱结点;叶子结点_ 后继结点,其余结点可以有 _ 个后
3、继结点。8 图型结构的特点是:每个结点可以有_ 个前驱结点和后继结点。9 程序段 for(i=1,s=0;sn;i+) s=s+i;的时间复杂度为 _ 。10 常见的时间复杂度有常数阶O(1)、对数阶 O(log2n)、线性阶 O(n)、平方阶 O(n2)、线性对数阶 O(nlog2n)、立方阶 O(n3)、指数阶 O(2n)等等,这些数量阶之间的大小关系为_ 。二、分析下列用二元组形式表示的数据结构,指出他们分别属于何种类型的数据结构。1.A=(K,R) ,其中:K=a,b,c,d,e,f,g,h,R=r ,r=,。2.B=(K,R) ,其中:K=a,b,c,d,e,f,g,h,R=r ,r
4、=,。3.C=(K,R) ,其中:K= a,b,c,d,e ,R=r ,r=,。4.D=(K,R) ,其中: K=48 ,25,64,57,82,36,75,R=r1,r2,r1=,;r2=,。5.E=(K,R) ,其中: K=1,2,3,4,5,6,7 ,R=r ,r=,。三、指出下列各函数的功能并求出其时间复杂度。1.void prime(int n) int i; for(i=2;isqrt(n) printf(“ yes ” ); else printf(“ no” ); 2.long sum1(int n) 精选学习资料 - - - - - - - - - 名师归纳总结 - - -
5、- - - -第 1 页,共 33 页学习必备欢迎下载long sum,w,i; for(sum=0,i=1;i=n;i+) w=1; for(j=1;j=i;j+) w=wi; sum=sum+w; return(sum); 3.long sum2(int n) long sum,w,i; for(sum=0, w=1,i=1;i=n;i+) w=wi; sum=sum+w; return(sum); 4.void sort(int r ,int n) int i,j; for(i=1; in;i+) for(j=0;jrj+1) temp=rj;rj=rj+1;rj+1=temp; 补充:
6、0.分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是_ 0. N2 _。for (i=0;in;i+) for (j=0;jn; j+) Aij=0; 1 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是 _ N3 _。s=0; for (i=0;in;i+) for (j=0;jn;j+) for (k=0;kn;k+) s=s+Bijk; sum=s; 2 分析下面算法(程序段)给出最大语句频度,该算法的时间复杂度是 _根号 N _。i=s=0; while (sn) i+; s+=i; /s=s+i 3。 分析下面算法(程序段)给出最大语句频度,该算法的时
7、间复杂度是 _ log(N)_。i=1; while (i=n) i=i*2; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 33 页学习必备欢迎下载第一章参考答案一、填空题1 数据元素,数据项,结构2 数据,关系3 树型4 O(1),O(n),O(log2n),O(n2) 5 线性结构,非线性结构,顺序结构,链式结构6 无,一,无,一7 前驱,一,无,任意8 任意9 O(n1/2) 分析:设程序段中的循环体执行k 次,则有不等式111kikiini成立,解此不等式得到不等式2/14/122/34/12nkn,因此)()(nOknf。
8、10 O(1)O(log2n)O(n)O(nlog2n)O(n2)O(n3)O(2n) 二、分析下列用二元组形式表示的数据结构,指出他们分别属于何种类型的数据结构。1 线性结构2 树型结构3 图型结构4 图型结构分析:数据结构 D 中的关系集合 R 有两个关系 r1和 r2。如果只考虑关系 r1,则为线性结构; 如果只考虑关系 r2,则为树型结构;如果把关系r1和 r2联合起来考虑,则为图型结构。5 图型结构分析:若用图形来表示则可以看出r 是 E 上的对称关系,为了简化起见,我们通常把和这两个有序偶对用一个无序偶对 (x,y)或(y,x)来代替。在用图形表示时, 我们把 x 结点和 y 结点
9、之间两条相反的弧用一条无向边来代替。三、指出下列各函数的功能并求出其时间复杂度。1 函数的功能是判断 n是否是一个素数,其时间复杂度为O(n1/2)。分析:函数 prime 中出现的库函数 sqrt为平方根函数,因此)(1)(nOnnf。2 函数的计算nii1!的值,其时间复杂度为O(n2)。3 函数的计算nii1!的值,其时间复杂度为O(n)。4 函数的功能是对数组r 中的 n 个元素进行冒泡排序,其时间复杂度为O(n2)。分析:)(2/ )1()()(211nOnninnfni。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 33
10、页学习必备欢迎下载第二章线性表一、填空题1 设长度为 n 的顺序线性表在任何位置上插入或删除操作都是等概率的,则插入一个元素时平均需要移动_ 个元素,删除一个元素时平均需要移动_ 个元素。2 在顺序线性表中插入一个元素时,插入位置开始后的所有元素均需要_ 移动一个位置。3 在顺序线性表中删除一个元素时,被删除元素后的所有元素均需要_ 移动一个位置。4 线性表的链式存储结构中,元素之间的线性关系是通过结点中的_ 来实现的。5 线性表的顺序存储结构中逻辑上相邻的元素,物理位置 _ 相邻;线性表的链式存储结构中逻辑上相邻的元素,物理位置 _ 相邻。6 已知单链表的长度为 n,则在给定值为 x 的结点
11、后插入一个新结点的时间复杂度为_ 。7 已知单链表的长度为 n,则删除给定值为 x 的结点的时间复杂度为 _ 。8 在单链表中设置头结点的作用是 _。9 双向链表中每个结点含有两个指针域,其中一个指针域指向 _结点,另一个指针域指向 _ 结点。10 在长度为 n 的线性表中顺序查找某个结点值为X 的时间复杂度为 _ 。二、选择题1在长度为 n 的顺序线性表中删除第i 个元素(1=inext=p p=p-next p=p-next-next p-next=p-next-next 4设指针 q 指向单链表中结点 A,指针 p 指向单链表中结点 A 的后继结点 B,指针 s 指向被插入的结点 X,则
12、在结点 A 和结点 B 之间插入结点 X 的操作为() 。 s-next=p-next; p-next=s; q-next=s ; s-next=p; p-next=s-next; s-next=p; p-next=s ; s-next=q;5在长度为 n 的顺序线性表中的第i 个元素(1=irlink=s; s-llink=p; p-rlink-llink=s; s-rlink=p-rlink; s-llink=p; s-rlink=p-rlink; p-rlink=s; p-rlink-llink=s; p-rlink=s; p-rlink-llink=s; s-llink=p; s-rl
13、ink-p-rlink; s-llink=p; s-rlink=p-rlink; p-rlink-llink=s; p-rlink=s;8指针 p指向双向链表中的结点A,则删除结点 A 的操作是() 。 p-llink-rlink=p-rlink ; p-rlink-llink=p-llink ; p-rlink-llink=p-rlink ; p-llink-llink=p-llink ; p-llink-rlink=p-llink ; p-rlink-llink=p-rlink ; p-rlink-rlink=p-rlink ; p-rlink-rlink=p-rlink ;9线性表采用链
14、式存储结构时,要求存储单元的地址() 。 必须是连续的 部分地址必须是连续的 一定是不连续的 连续不连续都可以10设 head为单链表的头指针,则不带头结点的单链表为空的判定条件是() 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 33 页学习必备欢迎下载 head=NULL head-next=NULL head-next=head head!=NULL 11设 head为单链表的头指针,则带头结点的单链表为空的判定条件是() 。 head=NULL head-next=NULL head-next=head head!=NULL
15、 12设 head和 tail 分别为单向循环链表的头指针和尾指针,则下列等式成立的是() 。 head=tail head-next=tail tail-next=head head-next=tail-next 三、算法设计题顺序存储结构的类型定义: typedef struct int am; int n; sqlist; 链式存储结构的类型定义: typedef struct node int data; struct node *next; lklist; 1.建立一个有 n 个结点的单链表,要求从尾部进行插入。2.建立一个有 n 个结点的单链表,要求从头部进行插入。3.用顺序存储结
16、构实现线性表就地逆置算法,即在原表的存储空间内将线性表 (a1,a2,an)逆置为(an,an-1, a1)。4.用链式存储结构实现线性表就地逆置算法,即在原表的存储空间内将线性表 (a1,a2,an)逆置为(an,an-1, a1)。5.已知集合 A、B,求集合 C=AB 算法,要求集合 A、B 和 C 均用采用顺序存储结构表示。6.已知集合 A、B,求集合 C=AB 算法,要求集合 A、B 和 C 均用采用链式存储结构表示。7.设计在带有头结点的单向链表中删除值为X 的结点算法。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 33
17、页学习必备欢迎下载第二章参考答案一、填空题1 n/2,(n-1)/2 分析: 当在顺序线性表中的第i(1=i=n+1)个位置之前插入一个新元素时, 从第 i 个元素起向后的 n+1-i个 元 素 均 要 向 后 移 动 一 个 位 置 。 因 此 在 等 概 率 情 况 下 , 插 入 操 作 中 元 素 的 平 均 移 动 次 数 为112)1(11)(nininnnf;当在顺序线性表中删除第i(1=ileft)和指向后继结点的指针 (p-right) ,然后再分别表示出前驱结点中的右指针域 (p-left-right)和后继结点的左指针域 (p-right-left) ,最后分别修改前驱结
18、点中的右指针域和后继结点的左指针域。9 (4) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 33 页学习必备欢迎下载10 (1) 11 (2) 12 (3) 三、算法设计题1.建立一个有 n 个结点的单链表,要求从尾部进行插入。分析:本题的算法思想是设置指针变量q 始终指向当前链表中的最后一个结点,新生成的结点直接在尾部进行插入。这种设置指针变量q 的方法使得操作比较简单,否则每次在尾部插入新结点时需要用一个临时指针变量从链表头部移到链表尾部。void createlklistfromtail (lklist *&head ) in
19、t i; lklist *p,*q; for (i=1,head=0;idata);p-next=0; if(i=1)head=q=p;else q-next=p;q=p; 提示:以下形式参数表中出现在形式参数名前加符号“&”的现象,这种现象在我们常见的Turbo C 2.0版本中不能使用,但在 Borland C 3.1及其以后版本中可以使用,它的作用是使得对形式参数的修改可以影响到对应的实在参数。以后算法设计题中经常用到。2.建立一个有 n 个结点的单链表,要求从头部进行插入。void createlklistfromhead (lklist *&head ) int i; lklist
20、*p,*q; for (i=1,q=head=0;idata); p-next=head; head=p; 提示:不断从头部插入新结点的方法来构造单向链表比不断从尾部插入新结点的方法来构造单向链表稍微操作简单一些。但顺序打印从尾部插入建立的单向链表所得到的序列与建立单向链表输入的序列一样,而顺序打印从头部插入建立的单向链表所得到的序列与建立单向链表输入的序列正好相反。3.用顺序存储结构实现线性表就地逆置算法,即在原表的存储空间内将线性表 (a1,a2,an)逆置为(an,an-1, a1)。void invertsqlist(sqlist &list) int i,temp,n=list.n;
21、 for(i=1;inext; q-next=0; while(p!=0)q=p; p=p-next; q-next=head; head=q; 5.已知集合 A、B,求集合 C=AB 算法,要求集合 A、B 和 C 均用采用顺序存储结构表示。分析:本题的算法思想是顺序取出集合A 中的元素 Ai ,然后再在集合 B 中从前向后进行顺序查找, 如果找到等于该元素的结点则将其放入集合C 中,否则什么也不做。本题算法思想同样适用于其后的第6 题。void intersectionsqlist(sqlist lista, sqlist listb,sqlist &listc) int i,j; for
22、(listc.n=0,i=0;i=lista.n-1; i+) for(j=0;j=listb.n-1; j+) if (listb.aj=lista.ai) break; if(jnext) for(q=listb;q!=0;q=q-next) if (p-data=q-data) break; if(q!=0) s=(lklist *)malloc(sizeof(lklist); s-data=p-data; s-next=listc; listc=s; 7.设计在带有头结点的单向链表中删除值为X 的结点算法。分析:本题的算法思想是首先在单链表中查找值为x 的结点,如果单链表为空或在单链表
23、中找不到值为x的结点则给出相应的提示信息,否则进行删除操作。为了便于删除操作的实现而设置指针变量p 指向被删除的结点,指针变量 q 始终指向其前驱结点。void deletelklist(lklist *&head, int x) lklist *q,*p; if (head-next=0) printf(“ This linklist is emptyn” );else for(q=head,p=head-next; p!=0; q=p, p=p-next) if (p-data=x) break; if (p=0) printf(“ Not found %d in this linklis
24、tn” ,x); else q-next=p-next; free(p); 提示:在链表中引入头结点后可以消除空表的特殊性,统一表示和处理空表和非空表的情形,从而简化插入和删除等操作的某些细节。具体涉及到本题中,如果没有引入头结点,则在找到值为x 的结点后要区分该结点是第一个结点还是其它结点,而引入头结点后,则这两种情况就可以统一处理。如果本题中的单链表没有带头结点,则需要将上述黑体中的代码改为代码if (p=head) head=p-next; else q-next=p-next;。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 3
25、3 页学习必备欢迎下载第三章栈和队列一、填空题1.线性表、栈和队列从逻辑上来说都是_ 结构。可以在线性表的 _位置插入和删除元素;对于栈只能在 _ 插入和删除元素;对于队列只能在_ 插入元素和在 _ 删除元素。2.栈的插入和删除只能在栈的栈顶进行,后进栈的元素必定先出栈, 所以又把栈称为 _ 表;队列的插入和删除运算分别在队列的两端进行,进行插入的一端叫做_ ,进行删除的一端叫做_ ,先进队的元素必定先出队,所以又把队列称为_ 表。3.假设用向量S1:m来存储顺序栈,指针top 指向当前栈顶的位置。则当栈为空时满足的条件是_ ;当栈为满时满足的条件是 _ 。4.设有一个空栈, 现有输入序列 1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构习题 2022 数据结构 习题
限制150内