多做题,多反思、多总结.
1、绪论
1.1 在数据结构中,从逻辑上可以把数据结构分成()。
A.动态结构和静态结构 B.紧凑结构和非紧凑结构 c.线性结构和非线性结构 D.内部结构和外部结构
答案:C
1.2 与数据元素本身的形式、内容、相对位置、个数无关的是数据的()
A.存储结构 B.存储实现 C.逻辑结构 D.运算实现
答案:C
1.3 通常要求同—逻辑结构中的所有数据元素具有相同的特性,这意味着()
A.数据具有同一特点 B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致 C.每个数据元素都—样 D.数据元素所包含的数据项的个数要相等 答案:B
1.4 以下说法正确的是()。
A.数据元素是数据的最小单位 B.数据项是数据的基本单位 C.数据结构是带有结构的各数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 答案:D
1.5 算法的时间复杂度取决于()。
A.问题的规模 B.待处理数据的初态 c.计算机的配置 D. A和B
答案:D
1.6 以下数据结构中,()是非线性数据结构。
A.树 B.字符串 C.队列 D.栈 答案:A
2、线性表
2.1 顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。
A. 110 B.108 C. 100 D. 120 答案:B
2.2 在含n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()
A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n ) B.在第i个结点后插人一个新结点( 1≤i≤n ) C.删除第i个结点( 1≤i≤n) D…将n个结点从小到大排序 答案:A
2.3 在一个有127个元素的顺序表中插人一个新元素并保持原来顺序不变,平均要移动的元素个数为().
A. 8 B.63.5 C 63 D.7 答案:B
2.4 链接存储的存储结构所占存储空间()。
A.分为两部分,一部分存放结点值,另一部分存放表示结点间关系的指针 B.只有一部分,存放结点值 C. 只有一部分,存储表示结点间关系的指针 D.分两部分,一部分存放结点值,另一部分存放结点所占单元数 答案:A
2.5 线性表若采用链式存储结构,要求内存中可用存储单元的地址()
A.必须是连续的 B.部分地址必须是连续的 C.一定是不连续的 D.连续或不连续都可以 答案:D
2.6 线性表L在()情况下适用于使用链式结构实现。
A.需经常修改L中的结点值 B.需不断对L进行删除、插入 C.L中含有大量的结点 D.L中结点结构复杂 答案:B
2.7 单链表的存储密度()。
A.大于1 B.等于1 c.小于1 D.不能确定 答案:C
2.8 将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是()
A. n B. 2n -1 C. 2n D. n- 1 答案:A
2.9 在一个长度为n 的顺序表中,在第﹔个元素( 1≤i≤n+1)之前插入一个新元素时需向后移动()个元素。
A. n- i B. n-i+ 1 c. n-i- 1 D. i 答案:B
2.10 线性表L=(a1,a2,…",a),下列陈述正确的是()
A.每个元素都有一个直接前驱和一个直接后继 B.线性表中至少有一个元素 c.表中诸元素的排列必须是由小到大或由大到小 D.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直 接后继 答案:D
2.11 创建一个包括n个结点的有序单链表的时间复杂度是().
A. O(1) B.O(n) c. O(n^2) D. O(nlogn) 答案:C
2.12 以下陈述错误的是()
A.求表长、定位这两种运算在采用顺序存储结构时实现的效率不比采用链式存储 结构时实现的效率低 B.顺序存储的线性表可以随机存取 c.由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活 D.线性表的链式存储结构优于顺序存储结构 答案:D
2.13 在单链表中,要将s所指结点插入到p所指结点之后,其语句应为( )
A. s->next =p+l; p->next= s; B.(*p).next= s; (*s).next=(*p).next; C. s->next = p->next; p->next = s->next; D. s->next =p->next; p->next= s; 答案:D
2.14 在双向链表存储结构中,删除p所指结点时修改指针的操作为( )
A. p->next->prior= p->prior;p->pri or->next= p->next; B. p->next = p->next->next; p->next->prior= p; c. p->prior->next= p; p->prior=p->prior->prior; D. p->prior=p->next->next; p->next = p->prior->prior; 答案:A
2.15 在双向循环链表中,在p指针所指的结点后插人q所指向的新结点,其修改指针的操作是( )。
A. p->next = q; q->prior = p; p->next->prior = q; q->next =q; B. p->next= q; p->next->prior =q; q->prior=p; q->next= p->next; C. q->prior = p; q->next= p->next; p->next->prior = q; p->next =q; D. q->prior = p; q->next= p->next; p->next = q; p->next->prior =q; 答案:C
3、栈和队列
3.1 若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现()的情况。
A. 5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1 答案:C
3.2 若已知一个栈的人栈序列是1,2,3,…,n,其输出序列为p1,P,P3,…,pn,若p=n,则p;为()
A. i B. n-i C. n-i+1 D.不确定 答案:C
3.3 数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。
A. r-f B. (n+f-r)%n C. n+r-f D.( n+r-f)%n 答案:D
3.4 链式栈结点为( data,link ),top指向栈顶,若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()
A. x=top->data;top=top->link; . B.top=top->link;x=top->link; C. x=top;top=top->link ; D. x=top->link; 答案:A
3.5 设有一个递归算法如下:
int fact (int n) 83 { //n大于等于0 if (n<=0) return l; else return n*fact (n-1) ;}
则计算fact( n)需要调用该函数的次数为()。 A. n+1 B. n-1 C. n D. n+2 答案:A
3.6 栈在()中有所应用
A.递归调用 B.函数调用 c.表达式求值 D.前三个选项都有 答案:D
3.7 为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。主机将要输出的数据依次写人该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是( )。
A.队列 B.栈 C.线性表 D.有序表 答案:A
3.8 设栈S和队列Q的初始状态为空,元素el、e2、e3、e4、e5和e6依次进人栈S,一个元素出栈后即进人Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是().
A.2e B.3 C.4 D.6 答案:B
3.9 若一个栈以向量 V[1…n]存储,初始栈顶指针 top设为n+1,则元素x进栈的正确操作是()
A. top++; V[top]=x; B. V[top]=x; top++; C. top–; V[top]=x; D. V[top]x; top–; 答案:C
3.10 设计一个判别表达式中左、右括号是否配对出现的算法,采用()数据结构最佳。
A.线性表的顺序存储结构 B.队列 C.线性表的链式存储结构 D.栈 答案:D
3.11 用链接方式存储的队列,在进行删除运算时( )。
A.仅修改头指针 B.仅修改尾指针 C.头、尾指针都要修改 D.头、尾指针可能都要修改 答案:D
3.12 循环队列存储在数组A[0…m]中,则人队时的操作为( )。
A. rear=rear+1 B. rear=( rear+)%( m l) C. rear=( rear+1)%m D. rear-( rear+1)%m+1) 答案:D
3.13 最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()
A. (rear)%n==front B. rear==rot c. rear+1==ront D. ( rear-1)%n==front 答案:B
3.14 栈和队列的共同点是()。
A.都是先进先出 B.都是先进后出 c.只允许在端点处插人和删除元素 D.没有共同点 答案:C
3.15 一个递归算法必须包括()
A.递归部分 B.终止条件和递归部分 C.迭代部分 D.终止条件和迭代部分 答案:B
4、串、数组和广义表
5、树和二叉树
6、图
7、查找
8、排序
ps:额外章节理论
第一章小结
- 数据结构是一门研究非数值计算程序设计中操作对象,以及这些对象之间的关系和操作的学科。
- 数据结构包括两个方面的内容:数据的逻辑结构和存储结构。同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。
- 逻辑结构是从具体问题抽象出来的数学模型,从逻辑关系上描述数据,它与数据的存储无关。根据数据元素之间关系的不同特性,通常有四类基本逻辑结构:集合结构、线性结构、树形结构和图状结构。
- 存储结构是逻辑结构在计算机中的存储表示,有两类存储结构:顺序存储结构和链式存储结构。
- 抽象数据类型是指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象、数据对象上关系的集合,以及对数据对象的基本操作的集合。
- 算法是为了解决某类问题而规定的一个有限长的操作序列。算法具有五个特性:有穷性、确定性、可行性、输人和输出。一个算法的优劣应该从以下四方面来评价:正确性、可读性、健壮性和高效性。
- 算法分析的两个主要方面是分析算法的时间复杂度和空间复杂度,以考察算法的时间和空间效率。一般情况下,鉴于运算空间较为充足,故将算法的时间复杂度作为分析的重点。算法执行时间的数量级称为算法的渐近时间复杂度,T(n)=O(fn)),它表示随着问题规模n的增大,算法执行时间的增长率和frn)的增长率相同,简称时间复杂度。
- 学完本章后,要求掌握数据结构相关的基本概念,包括数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构等;重点掌握数据结构所含两个层次的具体含义及其相互关系;了解抽象数据类型的定义、表示与实现方法;了解算法的特性和评价标准;重点掌握算法时间复杂度的分析方法。
第二章总结
- 线性表的逻辑结构特性是指数据元素之间存在着线性关系,在计算机中表示这种关系的两类不同的存储结构是顺序存储结构(顺序表)和链式存储结构(链表)。
- 对于顺序表,元素存储的相邻位置反映出其逻辑上的线性关系,可借助数组来表示。给定数组的下标,便可以存取相应的元素,可称为随机存取结构。而对于链表,是依靠指针来反映其线性逻辑关系的,链表结点的存取都要从头指针开始,顺链而行,所以不属于随机存取结构,可称之为顺序存取结构。不同的特点使得顺序表和链表有不同的适用情况,表2.2分别从空间、时间和适用情况3方面对二者进行了比较。
- 学习完本章后,应熟练掌握顺序表和链表的查找、插人和删除算法、链表的创建算法,并能够设计出线性表应用的常用算法,比如线性表的合并等。要求能够从时间和空间复杂度的角度比较两种存储结构的不同特点及其适用场合,明确它们各自的优缺点。
第三章总结
- 栈是限定仅在表尾进行插人或删除的线性表,又称为后进先出的线性表。栈有两种存储表示,顺序表示(顺序栈)和链式表示(链栈)。栈的主要操作是进栈和出栈,对于顺序栈的进栈和出栈操作要注意判断栈满或栈空。
- 队列是一种先进先出的线性表。它只允许在表的一端进行插人,而在另—端删除元素。队列也有两种存储表示,顺序表示(循环队列)和链式表示(链队)。队列的主要操作是进队和出队,对于顺序的循环队列的进队和出队操作要注意判断队满或队空。凡是涉及队头或队尾指针的修改都要将其对MAXQSIZE求模。
- 栈和队列是在程序设计中被广泛使用的两种数据结构,其具体的应用场景都是与其表示方法和运算规则相互联系的。表3.3分别从逻辑结构、存储结构和运算规则3方面对二者进行了比较。
- 栈有一个重要应用是在程序设计语言中实现递归。递归是程序设计中最为重要的方法之一,递归程序结构清晰,形式简洁。但递归程序在执行时需要系统提供隐式的工作栈来保存调用过程中的参数、局部变量和返回地址,因此递归程序占用内存空间较多,运行效率较低。
- 学习完本章后,要求掌握栈和队列的特点,熟练掌握栈的顺序栈和链栈的进栈和出栈算法,循环队列和链队列的进队和出队算法。要求能够灵活运用栈和队列设计解决实际应用问题,掌握表达式求值算法,深刻理解递归算法执行过程中栈的状态变化过程,便于更好地使用递归算法。
|