s+=A[i];
returns;
}
2.intprime(intn)
{
inti=2;
intx=(int)sqrt(n);
while(i<=x)
{
if(n%i==0)break;
i++;
}
if(i>x)return1;elsereutrn0;
}
第二章 线性表
一、要求
1.了解线性表的概念。
2.掌握线性表的顺序表示与实现。
3.掌握线性链表,了解循环链表、双向链表。
4.掌握一元多项式的表示及相加运算实现。
二、考试内容
1.线性表的概念:
定义,特点,线性表抽象数据类型定义。
2.线性表的顺序表示与实现:
线性表的动态分配顺序存储结构描述,线性表的常用操作(构造空表、求表长、判表空、取指定位置的元素值、表元素插入、表元素删除、遍历表)在顺序表上的实现,表元素插入、表元素删除算法的分析。
3.线性链表:
存储特点,结点结构,线性表的单链表存储结构描述,线性表的常用操作(构造空表、求表长、判表空、取指定位置的元素值、表元素插入、表元素删除、遍历表)在单链表上的实现,表元素插入、表元素删除算法的分析。
4.循环链表:
存储特点。
5.双向链表:
存储特点,结点结构,线性表的双向链表存储结构描述,双向链表上的表元素插入、表元素删除算法。
6.一元多项式的表示及相加:
一元多项式的单链表表示,一元多项式相加运算的实现。
7.例题:
(1)以下说法是否正确?
线性结构中,任何一个结点都有一个且仅有一个直接前驱和直接后继。
解:
不正确。
(2)带头结点的单链表head为空的判定条件为_______________。
A.head==NULLB.head->next==NULLC.head->next==headD.head!
=NULL
解:
B
(3)对于采用顺序存储结构的线性表,当随机插入或删除一个数据元素时,平均约需移动表中__________元素。
解:
一半。
(4)编写算法:
将数据元素X插入到递增有序的顺序表的适当位置,使插入后的顺序表仍为递增有序。
(5)已知单链表L,写一算法,删除其中的重复结点。
8.作业:
(1)下列关于线性表的叙述错误的是____________。
A.用数组存储表,各元素在内存的存储位置是连在一起的
B.表的操作允许且仅允许在表的一端进行
C.表的链接存储方式便于插入和删除操作
D.可以按照元素在表中的逻辑位置确定它们在表中的前驱后继关系
(2)在一个有n个元素的单链表中进行顺序查找,则查找成功的平均查找长度为____________。
A.nB.n-1C.n+1D.(n+1)/2
(3)在n个结点的顺序表中,算法的时间复杂度是O
(1)的操作是____________。
A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
B.在第i个结点后插入一个新结点(1≤i≤n)
C.删除第i个结点(1≤i≤n)
D.将n个结点从小到大排序
(4)设有单链表表示的表L,如下图所示:
K^
……
D
L
B
A
p
q
C^
试写出将q所指向的节点插入在p指向的结点之后的程序段。
(5)写出求单链表长度的算法。
(6)设两个单链表L1和L2,其结点的数据为整数,若L1和L2中各结点的数据已按从小到大的顺序排列,试写一个算法,将L1和L2合并成一个单链表L,使得L中各结点的数据仍按从小到大的顺序排列。
第三章 栈和队列
一、要求
1.掌握栈及其应用。
2.掌握队列及其应用。
二、考试内容
1.栈的概念,特点,抽象数据类型栈的定义。
2.栈的顺序表示和实现,栈的链接表示和实现。
3.栈的典型应用:
数制转换,括号匹配的检验,表达式求值,栈与递归。
4.队列的概念,特点,抽象数据类型队列的定义。
5.队列的顺序表示和实现,队列的链接表示和实现。
6.例题:
(1)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为____________。
A.iB.n=iC.n-i+1D.不确定
解:
C
(2)队列的插入操作在___________进行,删除操作在队头进行。
解:
队尾
(3)中缀表达式(a+b)*((c-d)*e+f/g)的后缀表达式为______。
解:
ab+cd-e*fg/+*
(4)顺序队列的“假溢出”是怎样产生的?
如何判断循环队列是空还是满?
解:
队列的尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫“假溢出”。
采用循环队列是解决假溢出的途径。
判断循环队列队空标志是:
f=r队满标志是:
f=(r+1)%N。
(5)写一个算法,借助于栈将一个单链表置逆。
7.作业:
(1)有6个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈序列?
A.543612B.453126C.346521D.234156
(2)已知一个中缀算术表达式为:
3+4/(25-(6+15))*8#,其中“#”是表达式结束符,要求写出对应的后缀表达式,并画出转换过程中栈的变化情况。
(3)______是限定在表的一端进行插入和删除的线性表。
(4) 内存中一片连续空间(假设地址从1到m),提供给两个栈S1和S2使用,怎样分配这部分存储空间,使得对任一个栈,仅当这部分空间全满时才发生上溢。
(5)写出下列程序段的输出结果(栈的元素类型为char)。
voidmain(){
StackS;
charx,y;
InitStack(S);
x=’a’;y=’b’;
Push(S,x);Push(S,’c’);Push(S,y);
Pop(S,x);Push(S,’e’);Push(S,x);
Pop(S,x);Push(S,’q’);
while(!
StackEmpty(S)){Pop(S,y);printf(y);};
printf(x);
}
(6)设以数组se[m]存放循环队列的元素,同时设变量rear和front分别作为队头、队尾指针,且队头指针指向队头元素的前一个位置,写出这样设计的循环队列元素入队、出队的算法。
第四章 串
一、要求
1.理解串类型的定义。
2.掌握串的表示和实现。
3.掌握朴素的模式匹配算法,了解无回溯的模式匹配。
二、考试内容
1.串类型的定义:
串的定义,特点,串的抽象数据类型定义。
2.串的表示和实现:
定长顺序存储表示,堆分配存储表示,块链存储表示。
3.串的模式匹配:
定义,朴素的模式匹配算法,无回溯的模式匹配。
4.例题:
(1)串s1='IAMASTUDENT',其长度为____________。
A.15B.14C.16D.13
解:
B
(2)空串是__________。
设串S='A:
/document/doc1.doc',则字符“/”的位置为__________。
解:
不包含任何字符(长度为0)的串,3
(3)设串s1='ABCDEFG',s2='PQRST',函数con(x,y)返回x和y串的连接串,subs(s,i,j)返回串s的从序号i的字符开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1,2,len(s2)),subs(s1,len(s2),2))的结果串是____。
A.BCDEFB.BCDEFGC.BCPQRSTD.BCDEFEF
解:
D
4.作业:
(1)串的长度是指__________________。
(2)设a='Iamastudent',b='good',c='student',求:
StrLength(a),StrLength(c),subs(a,8,1),con(a,b)。
(3)设两个串为:
S1='dabcabcdefbc',S2='bc',试求两个串的长度;如果S2是S1的子串,指出S2在S1中的位置。
(4)设主串s='aabbccdeaa',子串t='bc',试分析采用朴素的模式匹配算法的匹配过程。
第五章 数组和广义表
一、要求
1.掌握数组。
2.了解广义表。
二、考试内容
1.数组:
定义,特点,数组元素存储位置的计算。
2.广义表:
定义,特点。
3.例题:
(1)设广义表H=(A,(a,b,c)),则其表尾为____________。
解:
((a,b,c))
(2)设A是n*n的对称矩阵,将A的对角线及对角线下方的元素以行优先顺序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij(1≤i,j≤n,且i≤j)在B中的位置为______。
解:
i*(i-1)/2+j
(3)设二维数组X的行下标范围是0—5,列下标范围是1—8,每个数组元素占6个字节。
若已知X的最后一个元素的起始字节地址为382,则X的首地址(即第一个元素的起始字节地址)为_____。
若按行存储,则X[1,5]的起始字节地址为______。
解:
100,172
4.作业:
(1)设广义表为X=(A,B,C,D,e),其中:
A=()B=((C),e)C=(a,b,c)D=(B,c),a,b,c,e为原子。
则表X的深度为多少?
(2)下列说法正确的是_____________。
A.广义表不允许是递归的B.广义表允许是递归的
C.广义表中的元素不允许全是原子D.广义表不允许是空表
(3)设数组a[1…60,1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为多少?
第六章 树和二叉树
一、要求
1.理解树的定义及有关概念。
2.掌握二叉树。
3.掌握树和森林的特点、存储及遍历等。
4.掌握赫夫曼树及其应用。
二、考试内容
1.树的定义及有关概念:
树定义,结点,度,根结点,叶结点,分支结点,父结点,子女结点,结点层次,树的高度,森林,抽象数据类型树的定义。
2.二叉树:
二叉树的定义,性质,抽象数据类型二叉树的定义,存储结构,二叉树遍历,线索化,二叉树的构造。
3.树和森林:
树的存储结构,树和森林的遍历,树和森林与二叉树的转换。
4.赫夫曼树及其应用:
赫夫曼树的定义,赫夫曼树的构造,赫夫曼编码。
5.例题:
(1)深度为k的二叉树至多有______。
A.2k个结点B.2k-1个结点C.2k-1个结点D.2k-1-1个结点
解:
C
(2)在树结构中,且仅有一个_________结点,它没有前趋。
解:
根
(3)设二叉树如图所示:
A
^C
B^
E^
^D^
^F^
试写出分别按前序、中序和后序遍历此二叉树所得的结点序列。
解:
前序序列ABDCEF
中序序列DBACFE
后序序列DBFECA
6.作业:
(1)给定二叉树的前序遍历序列:
D,A,C,E,B,H,F,G,I;和中序遍历序列:
D,C,B,E,H,A,G,I,F。
试画出二叉树B。
(2)对如下的二叉链表进行中序线索化操作,画出添加线索后的线索树。
A
^C
B^
E^
^D^
^F^
(3)有一份电文中共使用6个字符:
a,b,c,d,e,f,它们的出现频率依次为2,3,4,7,8,10,试构造哈夫曼树,给出构造过程和所得的哈夫曼树,该树的加权路径长度WPL是多少?
各字符的编码分别是什么?
(4)具有n个结点的中序线索树中,非空指针的个数是______。
(5)设X是树T中的一个非根结点,B是与T对应的二叉树,在B中,X是父母的右子女,则下列结论正确的是________________。
A.树T中,X是父母的第一个子女B.树T中,X一定有左兄弟结点
C.树T中,X一定是叶结点D.树T中,X一定无右兄弟结点
(6)编写前序、中序和后序遍历二叉树的递归算法。
(7)设二叉树以二叉链表存储,编写计算二叉树中叶结点数目的算法。
第七章 图
一、要求
1.理解图的定义及有关概念。
2.掌握图的存储结构。
3.掌握图的常用运算。
二、考试内容
1.图的定义及有关概念:
图定义,顶点,弧,有向图,无向图,完全图,邻接点,关联,度,路经,回路,简单路径,连通,连通分量,强连通图,生成树,抽象数据类型图的定义。
2.图的存储结构:
邻接矩阵,邻接表。
3.图的常用运算:
图的遍历,无向图的连通分量和生成树,最小生成树,有向无环图及其应用、最短路径。
4.例题:
(1)下面的叙述中,正确的是____________。
A.有向图中任何顶点均有一个前驱顶点
B.有向图中任何顶点均有一个或多个前驱顶点
C.有向图中任何顶点均允许有0个、一个或多个前驱顶点
D.有向图中任何顶点至少有一个直接后继顶点
解:
C
(2)在一个图中,所有顶点的度数之和等于图的边数的_______倍。
A.1/2B.1C.2D.4
解:
C
(3)含n个顶点的无向完全图,其边数为________。
解:
n(n+1)/2
(4)若某有向图共有5个节点v0—v4,它的邻接矩阵如下:
01010
00100
00000
00101
00100
试写出该有向图的邻接表。
解:
^
V1
V3
^
V0
V2
^
V1
V2
V2
V4
^
V3
V2
^
5.作业:
(1)连通无向图G有n个顶点,则图G的最小生成树的边数为______________。
A.nB.n*(n-1)/2C.n-1D.n/2
(2)图的遍历是指______________________________________________________。
(3)在AOE网中,从源点到汇点路径上各活动时间总和最长的路径称为________。
(4)以下说法是否正确?
对任意一个图,从它的某个顶点出发进行一次深度优先或广度优先搜索遍历可访问到该图的每个顶点。
(5)对于有向无环图 ①叙述求拓扑序列的步骤; ②对于下图,写出它的4个不同的拓扑序列。
(6)下图表示一个地区的通讯网,边表示城市间的通讯线路,边上的权表示架设线路花费的代价,如何选择能沟通每个城市且总代价最省的n-1条线路,即求该图的最小生成树,试分别用Prim算法和Kruskal算法求该图的最小生成树,要求给出过程和最后结果。
16
1
2
4
3
19211175
6
5
3314
186
第八章 查找
一、要求
1.理解查找的概念。
2.掌握静态查找表。
3.掌握动态查找表。
4.掌握哈希表。
二、考试内容
1.查找的概念:
定义,平均查找长度。
2.静态查找表:
顺序表的查找,有序表的查找,索引顺序表的查找。
3.动态查找表:
二叉排序树,平衡二叉树,B-树。
4.哈希表:
哈希表定义,构造方法,冲突处理方法,哈希表的查找。
5.例题:
(1)下面关于二分查找的叙述正确的是_________。
A.表必须有序,表可以顺序方式存储,也可以链表方式存储
B.表必须有序,而且只能从小到大排列
C.表必须有序且表中数据必须是整型,实型或字符型
D.表必须有序,且表只能以顺序方式存储
解:
D
(2)一个顺序存储的表,其中有40000个元素,已按关键字值的上升顺序排列。
现假设对各个元素的查找概率相同,并且每个元素的关键字值都不相同。
用顺序查找法查找时,成功查找的平均比较次数是_________________。
现把40000个元素划分成若干组,使每组有m个元素。
查找时,先从第一组开始,通过比较各组最后一个元素的关键字值,找到要查找的元素所在的组,然后再在该组中用顺序查找法找到要查找的元素。
在这种查找法中,使总的平均比较次数最少的m值是_____________。
解:
20001,200
(3)散列法存储的基本思想是由________决定数据的存储地址。
解:
关键字值
(4)下列有关二叉排序树的叙述错误的是_____________。
A.二叉排序树的任一棵子树也是二叉排序树
B.向二叉排序树中插入一个结点,被插入结点的度必为0
C.向二叉排序树中插入一个结点,树的高度必增1
D.对二叉排序树进行中序遍历,将得到结点所含关键码的递增序列。
解:
C
6.作业:
(1)编写顺序查找、二分法查找的算法。
(2)设有一个待散列存储的线性表为(15,12,22,8,34,19,21,54,35,28),散列地址空间是HT[0..12],采用散列函数H(Key)=Keymod13,使用线性探查法解决冲突。
试求出每一元素的散列地址,写出最后得到的散列表,并求出等概率情况下成功查找的平均查找长度ASL。
(3)从一棵空的AVL树开始,依次将关键字序列4,5,7,2,1,3,6加入,生成一棵平衡二叉树。
画出每个结点插入AVL树的过程(如需进行调整请注明调整的类型)。
(4)以下说法是否正确?
负载因子(装填因子)是散列表的一个重要参数,它反映散列表的装满程度。
第九章 内部排序
一、要求
1.理解排序的概念。
2.掌握常用的排序方法。
3.理解各类内部排序方法的特点。
二、考试内容
1.排序的概念:
定义,稳定性。
2.常用的排序算法:
直接插入排序,二分法插入排序,简单选择排序,冒泡排序,希尔排序,快速排序,堆排序,归并排序,基数排序。
3.各类内部排序方法的特点:
时间复杂度,空间复杂度,稳定性。
4.例题:
(1)下列排序方法中___________是稳定的。
A.快速排序B.直接选择排序C.希尔排序D.直接插入排序
解:
D
(2)若一个待排序的表(k1,k2,…,kn)中排序码的顺序与要排序的结果完全相反,用冒泡排序法进行排序,则比较次数和交换次数是______________。
A.O(n)和O(n)B.O(n2)和O(n)C.O(n)和O(n2)D.O(n2)和O(n2)
解:
D
(3)将以下记录{50,10,52,40,45,85,80,31}整理成最小堆,为_____。
解:
{10,31,52,40,45,85,80,50}
5.作业:
(1)编写直接插入排序,二分法插入排序,简单选择排序,冒泡排序,希尔排序,快速排序,堆排序,归并排序算法并分析它们的时间复杂度和空间复杂度。
(2)设要将序列(Q,H,C,Y,P,A,M,S,R,D,F,X)中的关键码按字母序的升序重新排列,试写出冒泡排序、快速排序、二路归并排序一趟扫描的结果,以及堆排序初始建堆的结果。
选用教材意见
1.数据结构(C语言版).严蔚敏,吴伟民编著 .清华大学出版社.1997年4月
2.数据结构实用教程.徐孝凯编著 .清华大学出版社.1999年12月
数据结构学位考试样题
一、选择题(本大题共10小题,每小题2分,共20分)
1、栈的插入和删除操作在()进行。
A.栈顶B.栈底C.任意位置D.指定位置
2、若让元素1、2、3依次进栈,则出栈次序不可能出现()情况。
A.3、2、1B.2、1、3C.3、1、2D.1、3、2
3、若在线性表中采用折半查找法查找元素,该线性表应该()。
A.元素按值有序
B.采用顺序存储结构“
C.元素按值有序,且采用顺序存储结构
D.元素按值有序,且采用链式存储结构
4、对二叉排序树进行()遍历,可以得到该二叉树所有结点构成的排序序列。
A.前序 B.中序 C.后序 D.按层次
5、具有n个顶点的无向图最多有()条边。
A.n B.n(n—1)/2 C.n(n+1)/2 D.n2
6、排序序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在已排序序列的合适位置,该排序方法称为()排序法。
A.插入 B.选择 C.谢尔 D.二路归并
7、.算法分析的两个主要方面是()。
A.空间复杂度和时间复杂度
B.正确性和简明性
C.可读性和文档性
D.数据复杂性和程序复杂性
8、顺序表中逻辑上相邻的节点其物理位置也()。
A.一定相邻B.不必相邻
C.按某种规律排列D.无要求
9、设计一个判断表达式中左右刮号是否匹配的算法,采用()数据结构最佳
A.线性表的顺序存储结构B.栈
C.队列D.线性表的链式存储结构
10、图1中给出由7个顶点组成的无向图。
从顶点1出发,对它进行深度优先遍历得到的顶点序列是。
A.1354267B.1347625C.1534276D.1247653
图1
二、填空题(每空2分,共20分)
1.数据结构研究的主要内容是数据的逻辑结构、存储结构和______________。
2.已知一棵完全二叉树中共有100个结点,则该树中共有个叶子结点。
3.设s[maxsize]为一个顺序存储的栈,变量top指示栈顶位置,栈为空的条件是_____________,栈为满的条件是_______