数据结构习题集(C语言版严蔚敏)第一二三章.doc
《数据结构习题集(C语言版严蔚敏)第一二三章.doc》由会员分享,可在线阅读,更多相关《数据结构习题集(C语言版严蔚敏)第一二三章.doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流数据结构习题集(C语言版严蔚敏)第一二三章【精品文档】第 13 页第1章 绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。1.3 设有数据结构(D,R),其中试按图论中图的画法惯例画出其逻辑结构图。1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。1.5 试画出与下列程序段等价的框图。(1) product=1; i=1; while(i=n) produ
2、ct *= i; i+;(2) i=0; do i+; while(i!=n) & (ai!=x);(3) switch case xy: z=y-x; break; case x=y: z=abs(x*y); break; default: z=(x-y)/abs(x)*abs(y);1.6 在程序设计中,常用下列三种不同的出错处理方式:(1) 用exit语句终止执行并报告错误;(2) 以函数的返回值区别正确返回或错误返回;(3) 设置一个整型变量的函数参数以区别正确返回或某种错误返回。试讨论这三种方法各自的优缺点。1.7 在程序设计中,可采用下列三种方法实现输出和输入:(1) 通过scan
3、f和printf语句;(2) 通过函数的参数显式传递;(3) 通过全局变量隐式传递。试讨论这三种方法的优缺点。1.8 设n为正整数。试确定下列各程序段中前置以记号的语句的频度:(1) i=1; k=0; while(i=n-1) k += 10*i; i+;(2) i=1; k=0; do k += 10*i; i+; while(i=n-1);(3) i=1; k=0; while (i=n-1) i+; k += 10*i;(4) k=0; for(i=1; i=n; i+) for(j=i; j=n; j+) k+;(5) for(i=1; i=n; i+) for(j=1; j=i;
4、j+) for(k=1; k=j; k+) x += delta;(6) i=1; j=0; while(i+jj) j+; else i+;(7) x=n; y=0; / n是不小于1的常数 while(x=(y+1)*(y+1) y+;(8) x=91; y=100; while(y0) if(x100) x -= 10; y-; else x+;1.9 假设n为2的乘幂,并且n2,试求下列算法的时间复杂度及变量count的值(以n的函数形式表示)。int Time(int n) count = 0;x=2;while(xarrsize或对某个,使时,应按出错处理。注意选择你认为较好的出错
5、处理方法。1.20 试编写算法求一元多项式的值的值,并确定算法中每一语句的执行次数和整个算法的时间复杂度。注意选择你认为较好的输入和输出方法。本题的输入为,和,输出为。第2章 线性表2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。2.2 填空题。(1) 在顺序表中插入或删除一个元素,需要平均移动 元素,具体移动的元素个数与 有关。 (2) 顺序表中逻辑上相邻的元素的物理位置 紧邻。单链表中逻辑上相邻的元素的物理位置 紧邻。 (3) 在单链表中,除了首元结点外,任一结点的存储位置由 指示。 (4) 在单链表中设置头结点的作用是 。2.3 在什么情况下用顺序表比链表好?
6、2.4 对以下单链表分别执行下列各程序段,并画出结果示意图。2.5 画出执行下列各行语句后各指针及链表的示意图。L=(LinkList)malloc(sizeof(LNode);P=L;for(i=1;inext=(LinkList)malloc(sizeof(LNode);P=P-next;P-data=i*2-1;P-next=NULL;for(i=4;i=1;i-) Ins_LinkList(L,i+1,i*2);for(i=1;inext=S;(2) P-next=P-next-next;(3) P-next=S-next;(4) S-next=P-next;(5) S-next=L;
7、(6) S-next=NULL;(7) Q=P;(8) while(P-next!=Q) P=P-next;(9) while(P-next!=NULL) P=P-next;(10) P=Q;(11) P=L;(12) L=S;(13) L=P;2.7 已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。 a. 删除P结点的直接后继结点的语句序列是_。 b. 删除P结点的直接前驱结点的语句序列是_。 c. 删除P结点的语句序列是_。 d. 删除首元结点的语句序列是_。e. 删除尾元结点的语句序列是_。(1) P=P-next;(2)
8、P-next=P;(3) P-next=P-next-next;(4) P=P-next-next;(5) while(P!=NULL) P=P-next;(6) while(Q-next!=NULL) P=Q; Q=Q-next; (7) while(P-next!=Q) P=P-next;(8) while(P-next-next!=Q) P=P-next;(9) while(P-next-next!=NULL) P=P-next;(10) Q=P;(11) Q=P-next;(12) P=L;(13) L=L-next;(14) free(Q);2.8 已知P结点是某双向链表的中间结点,
9、试从下列提供的答案中选择合适的语句序列。a. 在P结点后插入S结点的语句序列是_。b. 在P结点前插入S结点的语句序列是_。c. 删除P结点的直接后继结点的语句序列是_。d. 删除P结点的直接前驱结点的语句序列是_。e. 删除P结点的语句序列是_。(1) P-next=P-next-next;(2) P-priou=P-priou-priou;(3) P-next=S;(4) P-priou=S;(5) S-next=P;(6) S-priou=P;(7) S-next=P-next;(8) S-priou=P-priou;(9) P-priou-next=P-next;(10) P-prio
10、u-next=P;(11) P-next-priou=P;(12) P-next-priou=S;(13) P-priou-next=S;(14) P-next-priou=P-priou;(15) Q=P-next;(16) Q=P-priou;(17) free(P);(18) free(Q);2.9 简述以下算法的功能。(1) Status A(LinkedList L) /L是无表头结点的单链表if(L & L-next) Q=L;L=L-next;P=L;while(P-next) P=P-next;P-next=Q;Q-next=NULL;return OK;(2) void BB
11、(LNode *s, LNode *q) p=s;while(p-next!=q) p=p-next;p-next =s;void AA(LNode *pa, LNode *pb) /pa和pb分别指向单循环链表中的两个结点BB(pa,pb);BB(pb,pa);2.10 指出以下算法中的错误和低效之处,并将它改写为一个既正确又高效的算法。Status DeleteK(SqList &a,int i,int k)/本过程从顺序存储结构的线性表a中删除第i个元素起的k个元素if(i1|ka.length) return INFEASIBLE;/参数不合法else for(count=1;coun
12、t=i+1;j-) a.elemj-i=a.elemj;a.length-;return OK;2.11 设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。解:Status InsertOrderList(SqList &va,ElemType x)/在非递减的顺序表va中插入元素x并使其仍成为顺序表的算法int i;if(va.length=va.listsize)return(OVERFLOW);for(i=va.length;i0,xva.elemi-1;i-)va.elemi=va.elemi-1;va.elemi=x;va.length+
13、;return OK;2.12 设和均为顺序表,和分别为和中除去最大共同前缀后的子表。若空表,则;若=空表,而空表,或者两者均不为空表,且的首元小于的首元,则;否则。试写一个比较,大小的算法。2.13 试写一算法在带头结点的单链表结构上实现线性表操作Locate(L,x);2.14 试写一算法在带头结点的单链表结构上实现线性表操作Length(L)。2.15 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n。试写一算法将这两个链表连接在一起,假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算。请分析你的算法的时间复杂度。2.16 已知指
14、针la和lb分别指向两个无头结点单链表中的首元结点。下列算法是从表la中删除自第i个元素起共len个元素后,将它们插入到表lb中第i个元素之前。试问此算法是否正确?若有错,请改正之。Status DeleteAndInsertSub(LinkedList la,LinkedList lb,int i,int j,int len)if(i0|j0|len0) return INFEASIBLE;p=la;k=1;while(knext;k+;q=p;while(knext;k+;s=lb; k=1;while(knext;k+;s-next=p; q-next=s-next;return OK;
15、2.17 试写一算法,在无头结点的动态单链表上实现线性表操作Insert(L,i,b),并和在带头结点的动态单链表上实现相同操作的算法进行比较。2.18试写一算法,实现线性表操作Delete(L,i),并和在带头结点的动态单链表上实现相同操作的算法进行比较。2.19 已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间,并分析你的算法的时间复杂度(注意,mink和maxk是给定的两个参变量,它们的值可以和表中的元素相同,也可以不同)。2.20 同2.19题条件,试写一高效的算法,
16、删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同),同时释放被删结点空间,并分析你的算法的时间复杂度。2.21 试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表逆置为。2.22 试写一算法,对单链表实现就地逆置。2.23 设线性表,试写一个按下列规则合并A,B为线性表C的算法,即使得当时;当时。线性表A,B和C均以单链表作存储结构,且C表利用A表和B表中的结点空间构成。注意:单链表的长度值m和n均未显式存储。2.24 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 习题集 语言版 严蔚敏 第一 二三章
限制150内