《自考数据结构历年试题及答案.doc》由会员分享,可在线阅读,更多相关《自考数据结构历年试题及答案.doc(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品文档,仅供学习与交流,如有侵权请联系网站删除全国2001年10月高等教育自学考试数据结构试题课程代码:02331第一部分 选择题(30分)一、 单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。1算法指的是( ) A计算机程序 B解决问题的计算方法 C排序算法 D解决问题的有限运算序列2线性表采用链式存储时,结点的存储地址( ) A必须是不连续的 B连续与否均可 C必须是连续的 D和头结点的存储地址相连续3将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为( ) AO(1) BO(n
2、) CO(m) DO(m+n)4由两个栈共享一个向量空间的好处是:( ) A减少存取时间,降低下溢发生的机率 B节省存储空间,降低上溢发生的机率 C减少存取时间,降低上溢发生的机率 D节省存储空间,降低下溢发生的机率5设数组datam作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为( ) Afront=front+1 Bfront=(front+1)%(m-1) Cfront=(front-1)%m Dfront=(front+1)%m6如下陈述中正确的是( ) A串是一种特殊的线性表 B串的长度必须大于零 C串中元素只能是字母 D空
3、串就是空白串7若目标串的长度为n,模式串的长度为n/3,则执行模式匹配算法时,在最坏情况下的时间复杂度是( ) AO() BO(n) CO(n2) DO(n3)8一个非空广义表的表头( ) A不可能是子表 B只能是子表 C只能是原子 D可以是子表或原子9假设以带行表的三元组表表示稀疏矩阵,则和下列行表02335 对应的稀疏矩阵是( )10在一棵度为3的树中,度为3的结点个数为2,度为2 的结点个数为1,则度为0的结点个数为( ) A4 B5 C6 D711在含n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为( ) Ae B2e Cn2e Dn22e12假设一个有n个顶点和e条弧的有向图用邻
4、接表表示,则删除与某个顶点vi相关的所有弧的时间复杂度是( ) AO(n) BO(e) CO(n+e) DO(n*e)13用某种排序方法对关键字序列(25,84,21,47,15,27,68,35,20)进行排序时,序列的变化情况如下: 20,15,21,25,47,27,68,35,84 15,20,21,25,35,27,47,68,84 15,20,21,25,27,35,47,68,84 则所采用的排序方法是( ) A选择排序 B希尔排序 C归并排序 D快速排序14适于对动态查找表进行高效率查找的组织结构是( )A有序表 B分块有序表 C三叉排序树 D线性链表15不定长文件是指( )A
5、文件的长度不固定 B记录的长度不固定C字段的长度不固定 D关键字项的长度不固定第二部分 非选择题(共70分)二、填空题(本大题共10小题,每小题2分,若有两个空格,每个空格1分,共20分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。16数据的逻辑结构是从逻辑关系上描述数据,它与数据的 无关,是独立于计算机的。17在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为head= 。18栈顶的位置是随着 操作而变化的。19在串S=“structure”中,以t为首字符的子串有 个。20假设一个9阶的上三角矩阵A按列优先顺序压缩存储在一维数组
6、B中,其中B0存储矩阵中第1个元素a1,1,则B31中存放的元素是 。21已知一棵完全二叉树中共有768结点,则该树中共有 个叶子结点。 22已知一个图的广度优先生成树如右图所示,则与此相 应的广度优先遍历序列为 。 23在单链表上难以实现的排序方法有 和 。 24在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的关键字比较次数为 。 25多重表文件和倒排文件都归属于 文件。 三、解答题(本大题共4小题,每小题5分,共20分)26画出下列广义表的共享结构图形表示 P=(z),(x,y)),(x,y),x),(z))27请画出与下列二叉树对应的森林。28已知一个
7、无向图的顶点集为a, b, c, d, e ,其邻接矩阵如下所示ab cde (1)画出该图的图形; (2)根据邻接矩阵从顶点a出发进行深度优先遍历和广度优先遍历,写出相应的遍历序列。29已知一个散列表如下图所示:3520334859 0 1 2 3 4 5 6 7 8 9 10 11 12 其散列函数为h(key)=key%13, 处理冲突的方法为双重散列法,探查序列为: hi=(h(key)+*h1(key)%m =0,1,,m1其中 h1(key)=key%11+1回答下列问题:(1)对表中关键字35,20,33和48进行查找时,所需进行的比较次数各为多少?(2)该散列表在等概率查找时查
8、找成功的平均查找长度为多少?四、算法阅读题(本大题共4小题,每小题5分,共20分)30下列算法的功能是比较两个链串的大小,其返回值为: comstr(s1,s2)= 请在空白处填入适当的内容。int comstr(LinkString s1,LinkString s2) /s1和s2为两个链串的头指针 while(s1&s2) if(s1datedate)return1; if(s1dates2date)return1; if( )return1; if( )return1;31阅读下面的算法 LinkList mynote(LinkList L) /L是不带头结点的单链表的头指针 if(L&
9、L-next) q=L;L=Lnext;p=L; S1: while(pnext) p=pnext; S2: pnext=q;qnext=NULL; return L; 请回答下列问题: (1)说明语句S1的功能; (2)说明语句组S2的功能; (3)设链表表示的线性表为(a1,a2, ,an),写出算法执行后的返回值所表示的线性表。32假设两个队列共享一个循环向量空间(参见右下图), 其类型Queue2定义如下: typedef struct DateType dataMaxSize; int front2,rear2; Queue2;对于i=0或1,fronti和reari分别为第i个队列
10、的头指针和尾指针。请对以下算法填空,实现第i个队列的入队操作。 int EnQueue (Queue2*Q,int i,DateType x) /若第 i个队列不满,则元素x入队列,并返回1;否则返回0 if(i1)return 0; if(Qreari=Qfront return0; Qdata =x; Qreari= ; return1;33已知二叉树的存储结构为二叉链表,阅读下面算法。 typedef struct node DateType data; Struct node * next; ListNode; typedef ListNode * LinkList ; LinkLis
11、t Leafhead=NULL; Void Inorder (BinTree T) LinkList s; If(T) Inorder(Tlchild); If (!Tlchild)&(!Trchild) s=(ListNode*)malloc(sizeof(ListNode); sdata=Tdata; snext=Leafhead; Leafhead=s; Inorder(Trchild); 对于如下所示的二叉树 (1)画出执行上述算法后所建立的结构; (2)说明该算法的功能。五、算法设计题(本题共10分)34阅读下列函数arrange() int arrange(int a,int 1,
12、int h,int x) /1和h分别为数据区的下界和上界 int i,j,t; i=1;j=h; while(ij) while(i=x)j-; while(i=x)i+; if(ij) t=aj;aj=ai;ai=t; if(ainext s2=s2next s2(或s2!=NULL或s2&!s1) s1(或s1!=NULL或s1&!s2) return 031.(1)查询链表的尾结点 (2)将第一个结点链接到链表的尾部,作为新的尾结点 (3)返回的线性表为(a2,a3,an,a1)32. (i1)%2(或1i) Qreari (Qreari)%Maxsize33.(1)LeafheadF
13、HGD (2)中序遍历二叉树,按遍历序列中叶子结点数据域的值构建一个以Leafhead为头指针的逆序单链表(或按二叉树中叶子结点数据自右至左链接成一个链表)。五、算法设计题(本题共10分) 34(1)该函数的功能是:调整整数数组a中的元素并返回分界值i,使所有x的元素均落在a1.i上,使所有x的元素均落在ai1.h上。 (2)int f(int b,int n) 或 int f(int b,int n) int p,q; int p,q; p=arrange(b,0,n1,0); p=arrange(b,0,n1,1); q= arrange(b,p+1,n1,1); q= arrange(b
14、,0,p,0); return qp; return pq;2003.1数据结构试题 一、单项选择题(本大题共15小题,每小题2分,共30分。在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内) 1.下面程序段的时间复杂度是( D ) for(i=0;i<n;i+) for(j=1;j<m;j+) Aij=0; A.O(n) B.O(m+n+1) C.O(m+n) D.O(m*n) 2.在单链表中,指针p指向元素为x的结点,实现“删除x的后继”的语句是( B ) A.p=p->next; B.p->next=p->next->ne
15、xt;C.p->next=p; D.p=p->next->next; 3.在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若p->next->next= head,则( D ) A.p指向头结点 B.p指向尾结点 C.*p的直接后继是头结点 D.*P的直接后继是尾结点4.判定“带头结点的链队列为空”的条件是( C ) A.Q.front=NULL B.Q.rear=NULL C.Q.front=Q.rear D.Q.front!=Q.rear5.设有两个串T和P,求P在T中首次出现的位置的串运算称作( D ) A.联接 B.求子串 C.字符定
16、位 D.子串定位6.广义表A=(a,(b),(),(c,d,e)的长度为( A ) A.4 B.5 C.6 D.7 7.一棵含18个结点的二叉树的高度至少为( C ) A.3 B.4 C.5 D.6 8.已知二叉树的先序序列为ABDECF,中序序列为DBEAFC,则后序序列为( D ) A.DEBAFC B.DEFBCA C.DEBCFA D.DEBFCA 9.无向图中一个顶点的度是指图中( B ) A.通过该顶点的简单路径数 B.与该顶点相邻接的顶点数 C.通过该顶点的回路数 D.与该顶点连通的顶点数 10.已知一个图如下所示,从顶点a出发进行广度优先遍历可能得到的序列为( C ) A.a
17、c e f b d B.a c b d f e C.a c b d e f D.a c d b f e 11.在下列排序方法中,平均时间性能为O(nlogn)且空间性能最好的是( B ) A.快速排序 B.堆排序 C.归并排序 D.基数排序 12.已知一组关键字为25,48,36,72,79,82,23,40,16,35,其中每相邻两个为有序子序列。对这些子序列进行一趟两两归并的结果是( A ) A.25,36,48,72,23,40,79,82,16,35 B.25,36,48,72,16,23,40,79,82,35 C.25,36,48,72,16,23,35,40,79,82 D.16
18、,23,25,35,36,40,48,72,79,82 13.设顺序存储的线性表共有123个元素,按分块查找的要求等分成3块。若对索引表采用顺序查找来确定块,并在确定的块中进行顺序查找,则在查找概率相等的情况下,分块查找成功时的平均查找长度为( B ) A.21 B.23 C.41 D.62 14.索引非顺序文件的特点是( A ) A.主文件无序,索引表有序 B.主文件有序,索引表无序 C.主文件有序,索引表有序 D.主文件无序,索引表无序 15.倒排文件的主要优点是( C ) A.便于进行插入和删除运算 B.便于进行文件的恢复 C.便于进行多关键字查询 D.节省存储空间 二、填空题(本大题共
19、10小题,每小题2分,若有两个空格,每个空格1分,共20分) 16.抽象数据类型的特点是将_数据_和_运算_封装在一起,从而现实信息隐藏。 17.从顺序表中删除一个元素时,表中所有在被删元素之后的元素均需_前移_一个位置。 18.在队列中,允许进行插入操作的一端称为_队尾_,允许进行删除操作的一端称为_队头_。 19.如图两个栈共享一个向量空间,top1和top2分别为指向两个栈顶元素的指针,则“栈满” 的判定条件是_top1=top2-1_。 20.设S1="good",S2=" ",S3="book",则S1,S2和S3依次联接后
20、的结果是_ good book_。 21.假设三维数组A1098按行优先顺序存储,若每个元素占3个存储单元,且首地址为100,则元素A987的存储地址是_2257_。 22.已知在一棵含有n个结点的树中,只有度为k的分支结点和度为0的叶子结点,则该树中含有的叶子结点的数目为_((n-1)/k)*(k-1)+1_或 n - (n-1)/k_。 23.能够成功完全拓扑排序的图一定是一个_有向无环图_。 24.如果在排序前,关键字序列已接近正序或逆序,则在堆排序和快速排序两者之中,选用_堆排序_较为适当。 25.假设哈希表的表长为m,哈希函数为H(key),若用线性探查法解决冲突,则探查地址序列的形
21、式表达为_hi=(H(key)+I)/m_。 三、解答题(本大题共4小题,每小题5分,共20分) 26.假设通信电文使用的字符集为a,b,c,d,e,f,名字符在电文中出现的频度分别为:34,5,12,23,8,18,试为这6个字符设计哈夫曼编码。请先画出你所构造的哈夫曼树(要求树中左孩子结点的权值小于右孩子结点的权值),然后分别写出每个字符对应的编码。27.已知一个图如下所示,其顶点按a、b、c、d、e、f顺序存放在邻接表的顶点表中,请画出该图的邻接表,使得按此邻接表进行深度优先遍历时得到的顶点序列为acbefd,进行广度优先遍历时得到的顶点序列为acbdfe。答案:28.已知两个45的稀疏
22、矩阵的三元组表分别如下: 0 1 4 16 0 1 1 32 1 2 2 18 1 2 2 22 2 3 4 25 2 2 5 69 3 4 2 28 3 3 4 25 4 4 2 51 请画出这两个稀疏矩阵之和的三元组表。 解: 29.从空树起,依次插入关键字40,8,90,15,62,95,12,23,56,32,构造一棵二叉排序树。 (1)画出该二叉排序树 (2)画出删去该树中元素值为90的结点之后的二叉排序树。四、算法阅读题(本大题共4小题,每小题5分,共20分) 30.如图所示,利用同一循环向量空间实现两个队列,其类型Queue2定义如下: typedef struct DataTy
23、pe dataMaxSize; int front2,length2; Queue2; 对于i=0或1,fronti和lengthi分别为第i个队列的头指针和长度域。请在空缺处填入合适的内容,实现第i个循环队列的入队操作。 int EnQueue(Queue2*Q,int i,DataType x) /若第i个队列不满,则元素x入队列,并返回1,否则返回0if(i<0|i>1)return 0; if( (1) ) return 0; Q->data (2) =x; Q->length (3) +; return 1;解: (1) (Q->fronti+Q->
24、;lengthi%Maxsize=Q->front(i+1)%2 (2) (Q->fronti+->lengthi%Maxsize (3) I 31.某二叉树的线索链表存储结构如图(b)所示,其中p为指向根结点的指针,图(a)为结点结构。阅读下列算法,并回答问题:(1)写出执行函数调用f(p)的输出结果; (2)简述函数f的功能。 void f(BinThrTree t) while(t) printf(t->data); if(t->lchild) t=t->lchild; else t=t->rchild;答案(1)ABDFCEGH (2) 先根遍
25、历32.下列函数FindCycle(G,i)的功能是,对一个采用邻接表作存储结构的有向图G,利用深度优先搜索策略寻找一条经过顶点vi的简单回路。数组cycle_path用于保存搜索过程中形成的回路,cycle_pathk=j(j0)表示在回路中顶点vk的下一个顶点是vj。请在空缺处填入合适的内容,使其成为一个完整的算法。 vertex firstedge 已知邻接表的顶点表结点结构为: adjvex next 边表结点EdgeNode结构为: int cycle_pathMaxNum; int FindCycle(ALGraph*G,int i) /若回路存在,则返回1,否则返回0 int j
26、; for(j=0;j<G->n;j+)cycle_pathj=-1; return DFSPath(G,i,i); int DFSPath(ALGraph*G,int j,int i) EdgeNode *p; int cycled=0; for(p=G->adjlistj.firstedge;p&!cycled;p=p->next) cycle_pathj=p->adjvex; if( (1 ) )cycled=1;/已找到回路 else if(cycle_pathp->adjvex=-1)cycled= (2) ; return (3) (1) (2)
27、 (3) 32题答案: (1)p->adjvex=i (2)DFSpath(G,p->adjvex,i) (3)cycled33.阅读下列函数algo,并回答问题。 (1)假设整型数组A1.8中的元素依次为(3,8,9,1,7,4,2,6)。执行函数调用algo(A,8)时,外层while的循环体执行多少次?函数的返回值是多少? (2)简述函数algo(L,n)的功能。 int algo(int L,intn) int i=0,j,s=1,t=n; while (i!=(n+1)/2) int x=Ls; i=s;j=t; while(i<j) while(i<j &
28、Lj>=x)j-; Li=Lj; while(i<j & Li<=x)i+; Lj=Li; Li=x; if(i<(n+1)/2)s=i+1; else t=i-1; if(i=0)return 0; else return Li; (1) (2) (3) 33题答案: (1)外循环执行4次,函数返回值为3。 (2)将A1至A8中不小于A1的元素进行递增排序,如调用algo(A,8)时最终排序结果为2 1 3 4 6 7 8 9 五、算法设计题(本大题共10分) 34.假设以带头结点的单循环链表作非递减有序线性表的存储结构。请设计一个时间复杂度为O(n)的算法,删除表中
29、所有数值相同的多余元素,并释放结点空间。例如: (7,10,10,21,30,42,42,42,51,70) 经算法操作后变为 (7,10,21,30,42,51,70) 34题答案: Exam4(Linklist,L) listnode *p,*q; p=L->next; while(p!=L)q=p->next; while(q&q->data=p->data) p->next=q->next; free(q); q=p->next; p->next;2003年10月全国数据结构试题 (2006-7-25 2:07:00) 1.计算机识别、存
30、储和加工处理的对象被统称为(b)A.数据B.数据元素C.数据结构D.数据类型2.在具有n个结点的有序单链表中插入一个新结点并使链表仍然有序的时间复杂度是(b)A.O(1)B.O(n)C.O(nlogn)D.O(n2)3.队和栈的主要区别是(d)A.逻辑结构不同B.存储结构不同C.所包含的运算个数不同D.限定插入和删除的位置不同4.链栈与顺序栈相比,比较明显的优点是(d)A.插入操作更加方便B.删除操作更加方便C.不会出现下溢的情况D.不会出现上溢的情况5.采用两类不同存储结构的字符串可分别简称为(b)A.主串和子串B.顺序串和链串C.目标串和模式串D.变量串和常量串6.在目标串T0.n-1=x
31、wxxyxy中,对模式串P0.m-1=xy进行子串定位操作的结果是(c)A.0B.2C.3D.57.已知广义表的表头为a,表尾为(b,c),则此广义表为(b)A.(a,(b,c)B.(a,b,c)C.(a),b,c)D.(a,b,c)8.二维数组A按行优先顺序存储,其中每个元素占1个存储单元。若A11的存储地址为420,A33的存储地址为446,则A55的存储地址为(c)A.470B.471C.472D.4739.二叉树中第5层上的结点个数最多为(d)A.8B.15C.16D.3210.下列编码中属前缀码的是(a)A.1,01,000,001B.1,01,011,010C.0,10,110,1
32、1D.0,1,00,1111.如果某图的邻接矩阵是对角线元素均为零的上三角矩阵,则此图是(d)A.有向完全图B.连通图C.强连通图D.有向无环图12.对n个关键字的序列进行快速排序,平均情况下的空间复杂度为(d)A.O(1)B.O(logn)C.O(n)D.O(nlogn)13.对表长为n的顺序表进行顺序查找,在查找概率相等的情况下,查找成功的平均查找长度为(n/2)A.B.C.D.n14.对于哈希函数H(key)=key%13,被称为同义词的关键字是(d)A.35和41B.23和39C.15和44D.25和5115.稠密索引是在索引表中()A.为每个记录建立一个索引项B.为每个页块建立一个索
33、引项C.为每组记录建立一个索引项D.为每个字段建立一个索引项二、填空题(每小题2分,若有两个空格,每个空格1分,共20分)16.当问题的规模n趋向无穷大时,算法执行时间T(n)的数量级被称为算法的_(_时间复杂度_)_。17.在链表的结点中,数据元素所占的存储量和整个结点所占的存储量之比称作_(存储密度)_。datenext18.已知链栈的结点结构为栈顶指针为top,则实现将指针p所指结点插入栈顶的语句依次为_和_。19.空串的长度是_0_;空格串的长度是_(空格的数目_)_。20.假设一个6阶的下三角矩阵B按列优先顺序压缩存储在一维数组A中,其中A0存储矩阵的第一个元素b11,则A14存储的元素是_b63_。21.在一棵度为3的树中,度为2的结点个数是1,度为0的结点个数是6,则度为3的结点个