数据结构习题习题一绪论.1.1 单项选择题1. 数据结构是一门研究非数值计算的程序设计问题中计算机的①以及它们之间的②和运算等的学科。
①A.操作对象B.计算方法C.逻辑存储D.数据映象②A.结构B.关系C.运算D.算法2. 数据结构被形式地定义为(K,R),其中K是①的有限集合,R是K上的②有限集合。
①A.算法B.数据元素C.数据操作D.逻辑结构②A.操作B.映象C.存储D.关系3. 在数据结构中,从逻辑上可以把数据结构分成①。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构4. 线性表的顺序存储结构是一种①的存储结构,线性表的链式存储结构是一种②的存储结构。
A.随机存取B.顺序存取C.索引存取D.散列存取5. 算法分析的目的是①,算法分析的两个主要方面是②。
① A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系C. 分析算法的效率以求改进D. 分析算法的易懂性和文档性② A. 空间复杂性和时间复杂性 B. 正确性和简明性C. 可读性和文档性D. 数据复杂性和程序复杂性6. 计算机算法指的是①,它必具备输入、输出和②等五个特性。
①A. 计算方法 B. 排序方法C. 解决问题的有限运算序列D. 调度方法②A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性C. 确定性、有穷性和稳定性D. 易读性、稳定性和安全性7. 线性表的逻辑顺序与存储顺序总是一致的,这种说法①。
A. 正确B. 不正确8. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址①。
A. 必须是连续的B. 部分地址必须是连续的C. 一定是不连续的D. 连续或不连续都可以9. 在以下的叙述中,正确的是①。
A.线性表的线性存储结构优于链表存储结构B.二维数组是其数据元素为线性表的线性表C.栈的操作方式是先进先出D.队列的操作方式是先进后出10. 每种数据结构都具备三个基本运算:插入、删除和查找,这种说法①。
A. 正确B. 不正确1.2 填空题(将正确的答案填在相应的空中)1. 数据逻辑结构包括①、②和③三种类型,树形结构和图形结构合称为④。
集合、线性结构、树型结构非线性结构2. 在线性结构中,第一个结点①前驱结点,其余每个结点有且只有②个前驱结点;最后一个结点③后续结点,其余每个结点有且只有④个后续结点。
无、一、无、一3. 在树形结构中,树根结点没有①结点,其余每个结点有且只有②个前驱结点,叶子结点没有③结点,其余每个结点的后续结点可以④。
前驱、一、后继、零个至多个4. 在图形结构中,每个结点的前驱结点数和后续结点数可以①。
任意多个5. 线性结构中元素之间存在①关系,树形结构中元素之间存在②关系,图形结构中元素之间存在③关系。
一对一、一对多、多对多6. 算法的五个重要特性是7. 下面程序段的时间复杂度是①。
for (i=0;i<n;i++)for (j=0;j<m;j++)A[i][j]=0;O(m*n)8. 下面程序段的时间复杂度是①。
i=s=0;while (s<n){ i++; /*i=i+1*/s+=i; /*s=s+1*/}O( )9. 下面程序段的时间复杂度是①。
s=0;for (i=0;i<n;i++)for (j=0;j<n;j++)s+=B[i][j];sum=s;O(n2)10. 下面程序段的时间复杂度是①。
i=1;while (i<=n)i=i*3;log3n习题二线性表一、选择题:1、在表长为n的顺序表上做插入运算,平均要移动的结点数为()。
A.n B.n/2 C.n/3 D.n/42、在一个单链表中,若P所指结点不是最后结点,在P之后插入S所指结点,则执行()A.S->link=P->link;P->link=SB.P->link=S->link;S->link=P;C.P->link=P;P->link=S;D.P->link=S;S->link=P;3、在已知头指针的单链表中,要在其尾部插入一新结点,其算法所需的时间复杂度为()A.O(1)B.O(log2n)C.O(n)D.O(n2)4、对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为()A.顺序表B.用头指针表示的单循环链表C.用尾指针表示的单循环链表D.单链表5、线性表是()A.一个有限序列,可以为空B.一个有限序列,不能为空C.一个无限序列,可以为空D.一个无限序列,不能为空6、在n个结点的双链表的某个结点前插入一个结点的时间复杂度是()A.O(n)B.O(1)C.O(log2n)D.O(n2)7、线性表采用链式存储时,结点的地址()A.必须是连续的B.必须是不连续的C.连续与否均可D.必须有相等的间隔8、在单链表中,增加头结点的目的是()A.使单链表至少有一结点B.标志表中首结点位置C.方便运算的实现D.说明单链表是线性表的链式存储实现9、带头结点的单链表head为空的判定条件是()A.head = NULL;B.head - > link = NULL;C.head - > link = head;D.head ! = NULL;10、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度为()A.O(1)B.O(n)C.O(n2)D.O(log2n)11、下列有关线性表的叙述中,正确的是()A.线性表中的元素之间是线性关系B.线性表中至少有一个元素C.线性表中任何一个元素有且仅有一个直接前趋D.线性表中任何一个元素有且仅有一个直接后继12、在单链表中,存储每个结点需有两个域,一个是数据域,另一个是指针域,它指向该结点的()A.直接前趋B.直接后继C.开始结点D.终端结点13、将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是()。
A.n B.2n-1 C.2n D.n-114、链表不具有的特点是()。
A.随机访问B.不必事先估计存储空间C.插入删除时不需移动元素D.所需的空间与线性表成正比15、在一个单链表中,已知q所指结点是p所指结点的直接前趋,若在p,q之间插入s 结点,则执行的操作是()。
A.s->link=p->link;p->link=s; B.q->link=s;s->link=p;C.p->link=s->link;s->link=p; D.p->link=s;s->link=q;16、链表具有的特点是()。
A.可随机访问任一元素B.插入、删除需要移动元素C.不必事先估计存储空间D.存储空间是静态分配的17、一个顺序表一旦说明,其中可用空间大小()A.已固定B.可以改变C.不能固定D.动态变化18、若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用()存储方式最节省时间。
A.顺序表B.单链表C.双向链表D.单循环链表19、两个指针P和Q,分别指向单链表的两个元素,P所指元素是Q所指元素的前驱的条件是()。
A.P->link==Q B.Q->link==PC.P==Q D.P->link==Q->link20、下面关于线性表的叙述中,错误的是()。
A.线性表采用顺序存储,必须占用一片连续的存储单元B.线性表采用顺序存储,便于进行插入和删除操作C.线性表采用链接存储,不必占用一片连续的存储单元D.线性表采用链接存储,便于进行插入和删除操作21、在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()。
A.访问第i个结点(1≤i≤n)和求第i个结点的直接前趋(2≤i≤n)B.在第i个结点后插入一个新结点(1≤i≤n)C.删除第i个结点(1≤i≤n)D.将n个结点从小到大排序22、在一个单链表中,若删除p指向结点的后继结点,则执行的操作为()。
A.q=p->link;p->link=p->link->link;free(q);B.p=p->link;q=p->link;p=q->link;free(q);C.q=p->link->link;p=p->link;free(q);D.p=p->link->link;q=p->link;free(q);二、算法设计题:1.写一算法实现:在带头结点单链表list中第i个元素之前插入元素值x。
注:单链表的存储结构见课本40页顶部void insertList_link(LinkList list,int i,DataType x){ int j=0;LinkList p=list;while (p->link && j<i-1){ p=p->link; j++; }LinkList s=(LinkList)malloc(sizeof(struct Node));s->info=x;s->link=p->link;p->link=s;}2.试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1, a2,…. a n)逆置为(a n, a n-1,…., a1)。
注:顺序表的存储结构见课本32页void reverse_list(PSeqList list){DataType e;for (int i=0,j=list->n-1;i<j;i++,j--){e=list->element[i];list->element[i]=list->element[j];list->element[j]=e;}}习题三栈和队列一、选择题:1、循环队列是空队列的条件是()A.Q - > r = = Q - > f B.(Q - > r + 1)%maxsize = = Q - > fC.Q - > r = = 0 D.Q - > f = = 02、链栈与顺序栈相比,比较明显的优点是()A.插入操作更加方便B.删除操作更加方便C.不会出现下溢的情况D.不会出现上溢的情况3、若一个栈的输入序列是1,2,3,……,n,输出序列的第一个元素是n,则第i个输出元素是()A.n - i B.n – i + 1 C.i D.不确定4、栈与一般线性表的区别主要在()A.元素个数B.元素类型C.逻辑结构D.插入、删除元素的位置5、一个链栈的栈顶指针是top,则执行出栈操作时(栈非空),用x保存被删除结点,则执行()A.x = top; top = top - >link;B.x = top - >info;C.top = top - > link; x = top - > info;D.x = top - > info; top = top - >link;6、一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是()。