数据结构(C语言篇)―习题与解析(修订版)清华大学出版社一、绪论选择题1.数据结构是一门研究非数值计算的程序设计问题计算机的以及它们之间的和运算等的学科。1A.数据元素B.计算方法C.逻辑存储D.数据映像2A.结构B.关系C.运算D.算法2.数据结构被形式地定义为(K,R),其中K是的有限集,R是K上的有限集。1A.算法B.数据元素C.数据操作D.逻辑结构2A.操作B.映像C.存储D.关系3.在数据结构中,从逻辑上可以把数据结构分成。A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构4.线性结构的顺序存储结构是一种A的存储结构,线性表的链式存储结构是一种B的存储结构。A.随机存取B.顺序存取C.索引存取D.散列存取5.算法分析的目的是C,算法分析的两个主要方面是AB。1A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性2A.空间复杂度和时间复杂度B.正确性和简单性C.可读性和文档性D.数据复杂性和程序复杂性6.计算机算法指的是C,它必须具备输入、输出和B等5个特性。1A.计算方法B.排序方法C.解决问题的有限运算序列D.调度方法2A.可执行性、可移植性和可扩充性B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性7.线性表的逻辑顺序与存储顺序总是一致的,这种说法B。A.正确B.不正确8线性表若采用链式存储结构时,要求内存中可用存储单元的地址D。A.必须连续的B.部分地址必须连续的C.一定是不续的D连续不连续都可以9.以下的叙述中,正确的是B。A.线性表的存储结构优于链式存储结构B.二维数组是其数据元素为线性表的线性表C.栈的操作方式是先进后出D.队列的操作方式是先进先出10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法B。A.正确B.不正确填空题1.数据逻辑结构包括三种类型线性结构、树形结构和图形结构,树形结构和图形结构合称为非线性结构。2.在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点没有后续结点,其余每个结点有且只有1个后续结点。3.在树形结构中,树根结点没有前驱结点,其余每个结点有且只有1个前驱结点;叶子结点没有后续结点,其余每个结点的后续可以任意多个。4.在图形结构中,每个结点的前驱结点数和后续结点数可以任意多个。5.线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。6.算法的五个重要特性是有穷性、确定性、可行性、输入、输出。7.下面程序段的时间复杂度是O(m*n)。for(i=0;in;i++)for(j=0;jm;j++)A[i][j]=0;8.下面程序段的时间复杂度是O(n)。i=s=0;while(sn){i++;/*i=i+1*/s+=i;/*s=s+i*/}9.下面程序段的时间复杂度是O(n2)。s=0;for(i=0;in;i++)for(j=0;jn;j++)s+=B[i][j];sum=s;10.下面程序段的时间复杂度是O(log3n)。i=1;while(i=n)i=i*3;二、线性表单项选择题1.一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是B。A.110B.108C.100D.1202.一个栈的入栈序列是a、b、c、d、e,则栈的不可能输出序列是C。A.edcbaB.decbaC.dceabD.abcde3.若一个栈的入栈序列是1、2、3、…、n,其输出序列为p1、p2、p3、…、pn,若p1=n,则pi为C。A.iB.n=iC.n-i+1D.不确定4.栈结构通常采用的两种存储结构是A。A.线性存储结构和链表存储结构B.散列方式和索引方式C.链表存储结构和数组D.线性存储结构和非线性存储结构5.判断一个栈ST(最多元素为m)为空的条件是B。A.ST-top!=0B.ST-top==0C.ST-top!=mD.ST-top==m6.判断一个栈ST(最多元素为m)为满栈的条件是D。A.ST-top!=0B.ST-top==0C.ST-top!=m-1D.ST-top==m-17.栈的特点是B,队列的特点是A。A.先进先出,后进后出B.先进后出,后进先出8.一个队列的入队序列是1、2、3、4,则队列输出序列是B。A.4、3、2、1B.1、2、3、4C.1、4、3、2D.3、2、4、19.判断一个队列QU(最多元素为m)为空的条件是C。A.QU-rear-QU-front==mB.QU-rear-QU-front-1==mC.QU-front==QU-rearD.QU-front-QU-rear+110.判断一个队列QU(最多元素为m)为满队列的条件是A。A.QU-rear-QU-front==mB.QU-rear-QU-front-1==mC.QU-front==QU-rearD.QU-front-QU-rear+111.判断一个循环队列QU(最多元素为m)为空的条件是。A.QU-front==QU-rearB.QU-front!=QU-rearC.QU-front==(QU-rear+1)%mD.QU-front!=(QU-rear+1)%m12.判断一个循环队列QU(最多元素为m)为满队列的条件是。A.QU-front==QU-rearB.QU-front!=QU-rearC.QU-front==(QU-rear+1)%mD.QU-front!=(QU-rear+1)%m13循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是。A.(rear-front+m)%mB.rear-front+1C.rear-front-1D.rear-front14.栈和队列的共同点是。A.都是先进后出B.都是先进先出C.只允许在端点处插入、删除元素D.没有共同点填空题1.向量、栈和队列都是结构,可以在向量的位置插入和删除元素;对于栈只能在插入和删除元素;对于队列只能在插入元素和删除元素。2.在一个长度为n的向量中的第i个元素(1≤i≤n)之前插入一个元素时,需向后移动个元素。3.在一个长度为n的向量中的删除第i个元素(1≤i≤n)时,需要向前移动个元素。4.向栈中压入元素的操作是。5.对栈进行退栈时的操作是。6.在一个循环队列中,队首指针指向队首元素的。7.从循环队列中删除一个元素时,其操作是。8.在具有n个单元的循环队列中,队满时共有个元素的。9.一个栈的输入序列是12345,则栈的输出序列43512是。10.一个栈的输入序列是12345,则栈的输出序列12345是。三、链表单项选择题1.不带头结点的单链表head为空的判定条件是。A.head==NULLB.head-nxt==NULLC.head-next==headD.head!=NULL2.带头结点的单链表head为空的判定条件是。A.head==NULLB.head-nxt==NULLC.head-next==headD.head!=NULL3.非空的循环单链表head的尾结点(由p所指向)满足。A.p-next==NULLB.p==NULLC.p-next==headD.p==head4.在循环双链表的p所指结点之后插入s所指结点的操作是。A.p-right=s;s-left=p;p-right-left=s;s-right=p-right;B.p-right=s;p-right-left=s;s-left=p;s-right=p-right;C.s-left=p;s-right=p-right;p-right=s;p-right-left=s;D.s-left=p;s-right=p-right;p-right-left=s;p-right=s;5.在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行。A.s-next=p-next;p-next=s;B.p-next=s-next;s-next=p;C.q-next=s;s-next=p;D.p-next=s;s-next=q;6.在一个单链表中,已知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;7.在一个单链表中,若删除p所指结点的后续结点,则执行。A.p-next=p-next-next;B.p=p-next;p-next=p-next-next;C.p-next=p-next;D.p=p-next-next;9.从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较个结点。A.nB.n/2C.(n-1)/2D.(n+1)/210.在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是。A.O(1)B.O(n)C.O(n2)D.O(nlog2n)11.给定有n个元素的向量,建立一个有序单链表的时间复杂度是。A.O(1)B.O(n)C.O(n2)D.O(nlog2n)12.向一个栈顶指针为HS的链栈中插入s所指结点,则执行。A.HS-next=s;B.s-next=HS-next;HS-next=s;C.s-next=HS;HS=s;D.s-next=HS;HS=HS-next;13.从一个栈顶指针为HS的链栈中删除一个结点,用x保存被删除结点的值,则执行。A.x=HS;HS=HS-next;B.x=HS-data;C.HS=HS-next;x=HS-data;D.x=HS-data;HS=HS-next;14.在一个链队中,假设f和r分别为队首和队尾指针,插入s所指结点,则执行。A.f-next=s;f=s;B.r-next=s;r=s;C.s-next=r;r=s;D.s-next=f;f=s;15.在一个链队中,假设f和r分别为队首和队尾指针,删除一个结点,则执行。A.r=f-next;B.r=r-next;C.f=f-next;D.f=r-next;填空题1.单链表是的链接存储表示。2.可以使用表示树形结构。3.在双链表中,每个结点有两个指针域,一个指向,另一个指向。4.在一个单链表中,p所指结点之前插入s所指向结点,可执行如下操作:(1)s-next=;(2)p-next=s;(3)t=p-data;(4)p-data=;(5)s-data=;5.在一单链表中,删除p所指结点时,应执行以下操作:(1)q=p-next;(2)p-data=p-next-data;(3)p-next=;(4)free(q);6.带头结点的单链表head为空的条件是。7.在一个单链表中,p所指结点之后插入s所指向结点,应执行s-next=和p-next=的操作。8.非空的循环单链表head的尾结点(由p所指向),满足。9.在栈顶指针为HS的链栈中,判定栈空的条件是。10.在栈顶指针为HS的链栈中,计算该链栈中结点个数的函数是。11.在HQ的链队中,判定只有一个结点的条件是。12.在HQ的链队中,计算该栈链中结点个数的函数是。四、串单项选择题1.空串与空格串是相同的,这种说法。A.正确B.不正确2.串是一种特殊的线性表,其特殊性体现在。A.可以顺序存储B.数据元素是一个字符C.可以链接存储D.数据元素可以是多个字符3.设两个字符串p和q,求q在p中首次出现的位置的运算称作。A.连接B.模式匹配C.求子串D.求串长4.设串s1=’ABCDEFG’,s2=’