
数据结构作业最新.docx
8页数据结构作业 数据结构习题 第一章绪论 1.6 在程序设计中,常用下列三种不同的出错处理方式: 1) 用exit语句终止执行并报告错误; 2) 以函数的返回值区别正确返回或错误返回; 3) 设置一个整形变量的函数参数以区别正确返回或某种错误返回 试讨论这三种方法各自的优缺点 1.7 在程序设计中,可采用下列三种方法实现输出和输入: 1) 通过scanf和printf语句; 2) 通过函数的参数显示传递; 3) 通过全局变量隐式传递 试讨论这三种方法的优缺点 1.8 设n为正整数试确定下列各程序段中前置以记号@的语句的频度: 5) for (i = 1; i = (y + 1) * (y + 1)) { @ y++; } 答案:n向下取整 8) x = 91; y = 100; while (y > 0) { @ if (x > 100) { x -= 10; y--;} else { x++; } } 答案:if 执行次数为1100, if 判断内部执行为100次 1.19 试编写算法,计算i!·2i (i = 0, 1, …, n-1)的值并分别存入数组a[arrsize]的各个分量中。
假设计算机中允许的整数最大值为MAXINT ,则当n > arrsize 或对某个k (0 ≤ k ≤ n-1)使k!·2k > MAXINT 时,应按出错处理注意选择你认为较好的出错处理方法 1.20 试编写算法求一元多项式∑==n i i i x a x 0n )(P 的值P n (x 0),并确定算法中每一语句的执行 次数和整个算法的时间复杂度注意选择你认为较好的输入和输出方法本题的输入为a i (i=0, 1, …, n )、x 0和n ,输出为P n (x 0) 第二章线性表 2.11 设顺序表va中的数据元素非递减有序试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性 2.12 设A=(a1,…,a m)和B=(b1,…,b n)均为顺序表,A’和B’分别为A和B中除去最大共同前缀后的子表(例如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),则两者中最大的共同前缀为(x,y,y,z),在两表中除去最大共同前缀后的子表分别为A’=(x,z)和B’=(y,x,x,z))若A’=B’=空表,则A=B;若A’=空表,而B’≠空表,或者两者均不为空,且A’的首元小于B’的首元,则A B。
试写一个比较A、B大小的算法(请注意:在算法中,不要破坏原表A和B,并且也不一定先求得A’和B’才进行比较) 2.19 已知线性表中的元素以值非递减有序排列,并以单链表作存储结构试写一高效算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素)同时释放被删节点空间,并分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值可以和表中的元素相同,也可以不同) 2.22 试写一算法,对单链表实现就地(原地)逆置 2.38 设有一双向循环链表,每个结点中除有prior,data和next三个域外,还增设了一个访问频度域freq在链表被起用之前,频度域freq的置均初始化为零,而每当对链表进行一次LOCATE(L,x)的操作后,被访问的结点(即元素值等于x的结点)中的频度域freq 的值便增1,同时调整链表中结点之间的次序,使其按访问频度非递增的次序顺序排列,以便始终保持被频繁访问的结点总是靠近表头结点试编写符合上述要求的LOCATE操作的算法 2.41 试以循环链表作稀疏多项式的存储结构,编写求其导函数的算法,要求利用原多项式中的结点空间存放其导函数(多项式),同时释放所有无用(被删)的结点。
第三章栈和队列 3.17 试写一算法,识别依次读入的一个以@为结束符的字符序列是否为形如‘序列1&序列2’模式的字符序列其中序列1和序列2中都不包含字符‘&’,且序列2是序列1的逆序列例如‘a+b&b+a’是属于该模式的字符序列,而‘1+3&3-1’则不是 3.21 假设表达式由单字母变量和双目四则运算符构成试写一算法,将一个通常书写形式且书写正确的表达式转换成逆波兰式 3.22 如题3.21的假设条件,试写一算法,对以逆波兰式表示的表达式求值 3.30 假设将循环队列定义为:以域变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回对头元素) 3.31 假设称正读和反读都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文,‘abcde’和‘ababab’则不是回文试写一算法判别读入的一个以‘@’为结束符的字符序列是否是回文 3.32 试利用循环队列编写求k阶斐波那契序列中前n+1项(f0,f1,…,f n)的算法,要求满足:f n≤max而f n+1>max,其中max为某个约定的常数。
注意:本题所用循环队列的容量仅为k,则在算法执行结束时,留在循环队列中的元素应是所求k阶斐波那契序列中的最后k 项f n-k+1,…,f n) 第四章串 4.17 编写算法,实现串的基本操作Replace(&S, T, V) 4.23 假设以块链结构作串的存储结构试编写判别给定串是否具有对称性的算法,并要求算法的时间复杂度为O(StrLength(S)) 4.28假设以结点大小为1(带头结点)的链表结构表示串,则在利用next函数值进行串匹配时,在每个结点中需设三个域:数据域chdata、指针域succ和指针域next其中chdata 域存放一个字符;succ域存放指向同一链表中后继结点的指针;next域在主串中存放指向同一链表中前驱结点的指针,但在模式串中存放指向当该结点的字符与主串中的字符不等时,模式串中下一个应进行比较的字符结点(即与该结点字符的next函数值相对应的字符结点)的指针,若该结点字符的next函数值为零,则其next域的值应指向头结点试按上述定义的结构改写求模式串的next函数值的算法 注:根据同学们的要求,将作业量从六道题减少到三道题,希望同学们能及时完成。
5.21 假设稀疏矩阵A和B均以三元组顺序表作为存储结构试写出矩阵相加的算法,另设三元组C存放结果矩阵 5.26 试编写一个以三元组形式输出用十字链表表示的稀疏矩阵中非零元素及其下标的算法 5.33 试编写递归算法,输出广义表中所有原子项及其所在的层次 6.45 编写递归算法:对于二叉树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间 6.46 编写复制一棵二叉树的非递归算法 6.59 编写算法完成下列操作:无重复地输出以孩子兄弟链表存储的树T中所有的边(这里的边是指树T本身的分支,而不是孩子兄弟链表所形成的二叉树的分支)输出的形式为(k1, k2), ..., (ki, kj), ..., 其中,ki和kj为树结点中的结点标识 第七章图 7.22 试基于图的深度优先搜索策略编写一算法,判别以邻接表方式存储的有向图中是否存在从顶点v i到顶点v j的路径(i≠j)注意:算法中涉及的图的基本操作必须在此存储结构上实现 7.24 利用栈的基本操作编写,按深度优先搜索策略遍历一个强连通图的非递归算法算法中不规定具体的存储结构,而将图Graph看成是一个抽象的数据类型。
7.31 试完成求有向图的强连通分量的算法,并分析算法的时间复杂度 7.42 以邻接表作为存储结构实现求从源点到其余各顶点的最短路径的Dijkstra算法 第八章动态存储管理 8.6 二进制地址为011011110000,大小为(4)10的块的伙伴的二进制地址是什么?若块大小为(16)10时又如何? 9.11 试推导含12个结点的平衡二叉树的最大深度,并画出一棵这样的树 9.25 假设顺序表关键字自大而小有序,修改教科书9.1.1节中的顺序查找算法,将哨兵设在高下标端然后画出此查找过程的判定树,分别求出等概率情况下查找成功和不成功时的平均查找长度 9.45 假设哈希表长为m,哈希函数为H(x),用链地址法处理冲突试编写输入一组关键字并建造哈希表的算法 10.23 试以L.r[k+1]作为监视哨改写直接插入排序算法其中,L.r[1...k]为待排记录且k
