1、第一章 绪论一、问答题 1. 什么是数据结构? 2. 叙述四类基本数据结构的名称与含义。3. 叙述算法的定义与特性。4. 叙述算法的时间复杂度。5. 叙述数据类型的概念。 6. 叙述线性结构与非线性结构的差别。 7. 叙述面向对象程序设计语言的特点。 8. 在面向对象程序设计中,类的作用是什么?9. 叙述参数传递的主要方式及特点。 10. 叙述抽象数据类型的概念。 二、判断题(在各题后填写“”或“”) 1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。( )2. 算法就是程序。( ) 3. 在高级语言(如 C 或 PASCAL)中,指针类型是原子类型。( )三、计算下列程序
2、段中 X=X+1 的语句频度 for(i=1;inext=S; (2 ) P-next= P-next-next; (3 ) P-next= S-next; (4 ) S-next= P-next; (5 ) S-next= L; (6 ) S-next= NULL; (7 ) Q= P; (8 ) while(P-next!=Q) P=P-next; (9 ) while(P-next!=NULL) P=P-next; (10 )P= Q; ( 11)P= L; (12)L= S; (13 )L= P; 2.4 已知线性表 L 递增有序。试写一算法,将 X 插入到 L 的适当位置上,以保持线
3、性表 L 的有序性。 Status Insert_SqList(SqList va.length+; for(i=va.length-1;va.elemixi-) va.elemi+1=va.elemi; va.elemi+1=x; return OK; /Insert_SqList2.5 写一算法,从顺序表中删除自第 i 个元素开始的 k 个元素。 2.6 已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。试写一高效算法,删除表中所有大于 mink 且小于 maxk 的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink 和 maxk 是给定的两个参变量,它
4、们的值为任意的整数)2.7 试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1, a2., an)逆置为(an, an-1,., a1)。 (1 ) 以顺序表作存储结构。 (2 ) 以单链表作存储结构。2.8 假设两个按元素值递增有序排列的线性表 A 和 B,均以单链表作为存储结构,请编写算法,将 A 表和 B 表归并成一个按元素值递减有序的排列的线性表 C,并要求利用原表(即 A 表和 B 表的)结点空间存放表 C. 2.9 假设有一个循环链表的长度大于 1,且表中既无头结点也无头指针。已知 s 为指向链表某个结点的指针,试编写算法在链表中删除指针 s 所指结点
5、的前趋结点。2.10 已知有单链表表示的线性表中含有三类字符的数据元素(如字母字符、数字字符和其它字符),试编写算法来构造三个以循环链表表示的线性表,使每个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。2.11 设线性表 A=(a1, a2,am),B=(b1, b2,bn),试写一个按下列规则合并 A、B 为线性表C 的算法,使得: C= (a1, b1,am, bm, bm+1, ,bn) 当 mn 时; 或者C= (a1, b1,an, bn, an+1, ,am) 当 mn 时。 线性表 A、B、 C 均以单链表作为存储结构,且 C 表利用 A
6、表和 B 表中的结点空间构成。注意:单链表的长度值 m 和 n 均未显式存储。 2.12 将一个用循环链表表示的稀疏多项式分解成两个多项式,使这两个多项式中各自仅含奇次项或偶次项,并要求利用原链表中的结点空间来构成这两个链表。2.13 建立一个带头结点的线性链表,用以存放输入的二进制数,链表中每个结点的 data 域存放一个二进制位。并在此链表上实现对二进制数加 1 的运算 。2.14 设多项式 P(x)采用课本中所述链接方法存储。写一算法,对给定的 x 值,求 P(x)的值。第三章 栈和队列1. 按图 3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答: 如进站的车厢序列为 1
7、23,则可能得到的出站车厢序列是什么? 如进站的车厢序列为 123456,能否得到 435612 和 135426 的出站序列,并说明原因。(即写出以“S”表示进栈、以“X”表示出栈的栈操作序列)。2. 设队列中有 A、B 、C、D、 E 这 5 个元素,其中队首元素为 A。如果对这个队列重复执行下列 4 步操作: (1 ) 输出队首元素; (2 ) 把队首元素值插入到队尾; (3 ) 删除队首元素; (4) 再次删除队首元素。 直到队列成为空队列为止,则是否可能得到输出序列: (A)A、 C、E、C、C (B) A、C、E (C) A、C 、E、C、C、C (D) A、C、E、C3. 给出栈
8、的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满?4. 按照四则运算加、减、乘、除和幂运算()优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程: AB5. 试写一个算法,判断依次读入的一个以 为结束符的字母序列,是否为形如序列 1 n=0; while(!EmptyStack(S) n+; Pop( for(i=1; i=n; i+) Push( (2 ) void proc_2(Stack S, int e) Stack T; int d; InitStack( while(!EmptyStack(S) Pop( if (d!=e) Push( whil
9、e(!EmptyStack(T) Pop( Push( (3 ) void proc_3(Queue *Q) Stack S; int d;InitStack( while(!EmptyQueue(*Q) DeleteQueue(Q, Push( while(!EmptyStack(S) Pop( EnterQueue(Q,d) 第四章 串1. 设 s=I AM A STUDENT, t=GOOD, q=WORKER。给出下列操作的结果:StrLength(s); SubString(sub1,s,1,7); SubString(sub2,s,7,1); StrIndex(s,A,4); St
10、rReplace(s,STUDENT,q); StrCat(StrCat(sub1,t), StrCat(sub2,q);2. 编写算法,实现串的基本操作 StrReplace(S,T,V)。3. 假设以块链结构表示串,块的大小为 1,且附设头结点。 试编写算法,实现串的下列基本操作: StrAsign(S,chars); StrCopy(S,T); StrCompare(S,T); StrLength(S); StrCat(S,T);SubString(Sub,S,pos,len)。4 叙述以下每对术语的区别:空串和空格串;串变量和串常量;主串和子串;串变量的名字和串变量的值。5 已知:S=
11、”(xyz)*”,T=”(x+z)*y”。试利用联接、求子串和置换等操作,将 S 转换为T. 6 S 和 T 是用结点大小为 1 的单链表存储的两个串,设计一个算法将串 S 中首次与 T匹配的子串逆置。7 S 是用结点大小为 4 的单链表存储的串 ,分别编写算法在第 k 个字符后插入串 T,及从第 k 个字符删除 len 个字符。 以下算法用定长顺序串: 8 写下列算法: (1 ) 将顺序串 r 中所有值为 ch1 的字符换成 ch2 的字符。(2 ) 将顺序串 r 中所有字符按照相反的次序仍存放在 r 中。( 3) 从顺序串 r 中删除其值等于 ch 的所有字符。( 4) 从顺序串 r1 中
12、第 index 个字符起求出首次与串 r2 相同的子串的起始位置。( 5) 从顺序串 r 中删除所有与串 r1 相同的子串。 9 写一个函数将顺序串 s1 中的第 i 个字符到第 j 个字符之间的字符用 s2 串替换。10 写算法,实现顺序串的基本操作 StrCompare(s,t)。11 写算法,实现顺序串的基本操作 StrReplace( InsertArc(G, v, w); DeleteVertex(G,v)和 DeleteArc(G, v, w)。7.7 试对邻接表存储结构重做题 6。7.8 试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中,是否存在由顶点 vi 到
13、顶点 vj 的路径(ij)。注意:算法中涉及的图的基本操作必须在此存储结构上实现。7.9 同上题要求。试基于图的广度优先搜索策略写一算法。7.10 试利用栈的基本操作,编写按深度优先策略遍历一个强连通图的、非递归形式的算法。算法中不规定具体的存储结构,而将图 Graph 看成是一种抽象数据类型。7.11 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为 k 的简单路径(指顶点序列中不含有重现的顶点)的算法。7.12 下图是带权的有向图 G 的邻接表表示法。从结点 V1 出发,深度遍历图 G 所得结点序列为( A ),广度遍历图 G 所得结点序列为( B );G
14、的一个拓扑序列是( C );从结点 V1到结点 V8 的最短路径为( D );从结点 V1 到结点 V8 的关键路径为( E )。 其中 A、B、C 的选择有:V1,V2,V3,V4,V5,V6,V7,V8 V1,V2,V4,V6,V5,V3,V7,V8 V1,V2,V4,V6,V3,V5,V7,V8 V1,V2,V4,V6,V7,V3,V5,V8 V1,V2,V3,V8,V4,V5,V6,V7 V1,V2,V3,V8,V4,V5,V7,V6 V1,V2,V3,V8,V5,V7,V4,V6 D、E 的选择有: V1,V2,V4,V5,V3,V8 V1,V6,V5,V3,V8 V1,V6,V7,V8 V1,V2,V5,V7,V87.13 已知一棵以二叉链表作存储结构的二叉树,试编写按层次顺序(同一层自左至右)遍历二叉树的算法。