1、习 题 一 绪 论 .1.1 单项选择题 1. 数据结构是一门研究非数值计算的程序设计问题中计算机的以及它们之间的和运算等的学科。 A操作对象 计算方法 逻辑存储 数据映象 A结构 关系 运算 算法 2. 数据结构被形式地定义为( K, R),其中 K 是的有限集合, R 是 K 上的有限集合。 A算法 数据元素 数据操作 逻辑结构 A操作 映象 存储 关系 3. 在数据结构中,从逻辑上可以把数据结构分成。 A动态结构和静态结构 紧凑结构和非紧凑结构 线性结构和非线性结构 内部结构和外部结构 4. 线性表的顺序存储结构是一种的存储结构,线性表的链式存储结构是一种的存储结构。 A随机存取 B顺序
2、存取 C索引存取 D散列存取 5. 算法分析的目的是,算法分析的两个主要方面是。 A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系 C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性 A. 空间复杂性和时间复杂性 B. 正确性和简明性 C. 可读性和文档性 D. 数据复杂性和程序复杂性 6. 计算机算法指的是,它必具备输入、输出和等五个特性。 A. 计算方法 B. 排序方法 C. 解决问题的有限运算序列 D. 调度方法 A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性 7. 线性表的逻辑顺序与存储
3、顺序总是一致的,这种说法。 A. 正确 B. 不正确 8. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址。 A. 必须是连续的 B. 部分地址必须是连续的 C. 一定是不连续的 D. 连续或不连续都可以 9. 在以下的叙述中,正确的是。 A. 线性表的线性存储结构优于链表存储结构 B. 二维数组是其数据元素为线性表的线性表 C. 栈的操作方式是先进先出 D. 队列的操作方式和先进后出 10. 每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。 A. 正确 B. 不正确 1.2 填空题(将正确的答案填在相应的空中) 1. 数据逻辑结构包括、和三种类型,树形结构和图形结构合称
4、为。 2. 在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点;最后一个结点后续结点,其余每个结点有且只有个后续结点。 3. 在树形结构中,树根结点没有结点,其余每个结点有且只有个前驱结点,叶子结点没有结点,其余每个结点的后续结点可以。 4. 在图形结构中,每个结点的前驱结点数和后续结点数可以。 5. 线性结构中元素之间存在关系,树形结构中元素之间存在关系,图形结构中元素之间存在关系。 6. 算法的五个重要特性是 _ _ _ _ _。 7. 下面程序段的时间复杂度是。 for (i=0;i top !=0 B. ST top= =0 C. ST top !=m0 D. ST to
5、p= =m0 6. 判定一个栈 ST(最多元素为 m0)为 栈满的条件是 _。 A. ST top! =0 B. ST top= =0 C. ST top! =m0 D. ST top= =m0 7. 栈的特点是 _,队列的特点是 _。 A. 先进先出 B. 先进后出 8. 一个队列的入列序列是 1, 2, 3, 4,则队列的输出序列是 _ 。 A. 4, 3, 2, 1 B. 1, 2, 3, 4 C. 1, 4, 3, 2 D. 3, 2, 4, 1 9. 判定一个队列 QU(最多元素为 m0)为空的条件是 _。 A. QU rear QU front= =m0 B. QU rear QU
6、 front-1= =m0 C. QU front= =QU rear D. QU front= =QU rear+1 10. 判定一个队列 QU(最多元素为 m0, m0+1= =Maxsize)为满队列的条件是 _。 A. (QU rear-QU front)+ Maxsize)% Maxsize = =m0 B. QU rear QU front-1= =m0 C. QU front= =QU rear D. QU front= =QU rear+1 11. 判定一个循环队列 QU(最多元素为 m0)为空的条件是 _。 A. QU front= =QU rear B. QU front!
7、 =QU rear C. QU front= =( QU rear+1) %m0 D. QU front! =( QU rear+1) %m0 12. 判定一个循环队列 QU(最多元素为 m0)为满队列的条件是 _。 A. QU front= =QU rear B. QU front! =QU rear C. QU front= =( QU rear+1) %m0 D. QU front! =( QU rear+1) %m0 13. 循环队列用数组 A0, m-1存放其元素值,已知其头尾指针分别是 front 和 rear,则当前队列中的元素个数是 _。 A. (rear-front+m)%m
8、 B. rear-front+1 C. rear-front-1 D. rear-front 14. 栈和队列的共同点是 _。 A. 都是先进后出 B. 都是先进先出 C. 只允许在端点处插入和删除元素 D. 没有共同点 2.2 填空题(将正确的答案填在相应的空中) 1. 向量、栈和队列都是 _结构,可以在向量的 _位置插入和删除元素;对于栈只能在 _插入和删除元素;对于队列只能在 _插入元素和 _删除元素。 2. 向一个长度为 n 的向量的第 i 个元素( 1 i n+1)之前插入一个元素时,需向后移动 _个元素。 3. 向一个长度为 n 的向量中删除第 i 个元素( 1 i n)时,需向前
9、移动 _个元素。 4. 向栈中压入元素的操作是 _。 5. 对栈进行退栈时的操作是 _。 6. 在一个循环队列中,队首指针指向队首元素的 _。 7. 从循环队列中删除一个元素时,其操作是 _。 8. 在具有 n 个单元的循环队列中,队满时共有 _个元素。 9. 一个栈的输入序列是 12345,则栈的输出序列 43512 是 _。 10. 一个栈的输入序列是 12345,则栈的输出序列 12345 是 _。 2.3 算法设计题 : 1. 设顺序表 va 中的数据元数递增有序。试写一算法,将 x 插入到顺序表的适当位置上,以保持该表的有序性。 2. 试写一算法,实现顺序表的就地逆置,即利用原表的存
10、储空间将线性表( a1, a2, . an)逆置为 (an, an-1, ., a1)。 3. 按照四则运算加、减、乘、除和幂运算( )优先关系的惯例,并仿照教科书 3.2 节例 3 1 的格式,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程: A-B*C/D+E F 习题答案 2.1 1. B 2. C 3. C 4. A 5. B 6. D 7. BA 8. B 9. C 10. A 11. A 12. C 13. A 14. C 2.2 1. 线性、任何、栈顶、队尾、队首 2. n-i+1 3. n-i 4.先移动栈顶指针,后存入元素 5. 先取出元素,后移动栈顶指针 6.前一个
11、位置 7. 先移动队首元素,后取出元素 8. n-1 9. 不可能的 10. 可能的 习 题 三 链表(线性表、栈和队列) 3.1 单项选择题 1. 不带头结点的单链表 head 为空的判定条件是 _。 A. head= =NULL B. head next= =NULL C. head next= =head D. head!=NULL 2. 带头结点的单链表 head 为空的判定条件是 _。 A. head= =NULL B. head next= =NULL C. head next= =head D. head!=NULL 3. 非空的循环单链表 head 的尾结点(由 p 所指向)满
12、足 _。 A. p next= =NULL B. p= =NULL C. p next= =head D. p= =head 4. 在循环双链表的 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;
13、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
14、 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. n B. n/2 C. (n-1)/2 D. (n+1)/2 10. 在一个具有 n 个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是 _。 A.
15、 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 保存被删结点的值
16、,则执行 _。(不带空的头结点 ) A. x=HS; HS= HS next; B. x=HS data; C. HS= HS next; x=HS data; D. x=HS data; HS= HS next; 3.2 填空题(将正确的答案填在相应的空中) 1. 单链表是 _的链接存储表示。 2. 可以使用 _表示树形结构。 3. 在双链表中,每个结点有两个指针域,一个指向 _,另一个指向 _。 4. 在一个单链表中的 p 所指结点之前插入一个 s 所指结点时,可执行如下操作: s next=_; p next=s; t=p data; p data=_; s data=_; 5. 在一个
17、单链表中删除 p 所指结点时,应执行以下操作: q= p next; p data= p next data; p next=_; free(q); 6. 带有一个头结点的单链表 head 为空的条件是 _。 7. 在一个单链表中 p 所指结点之后插入一个 s 所指结点时,应执行 s next=_和 p next=_的操作。 8. 非空的循环单链表 head 的尾结点(由 p 所指向),满足条件 _。 9. 在栈顶指针为 HS 的链栈中,判定栈空的条件是 _。 10. 对于一个具有 n 个结点的单链表,在已知 p 所指结点后插入一个新结点的时间复杂度是_;在给定值为 x 的结点后插入一个新结点
18、的时间复杂度是 _。 3.3 算法设计题 : 1. 已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一算法,删除表中所有大于 x 且小于 y 的元素(若表中存在这样的元素)同时释放被删除结点空间。 2. 试写一算法,实现单链表的就地逆置。 4. 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。 习题答案 3.1 1. A 2. B 3. C 4. D 5. C 6. B 7. A 9. D 10. B 11.C 12. C 13.D 3.2 1. 线性表 2. 双链表 3. 前驱结点、后续结点 4. p next、 s data、 t 5. p next next 6. head next= =NULL 7. p next、 s 8. p next= head 9. HS= =NULL 10. O(1)、 O( n)