数据结构复习提纲

数据结构复习提纲
数据结构复习提纲

一、

1.数据元素是数据的基本单位。

2.在一个单链表中,若删除p所指结点的后继结点,则执行p->next=p->next->next; 3.在循环双链表的p所指结点之后插入s所指结点的操作是s->prior=p; s->next=p->next; p->next->prior=s; p->next =s;

4.若希望从链表中快速确定一个结点的前驱,则链表最好采用双向链表方式。5.设有50行的二维数组A[50][60],其元素长度为4字节,按行优先顺序存储,基地址为200,则元素A[18][25]的存储地址为 4376 。

6.广义表(a,b,(c,(d)))的表尾是 (b,(c,(d))) 。

7.队列的特点是先进先出。

8.设计一个判别表达式中左、右括号是否配对出现的算法,采用栈数据结构最佳. 9.判定一个循环队列QU(maxsize=m0)为满队列的条件是QU->front= = (QU->rear+1) %m0 。

10.树最适合用来表示元素之间具有分支层次关系的数据。

11.在二叉树的第i层上至多有 2i-1个结点(i≥1)。

12.对于完全二叉树中的任一结点,若其右分支下的子孙的最大层次为h,则其左分支下的子孙的最大层次为 h或h+1 。

14.已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的先序遍历序列是cedba 。

15.在线索二叉树中,一个结点是叶子结点的充要条件为它的左、右线索标志均为1 。

16.若一棵二叉树中度为l的结点个数是3,度为2的结点个数是4,则该二叉树叶子结点

的个数是 5 。

17.由权值分别为3、8、6、2、5的叶子结点生成一棵哈夫曼树,它的带权路径长度为 55 。18.无向图的邻接矩阵是一个对称矩阵。

19具有n个顶点的无向图最多有 n(n-1)/2 条边。

20.具有5个顶点的无向图至少应有 4 条边才能确保是一个连通图。

21.下列命题正确的是一个图的邻接矩阵表示是唯一的,邻接表表示不唯一。22.已知一有向图的邻接表存储结构如下:

从顶点V

1出发,进行深度优先遍历,所得的顶点序列是 V

1

V

3

V

4

V

5

V

2

23.在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是选择排序。24.快速排序方法在要排序的数据已基本有序情况下蜕化为起泡排序。

25.内部排序的方法有许多种,选择排序方法是对序列中的元素通过适当的位置交换将有关元素一次性地放置在其最终位置上。

26.一组记录的关键字为{46,79,56,38,40,84},则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为 40,38,46,56,79,84 。

27.递归实现或函数调用时,处理参数及返回地址,应采用的数据结构是堆栈。28.对线性表进行二分查找时,线性表必须顺序存储并有序。

29.按中序遍历二叉排序树得到的序列是一个有序序列。

30.在图G中求两个结点之间的最短路径可以采用的算法是迪杰斯特拉(Dijkstra)算

法。

31.线性表是具有n个数据元素的有限序列。

32.在一个长度为n的顺序存储结构的线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时需向后移动 n-i+1 个元素。

33.若进栈序列为1、2、3、4,进栈过程中可以出栈,则 1 4 2 3 不可能是一个出栈序列。

34.由三个结点构成的二叉树,共有 5 种不同的结构。

35.先序遍历和中序遍历结果相同的二叉树是所有结点只有右子树的二叉树。36.在一棵具有五层的满二叉树中,结点总数为 31 。

37.由分别带权为9,2,5,7的四个叶子结点构造一棵哈夫曼树,该树的带权路径长度

为 44 。

38.在一个无向图中,所有顶点的度数之和等于所有边数的 2 倍。

39.在有向图的逆邻接表中,每个顶点邻接表链接着该顶点的所有入边邻接点。

40.对线性表进行折半查找时,要求线性表必须以顺序方式存储,且数据元素有序。41.一组记录的关键字为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为 (40,38,46,56,79,84) 。

42.从长度为n的采用顺序存储结构的线性表中删除第i个元素(1≤i≤n),需向前移动 n-i 个元素。

43.从邻接矩阵A=????

???

???010101010

可以看出,该图共有 3 个顶点。 44.排序趟数与序列的原始状态有关的排序方法是 冒泡 排序。

45.在一个具有n 个单元的采用顺序存储结构的栈中,假定以地址低端(即下标为1的单元)

作为栈底,以top 作为栈顶指针,则当作出栈处理时,top 变化为 top=top-1;

。 46.在具有N 个结点有序单链表中插入一个新结点并仍然有序的时间复杂度为 O(N) 。

47.在一棵二叉树中,第五层上的结点数最多为 16 个。

48.在一棵度为3的树中,度为3的结点数为2个,度为2的结点数为1个,度为1的结点

数为2个,那么度为0的结点数为 6 个。

49.已知8个数据元素为(34,76,45,18,26,54,92,65),按照依次插入结点的方法

生成一棵二叉排序树,则该树的深度为 5 。

50.设无向图的顶点个数为N ,该无向图最多有 N(N-1)/2 条边。

51.在具有N 个单元的采用顺序存储结构的循环队列中,假定FRONT 和REAR 分别为队首指

针和队尾指针,则判断队满的条件是 (REAR +1) % N==FRONT 。

52.对一个具有n 个顶点和E 条边的无向图,所有顶点邻接表中的结点总数为 2E 。

53.采用顺序查找法查找长度为N 的线性表时,在等概率情况下,顺序查找的平均查找长度

为 (N+1)/2 。

54.当两个元素相比较出现反序(即逆序)时就相互交换位置的排序方法叫 交换排序 。

55.若二叉树采用二叉链表存储结构,要交换其所有结点左右子树的位置,利用

先序 遍历方法最合适。

56.设栈S 和队列Q 的初始状态为空,元素E1、E2、E3、E4、E5和E6依次通过栈S ,一个

元素出栈后即进入队列Q ,若6个元素出列的顺序为E2、E4、E3、E6、E5和E1,则栈S

的容量至少应该是 3 。

57.将10阶对称矩阵压缩存储到一维数组A 中,则数组A 的长度最少为 55 。

58.设结点A 有3个兄弟结点且结点B 为结点A 的双亲结点,则结点B 的度数为 4 。

59.根据二叉树的定义可知二叉树共有 5 种不同的形态。

60.设有以下四种排序方法,则 快速排序 的空间复杂度最大。

61.算法指的是 解决问题的有限运算序列 。

62.线性表采用链式存储时,结点的存储地址 连续与否均可 。

63.将长度为n 的单链表链接在长度为m 的单链表之后的算法的时间复杂度为 O (m ) 。

64.由两个栈共享一个向量空间的好处是:(节省存储空间,降低上溢发生的几率 )

65.设数组data[m]作为循环队列SQ 的存储空间,front 为队头指针,rear 为队尾指针,

则执行出队操作后其头指针front 值为 front=(front+1)%m 。

66.如下陈述中正确的是 串是一种特殊的线性表 。

67.设结点A 有4个兄弟结点且结点B 为结点A 的双亲结点,则结点B 的度数为 5 。

68.一个非空广义表的表头 可以是子表或原子 。

69.递归实现或函数调用时,处理参数及返回地址,应采用的数据结构是 堆栈 。

70.在一棵度为3的树中,度为3的结点个数为2,度为2 的结点个数为1,度为1的结点

数为2个,则度为0的结点个数为 6 。

71.在含n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为 n2-2e 。

相关的所72.假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除与某个顶点v

i 有弧的时间复杂度是 O(n+e) 。

73.用某种排序方法对关键字序列(25,84,21,47,15,27,68,35,20)进行排序时,序列的变化情况如下:

20,15,21,25,47,27,68,35,84

15,20,21,25,35,27,47,68,84

15,20,21,25,27,35,47,68,84

则所采用的排序方法是快速排序。

74.设一组初始记录关键字序列为(45,80,55,40,42,85),则以第一个记录关键字45

为基准而得到一趟快速排序的结果是 42,40,45,55,80,85 。

75.不定长文件是指记录的长度不固定。

76.设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为 O(1) 。77.设一棵二叉树的深度为k,则该二叉树中最多有( 2k-1 )个结点。

78.设某无向图中有n个顶点e条边,则该无向图中所有顶点的入度之和为 2e 。

79.在二叉排序树中插入一个结点的时间复杂度为( O(log2n) )。

80.设某有向图的邻接表中有n个表头结点和m个表结点,则该图中有 m 条有向边。81.设一组初始记录关键字序列为(345,253,674,924,627),则用基数排序需要进行 3 趟的分配和回收才能使得初始关键字序列变成有序序列。

82.设用链表作为栈的存储结构,则退栈操作必须判别栈是否为空。

83.下列四种排序中快速排序的空间复杂度最大。

84.设某二叉树中度数为0的结点数为N0,度数为1的结点数为Nl,度数为2的结点数为

N2,则下列等式成立的是 N0=N2+1 。

85.设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不n。

超过 log

2

86.先序遍历和中序遍历结果相同的二叉树是所有结点只有右子树的二叉树。

87.设线性表中有10个元素,则用顺序查找法查找元素X最多需要比较 10 次。

88.设连通图G中的边集E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},

则从顶点a出发可以得到一种深度优先遍历的顶点序列为 acfebd 。

89.设输入序列是1、2、3、……、n,经过栈的作用后输出序列的第一个元素是n,则输出

序列中第i个输出元素是 n+1-i 。

90.设线性表中有20个元素,则用顺序查找法查找元素X最多需要比较 20 次。

91. 若将数据结构形式定义为二元组(K,R),其中K是数据元素的有限集合,则R是K上关

系的有限集合。

92. 在长度为n的顺序表中删除第i个元素(1≤i≤n)时,元素移动的次数为 n-i 。

93. 若不带头结点的单链表的头指针为head,则该链表为空的判定条件是 head==NULL 。

94. 引起循环队列队头位置发生变化的操作是出队。

95. 若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则不.可能出现的出栈

序列是 2,3,5,1,6,4 。

96. 字符串通常采用的两种存储方式是顺序存储和链式存储。

97. 树最适合用来表示元素之间具有分支层次关系的数据。

98. 设有50行的二维数组A[50][60],其元素长度为4字节,按行优先顺序存储,基地址为200,则元素A[18][25]的存储地址为 4376 。

99. 对广义表L=((a,b),(c,d),(e,f))执行操作tail(tail(L))的结果是 ((e,f)) 。100.按排序过程中依据的原则分类,快速排序属于交换类的排序方法。

101. n个顶点的强连通图中至少含有 n条有向边。

102. 对关键字序列(56,23,78,92,88,67,19,34)进行增量为3的一趟希尔排序的结果为 (19,23,67,56,34,78,92,88) 。

103. 若在9阶B-树中插入关键字引起结点分裂,则该结点在插入前含有的关键字个数为8 。

104. 由同一关键字集合构造的各棵二叉排序树其形态不一定相同,平均查找长度也不一定相同。

105. ISAM文件和VSAM文件的区别之一是前者建立静态索引结构,后者建立动态索引结构。

106.设某数据结构的二元组形式表示为A=(D,R),D={01,02,03,04,05,06,07,08,09},R={r},r={<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,07>,<03,08>,<03,09>},则数据结构A是树型结构。

107.下面程序的时间复杂度为 O(n2) 。

for(i=1,s=0; i<=n; i++) {t=1;for(j=1;j<=i;j++) t=t*j;s=s+t;} 108.设结点A有3个兄弟结点且结点B为结点A的双亲结点,则结点B的度数数为 4 。109.设有n个待排序的记录关键字,则在堆排序中需要 1 个辅助记录单元。

110.设一组初始关键字记录为(20,15,14,18,21,36,40,10),则以20为基准记录的一趟快速排序结束后的结果为 10,15,14,18,20,36,40,21 。

n) 。111.设二叉排序树中有n个结点,则在二叉排序树的平均查找长度为 O(log

2

112.设无向图G中有n个顶点e条边,则其对应的邻接表中的表头结点和表结点的个数分别为 n,2e 。

113. 设某强连通图中有n个顶点,则该强连通图中至少有 n 条边。

114.设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用下列堆排序方法可以达到此目的。

115.下列四种排序中归并排序的空间复杂度最大。

116.设栈S和队列Q的初始状态为空,元素E1、E2、E3、E4、E5和E6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出列的顺序为E2、E4、E3、E6、E5和E1,则栈S 的容量至少应该是 3 。

117.将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为 55 。

118.下列关键字序列中,构成小根堆的是 {15,28,46,37,84,58,62,41} 。

119.在长度为32的有序表中进行二分查找时,所需进行的关键字比较次数最多为 6 。120.先序遍历和中序遍历结果相同的二叉树是所有结点只有右子树的二叉树。121.数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

122.算法分析的目的是评价算法的效率。

123.在线性表的下列运算中,不.改变数据元素之间结构关系的运算是定位。124.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为 3,4,2,1,6,5 。

125.设串sl=”Data Structures with Java”,s2=”it”,则子串定位函数index(s1,s2)的值为 18 。

126.二维数组A[8][9]按行优先顺序存储,若数组元素A[2][3]的存储地址为1087,A[4][7]的存储地址为1153,则数组元素A[6][7]的存储地址为 1207 。

127.在按层次遍历二叉树的算法中,需要借助的辅助数据结构是队列。

128.在任意一棵二叉树的前序序列和后序序列中,各叶子之间的相对次序关系都相同。

129.在一棵具有五层的满二叉树中,结点总数为 31 。

130.若用邻接矩阵表示一个有向图,则其中每一列包含的″1″的个数为图中每个顶点的入度。

131.图的邻接矩阵表示法适用于表示稠密图。

132.在对n个关键字进行直接选择排序的过程中,每一趟都要从无序区选出最小关键字元素,则在进行第i趟排序之前,无序区中关键字元素的个数为 n-i+1 。

133.下列排序算法中,其时间复杂度和记录的初始排列无关的是堆排序。

134.若有序表的关键字序列为(b,c,d,e,f,g,q,r,s,t),则在二分查找关键字b的过程中,先后进行比较的关键字依次为 f,c,b 。

135.若在文件中查询年龄在60岁以上的男性及年龄在55岁以上的女性的所有记录,则查询条件为(性别=“男”)AND(年龄> 60) OR(性别=“女”)AND(年龄>55)。136.下面程序段的时间复杂度为O(n2) 。

s=0;

for(i=1;i

for(j=1;j

s+=i*j;

137.已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针s指向

另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为q->next=s->next;s->next=p;。

138.在计算机内实现递归算法时所需的辅助数据结构是栈。

139.假设以数组A[m]存放循环队列的元素。已知队列的长度为length,指针rear指向队尾元素的下一个存储位置,则队头元素所在的存储位置为 (rear-length+m)%m 。140.通常将链串的结点大小设置为大于1是为了提高存储密度。

141.带行表的三元组表是稀疏矩阵的一种顺序存储结构。

142.表头和表尾均为空表的广义表是 (()) 。

143.用二叉链表表示具有n个结点的二叉树时,值为空的指针域的个数为 n+l 。144.为便于判别有向图中是否存在回路,可借助于拓扑排序算法。

145.连通网的最小生成树是其所有生成树中边的权值之和最小的生成树。

二、

1.数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储(或存储结构)无关,是独立于计算机的。

2.在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head 可用p表示为head= p->next->next 。

3.栈顶的位置是随着进栈和退栈操作而变化的。

4.在串S=”structure”中,以t为首字符的子串有 12 个。

5.假设一个9阶的上三角矩阵A按列优先顺序压缩存储在一维数组B中,其中B[0]存储矩

阵中第1个元素a

1,1 ,则B[31]中存放的元素是 a

4,8

6.已知一棵完全二叉树中共有768结点,则该树中共有 384 个叶子结点。

7.已知一个图的广度优先生成树如下图所示,则与此相应的广度优先遍历序列为abefcdg 。

8.一颗深度为k且有2 k-1个结点的二叉树称为满二叉树。

9.在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的关键字比较次数为2。

10.多重表文件和倒排文件都归属于多关键字文件。

11.设顺序循环队列Q[0:m-1]的队头指针和队尾指针分别为F和R,其中队头指针F指向当前队头元素的前一个位置,队尾指针R指向当前队尾元素所在的位置,则出队列的语句为F = (F+1) % m ; 。

12.设线性表中有n个数据元素,则在顺序存储结构上实现顺序查找的平均时间复杂度为O(n) 。

13.设一棵二叉树中有n个结点,则当用二叉链表作为其存储结构时,该二叉链表中共有2n个指针域, n+1 个空指针域。

14.设指针变量p指向单链表中结点A,指针变量s指向被插入的结点B,则在结点A的后面插入结点B的操作序列为 s->next=p->next; p->next=s 。

15.设无向图G中有n个顶点和e条边,则其对应的邻接表中有n个表头结点和 2e 个表结点。

16.已知一棵完全二叉树中共有768结点,则该树中共有 384 个叶子结点。

17.设一棵二叉树的前序遍历序列和中序遍历序列均为ABC,则该二叉树的后序遍历序列为CBA 。

18.设一棵完全二叉树中有21个结点,如果按照从上到下、从左到右的顺序从1开始顺序编号,则编号为8的双亲结点的编号是4,编号为8的左孩子结点的编号是 16 。19.两个空串联接得到的串的长度为 0 。

20.设一个连通图G中有n个顶点e条边,则其最小生成树上有 n-1 条边。

21.当问题的规模n趋向无穷大时,算法执行时间T(n)的数量级被称为算法的时间复杂度。

22.在链表的结点中,数据元素所占的存储量和整个结点所占的存储量之比称作存储密度。

23.已知链栈的结点结构如下图,栈顶指针为top,则实现将指针p所指结点插入栈顶的语句依次为p->next=top; 和 top=p; 。

24.空串的长度是 0 。

25.假设一个6阶的下三角矩阵B按列优先顺序压缩存储在一维数组A中,其中A[0]存

储矩阵的第一个元素b

11,则A[14]存储的元素是 b

63

26.在一棵度为3的树中,度为2的结点个数是1,度为0的结点个数是6,则度为3的结点个数是 2 。

27.如图所示的有向无环图可以排出 12 种不同的拓扑序列。

28.利用筛选法将关键字序列(37,66,48,29,31,75)建成的大根堆为( 75,66,48,29,31,37 )。

29.对长度为20的有序表进行二分查找的判定树的高度为 5 。

30.在多重表文件中,次关键字索引的组织方式是将次关键字相同的记录链接成一个链表。

31. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。

32. 多重表文件和倒排文件都归属于多关键字文件。

33. 栈下溢是指在栈空时进行出栈操作。

34. 已知substr(s , i , len ) 函数的功能是返回串s中第i个字符开始长度为len的子串,strlen(s)函数的功能是返回串s的长度。若s=”ABCDEFGHIJK”, t=”ABCD”,执行运算substr (s , strlen(t) , strlen(t) ) 后的返回值为”EFGH” 。

35. 去除广义表LS=(a

1,a

2

,a

3

,……,a

n

)中第1个元素,由其余元素构成的广义表称为LS的

表尾。

36. 已知完全二叉树T的第5层只有7个结点,则该树共有 11 个叶子结点。

37. 在有向图中,以顶点v为终点的边的数目称为v的入度。

38. 当关键字的取值范围是实数集合时,无法进行箱排序和基数排序。

39. 产生冲突现象的两个关键字称为该散列函数的同义词。

40. 假设散列文件中一个桶能存放m个记录,则桶“溢出”的含义是,当需要插入新的记录时,该桶中已有m个同义词的记录(或:已有m个记录;或:已满)。

41. 数据的逻辑结构描述数据元素之间的逻辑关系(或关系),与存储方式无关。

42. 在一个长度为100的顺序表中删除第10个元素时,需移动 90 个元素。

43. 队列的队尾位置通常是随着入队操作而变化的。

44. 两个空串联接得到的串的长度为 0 。

45. 控制区间和控制区域是 VSAM 文件的逻辑存储单位。

46. 已知一棵哈夫曼树含有60个叶子结点,则该树中共有 59 个非叶子结点。

47. 如下图所示的有向图中含有 2 个强连通分量。

48. 已知一组关键字为{15,36,28,97,24,78,47,52,13,86},其中每相邻两个关键字构成一个有序子序列。对这些子序列进行一趟两两归并的结果是{15,28,36,97,24,47,52,78,13,86}。

49. 从空树起,依次插入关键字1l,27,35,48,52,66和73构造所得的二叉排序树,在等概率查找的假设下,查找成功时的平均查找长度为 4 。

三、

1.算法是对特定问题求解步骤的一种描述,是指令的有限序列。

2.数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

3.二叉树是另一种树型结构,它的特点是每个结点至多只有二棵子树,并且,二叉树的子树有左右之分,其次序不能任意颠倒。

4.二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:

(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值。

(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。

(3)它的左、右子树也分别为二叉排序树。

5.假设在矩阵Amn中,有s个元素不为零,若s远远小于矩阵元素的总数(即:s<

6.数据结构:相互之间存在一种或多种特定关系的数据元素的集合。包括逻辑结构和物理结构。

7.栈:限定仅在表的一端进行插入或删除操作的线性表。

8.完全二叉树:若一颗二叉树至多只有最下面的两层上结点的度数可以小于2,并且最下一层上的结点都集中在该层最左边的若干位置上,则此二叉树称为完全二叉树。

9.排序:将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。10.二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树:

(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值。

(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。

(3)它的左、右子树也分别为二叉排序树。

11.线性表:线性表是由n(n≥0)个相同类型的元素组成的有序集合。

12.串:线性表的一种特殊形式,表中每个元素的类型为字符型,是一个有限的字符序列。13.广义表:由零个原子,或若干个原子或若干个广义表组成的有穷序列。

14.满二叉树:深度为k且有2k -1个结点的二叉树称为满二叉树。

15.ADT:抽象数据类型是一个数学模型和在该模型上定义的操作的集合。可以看作是数据的逻辑结构及其在逻辑结构上定义的操作。

16.关键字:用来标识文件中各个记录的特定数据项目的值。

17.排序:重新整理文件中的记录,使之按照关键字递增(或递减)次序排列起来。18.广义表:由零个原子,或若干个原子或若干个广义表组成的有穷序列。

19.二叉树:是另一种树型结构,它的特点是每个结点至多只有二棵子树,并且,二叉树的子树有左右之分,其次序不能任意颠倒。

20.队列:将线性表的插入和删除操作分别限制在表的两端进行,和栈相反,队列是一种先进先出的线性表。

21.链队列:队列的链式存储结构。是限制仅在表头删除和表尾插入的单链表。

22.多关键字文件:文件中的记录除了含有一个主关键字外,还含有若干个次关键字。23.广义表:由零个原子,或若干个原子或若干个广义表组成的有穷序列。

24.栈:限定仅在表尾进行插入或删除操作的线性表。

25.二叉树:是另一种树型结构,它的特点是每个结点至多只有二棵子树,并且,二叉树的子树有左右之分,其次序不能任意颠倒。

四、

1.已知森林如下图所示

该森林转化为对应的二叉树:

2.已知一无向图如下图所示

最小生成树:

3.已知一个无向图的顶点集为{a, b, c, d, e} ,其邻接矩阵如下所示

0100110010000110110110110???????????????

?

(1)画出该图的图形;

(2)根据邻接矩阵从顶点a 出发进行深度优先遍历和广度优先遍历,写出相应的遍历序列。

深度优先遍历序列为:abdce ;广度优先遍历序列为:abedc 。

4.设哈希表的地址空间为0~6,哈希函数H(K)=K MOD 7。请对关键字序列(32,13,49,18,22,38,23)按二次探测在哈希法解决冲突的办法构造哈希表。并求出查找成功的平均查找长度。

平均长度:ALS=8/7

5.假设通信电文使用的字符集为{a,b,c,d,e,f,g},字符的哈夫曼编码依次为:0110,10,110,111,00,0111和010。

(1)请根据哈夫曼编码画出此哈夫曼树,并在叶子结点中标注相应字符;

a

b c

d e

(2)若这些字符在电文中出现的频度分别为:3,35,13,15,20,5和9,求该哈夫曼树的带权路径长度。 WPL=4*(3+5)+3*(9+13+15)+2*(20+35)=253

6. 设某棵二叉树的中序遍历序列为DBEAC ,前序遍历序列为ABDEC ,要求:

(1)画出该二叉树;

(2)给出该二叉树的后序遍历序列。 DEBCA

7. 设无向图G (如右图所示),要求:

(1)给出该图的最小生成树上边的集合;

E={(1,5),(5,2),(5,3),(3,4)}

(2)计算该最小生成树各边上的权值之和。

W=1+1+2+6=10

8. 阅读下面的算法

LinkList mynote(LinkList L)

{//L 是不带头结点的单链表的头指针

if(L&&L->next){

q=L ;L=L ->next ;p=L ;

S1: while(p ->next) p=p ->next ;

S2: p ->next=q ;q ->next=NULL ;

}

return L;

}

请回答下列问题:

(1)说明语句S1的功能;查询链表的尾结点

(2)说明语句组S2的功能;将第一个结点链接到链表的尾部,作为新的尾结点

(3)设链表表示的线性表为(a1,a2, …,a n),写出算法执行后的返回值所表示的线性表。

(a2,a3,…,an,a1)

9.已知用有序链表存储整数集合的元素。阅读算法

fun:int fun(LinkList ha,LinkList hb)

{

//LinkList是带有头结点的单链表

//ha和hb分别为指向存储两个有序整数集合的链表的头指针

LinkList pa,pb;

pa=ha->next;

pb=hb->next;

while(pa && pb && pa->data==pb->data)

{ pa=pa->next;

pb=pb->next;

}

if (pa==NULL && pb==NULL) return 1;

else return 0;

}

(1)写出执行fun(a,b)的返回值,其中a和b分别为指向存储集合{2,4,5,7,9,12}和{2,4,5,7,9}的链表的头指针;0

(2)写出算法fun的时间复杂度;O(n)

(3)简述算法fun的功能。判断两个有序整数集合的链表是否相同(结点个数相同,对应结点的值相等),若相同,返回1;不同,返回0。

10.设一组初始记录关键字序列为(45,80,48,40,22,78),则分别给出第4趟简单选择

排序和第4趟直接插入排序后的结果。

第4趟简单选择排序后的结果(22,40,45,48,80,78)

第4趟直接插入排序后的结果 (40,45,48,80,22,78)

11.利用广义表的head和tail操作,可从广义表

L=((a,b),(c,d))

中分解得到原子c,其操作表达式为

head(head(tail(L)));

分别写出从下列广义表中分解得到b的操作表达式。

( 1 ) L1=(a.,b,c,d);答:L1=(a.,b,c,d)

( 2 ) L2=(((a),(b),(c),(d)))。答:L2=(((a),(b),(c),(d)))

12.画出与下列二叉树对应的森林。

答:

14.要在[0..n-l]的向量空间中建立两个栈stackl和stack2,

(1)应该如何设计这两个栈才能充分利用整个向量空间?

采用双向栈的形式,stack1的栈底设置在从数组下标为0的元素处,stack2的栈底设置在数组下标为n-1的元素处。

(2)若stackl的栈顶指针为topl,stack2的栈顶指针为top2,如果需要充分利用整个向量空间,

则:

栈stackl空的条件是:___ top1= 0________;

栈stack2空的条件是:___ top2= n - 1________;

栈stackl和栈stack2满的条件是:___ top1-1=top2________。

15.无向图G(如下图所示),用普里姆算法构造最小生成树所走过的边的集合为:

E={(1,3),(1,2),(3,5),(5,6),(6,4)}

16.

(1)英文缩写DAG的中文含义是:有向无环图。

(2)此DAG图的全部拓扑排序。

序列1:a b d c f e g

序列2:a b d c e f g

序列3:a d b c f e g

序列4:a d b c e f g

17.对7个关键字进行快速排序,在最好的情况下仅需进行10次关键字的比较。

(1) 假设关键字集合为{1,2,3,4,5,6,7},试举出能达到上述结果的初始关键字序列;4 7 1 3 6 5 2

(2) 对所举序列进行快速排序,写出排序过程。

初始关键字: 4 7 1 3 6 5 2

一次划分后得:( 2 3 1 ) 4 ( 6 5 7 )

继续划分后得:( 1) 2 (3) (5) 6 (7)

18.假设以数组seqn[m]存放循环队列的元素,设变量rear和quelen分别指示循环队列中队尾元素的位置和元素的个数。则:

队满的条件表达式:quelen = = m

队空的条件表达式:quelen = = 0

若m=40,rear=13,quelen=19,则队头元素的位置为:35

一般情况下队头元素位置的表达式为:(rear-quelen+1+m)%m 19.已知二叉树:

对应的森林:

20.已知广义表如下:

A=(B,y)

B=(x,L)

L=(a,b)

(1) 写出下列操作的结果

tail(A)=(y)。

head(B)= x _。

(2) 画出广义表A对应的图形表示。

数据结构学习总结

数据结构学习总结 经过一学期的学习,我对数据结构有了我自己的认识。一开始,我以为它和C语言和C++一样,都是讲一门语言。但学习之后,发现事实并不是这样,在数据结构的学习中,有线性表,有队,有栈,有树,有图等等。这些看起来没有关系,其实之间有着千丝万缕的联系。线性表是其中最简单的,所以在前几章学习,后面依次逐章变难,学起来也很吃力。 《数据结构与算法》以基本数据结构和算法设计策略为知识单元,系统地介绍了数据结构的知识与应用、计算机算法的设计与分析方法,主要内容包括线性表、树、图和广义表、算法设计策略以及查找与排序算法等。 线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。线性表具有如下的结构特点:均匀性:虽然不同数据表的数据元素可以是各种各样的,但对于同一线性表的各数据元素必定具有相同的数据类型和长度。有序性:各数据元素在线性表中的位置只取决于它们的序号,数据元素之前的相对位置是线性的,即存在唯一的“第一个“和“最后一个”的数据元素,除了第一个和最后一个外,其它元素前面均只有一个数据元素直接前驱和后面均只有一个数据元素(直接后继)。在实现线性表数据元素的存储方面,一般可用顺序存储结构和链式存储结构两种方法。链式存储结构将在本网站线性链表中介绍,本章主要介绍用数组实现线性表数据元素的顺序存储及其应用。另外栈、队列和串也是线性表的特殊情况,又称为受限的线性结构。 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生

数据结构课程设计

1.一元稀疏多项式计算器 [问题描述] 设计一个一元稀疏多项式简单计算器。 [基本要求] 输入并建立多项式; 输出多项式,输出形式为整数序列:n, c1, e1, c2, e2,……, cn, en ,其中n是多项式的项数,ci, ei分别是第i项的系数和指数,序列按指数降序排序; 多项式a和b相加,建立多项式a+b; 多项式a和b相减,建立多项式a-b; [测试数据] (2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9-x+12x-3) (1+x+x2+x3+x4+x5)+(-x3-x4)=(x5+x2+x+1) (x+x3)+(-x-x3)=0 (x+x2+x3)+0=(x3+x2+x) [实现提示] 用带头结点的单链表存储多项式,多项式的项数存放在头结点中。 2.背包问题的求解 [问题描述] 假设有一个能装入总体积为T的背包和n件体积分别为w1, w2, …,wn的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1+w2+…+wn=T,要求找出所有满足上述条件的解。例如:当T=10,各件物品的体积为{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)、(1,4,5)、(8,2)、(3,5,2) [实现提示] 可利用回溯法的设计思想来解决背包问题。首先,将物品排成一列,然后顺序选取物品转入背包,假设已选取了前i件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品“太大”不能装入,则弃之而继续选取下一件,直至背包装满为止。但如果在剩余的物品中找不到合适的物品以填满背包,则说明“刚刚”装入背包的那件物品“不合适”,应将它取出“弃之一边”,继续再从“它之后”的物品中选取,如此重复,直至求得满足条件的解,或者无解。 由于回溯求解的规则是“后进先出”因此自然要用到栈。 3.完全二叉树判断 用一个二叉链表存储的二叉树,判断其是否是完全二叉树。 4.最小生成树求解(1人) 任意创建一个图,利用克鲁斯卡尔算法,求出该图的最小生成树。 5.最小生成树求解(1人) 任意创建一个图,利用普里姆算法,求出该图的最小生成树。 6.树状显示二叉树 编写函数displaytree(二叉树的根指针,数据值宽度,屏幕的宽度)输出树的直观示意图。输出的二叉树是垂直打印的,同层的节点在同一行上。 [问题描述] 假设数据宽度datawidth=2,而屏幕宽度screenwidth为64=26,假设节点的输出位置用 (层号,须打印的空格数)来界定。 第0层:根在(0,32)处输出;

大学数据结构期末知识点重点总结(考试专用)

.. ;.. 第一章 概论 1.数据结构描述的是按照一定逻辑关系组织起来的待处理数据元素的表示及相关操作,涉及数据的逻辑结构、存储结构和运算 2.数据的逻辑结构是从具体问题抽象出来的数学模型,反映了事物的组成结构及事物之间的逻辑关系 可以用一组数据(结点集合K )以及这些数据之间的 一组二元关系(关系集合R )来表示:(K, R) 结点集K 是由有限个结点组成的集合,每一个结点代表一个数据或一组有明确结构的数据 关系集R 是定义在集合K 上的一组关系,其中每个关系r (r ∈R )都是K ×K 上的二元关系 3.数据类型 a.基本数据类型 整数类型(integer)、实数类型(real)、布尔类型(boolean)、字符类型(char )、指针类型(pointer ) b.复合数据类型 复合类型是由基本数据类型组合而成的数据类型;复合数据类型本身,又可参与定义结构更为复杂的结点类型 4.数据结构的分类:线性结构(一对一)、树型结构(一对多)、图结构(多对多) 5.四种基本存储映射方法:顺序、链接、索引、散列 6.算法的特性:通用性、有效性、确定性、有穷性 7.算法分析:目的是从解决同一个问题的不同算法中选择比较适合的一种,或者对原始算法进行改造、加工、使其优化 8.渐进算法分析 a .大Ο分析法:上限,表明最坏情况 b .Ω分析法:下限,表明最好情况 c .Θ分析法:当上限和下限相同时,表明平均情况 第二章 线性表 1.线性结构的基本特征 a.集合中必存在唯一的一个“第一元素” b.集合中必存在唯一的一个“最后元素” c.除最后元素之外,均有唯一的后继 d.除第一元素之外,均有唯一的前驱 2.线性结构的基本特点:均匀性、有序性 3.顺序表 a.主要特性:元素的类型相同;元素顺序地存储在连续存储空间中,每一个元素唯一的索引值;使用常数作为向量长度 b. 线性表中任意元素的存储位置:Loc(ki) = Loc(k0) + i * L (设每个元素需占用L 个存储单元) c. 线性表的优缺点: 优点:逻辑结构与存储结构一致;属于随机存取方式,即查找每个元素所花时间基本一样 缺点:空间难以扩充 d.检索:ASL=【Ο(1)】 e .插入:插入前检查是否满了,插入时插入处后的表需要复制【Ο(n )】 f.删除:删除前检查是否是空的,删除时直接覆盖就行了【Ο(n )】 4.链表 4.1单链表 a.特点:逻辑顺序与物理顺序有可能不一致;属于顺序存取的存储结构,即存取每个数据元素所花费的时间不相等 b.带头结点的怎么判定空表:head 和tail 指向单链表的头结点 c.链表的插入(q->next=p->next; p->next=q;)【Ο(n )】 d.链表的删除(q=p->next; p->next = q->next; delete q;)【Ο(n )】 e.不足:next 仅指向后继,不能有效找到前驱 4.2双链表 a.增加前驱指针,弥补单链表的不足 b.带头结点的怎么判定空表:head 和tail 指向单链表的头结点 c.插入:(q->next = p->next; q->prev = p; p->next = q; q->next->prev = q;) d.删除:(p->prev->next = p->next; p->next->prev = p->prev; p->prev = p->next = NULL; delete p;) 4.3顺序表和链表的比较 4.3.1主要优点 a.顺序表的主要优点 没用使用指针,不用花费附加开销;线性表元素的读访问非常简洁便利 b.链表的主要优点 无需事先了解线性表的长度;允许线性表的长度有很大变化;能够适应经常插入删除内部元素的情况 4.3.2应用场合的选择 a.不宜使用顺序表的场合 经常插入删除时,不宜使用顺序表;线性表的最大长度也是一个重要因素 b.不宜使用链表的场合 当不经常插入删除时,不应选择链表;当指针的存储开销与整个结点内容所占空间相 比其比例较大时,应该慎重选择 第三章 栈与队列 1.栈 a.栈是一种限定仅在一端进行插入和删除操作的线性表;其特点后进先出;插入:入栈(压栈);删除:出栈(退栈);插入、删除一端被称为栈顶(浮动),另一端称为栈底(固定);实现分为顺序栈和链式栈两种 b.应用: 1)数制转换 while (N) { N%8入栈; N=N/8;} while (栈非空){ 出栈; 输出;} 2)括号匹配检验 不匹配情况:各类括号数量不同;嵌套关系不正确 算法: 逐一处理表达式中的每个字符ch : ch=非括号:不做任何处理 ch=左括号:入栈 ch=右括号:if (栈空) return false else { 出栈,检查匹配情况, if (不匹配) return false } 如果结束后,栈非空,返回false 3)表达式求值 3.1中缀表达式: 计算规则:先括号内,再括号外;同层按照优先级,即先乘*、除/,后加+、减-;相同优先级依据结合律,左结合律即为先左后右 3.2后缀表达式: <表达式> ::= <项><项> + | <项> <项>-|<项> <项> ::= <因子><因子> * |<因子><因子>/|<因子> <因子> ::= <常数> ? <常数> ::= <数字>|<数字><常数> <数字> ∷= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 3.3中缀表达式转换为后缀表达式 InfixExp 为中缀表达式,PostfixExp 为后缀表达式 初始化操作数栈OP ,运算符栈OPND ;OPND.push('#'); 读取InfixExp 表达式的一项 操作数:直接输出到PostfixExp 中; 操作符: 当‘(’:入OPND; 当‘)’:OPND 此时若空,则出错;OPND 若非空,栈中元 素依次弹出,输入PostfixExpz 中,直到遇到‘(’为止;若 为‘(’,弹出即可 当‘四则运算符’:循环(当栈非空且栈顶不是‘(’&& 当前运算符优先级>栈顶运算符优先级),反复弹出栈顶运 算符并输入到PostfixExp 中,再将当前运算符压入栈 3.4后缀表达式求值 初始化操作数栈OP ; while (表达式没有处理完) { item = 读取表达式一项; 操作数:入栈OP ; 运算符:退出两个操作数, 计算,并将结果入栈} c.递归使用的场合:定义是递归的;数据结构是递归的;解决问题的方法是递归的 2.队列 a.若线性表的插入操作在一端进行,删除操作在另一端进行,则称此线性表为队列 b.循环队列判断队满对空: 队空:front==rear ;队满:(rear+1)%n==front 第五章 二叉树 1.概念 a. 一个结点的子树的个数称为度数 b.二叉树的高度定义为二叉树中层数最大的叶结点的层数加1 c.二叉树的深度定义为二叉树中层数最大的叶结点的层数 d.如果一棵二叉树的任何结点,或者是树叶,或者恰有两棵非空子树,则此二叉树称作满二叉树 e.如果一颗二叉树最多只有最下面的两层结点度数可以小于2;最下面一层的结点都集中在该层最左边的位置上,则称此二叉树为完全二叉树 f.当二叉树里出现空的子树时,就增加新的、特殊的结点——空树叶组成扩充二叉树,扩充二叉树是满二叉树 外部路径长度E :从扩充的二叉树的根到每个外部结点(新增的空树叶)的路径长度之和 内部路径长度I :扩充的二叉树中从根到每个内部结点(原来二叉树结点)的路径长度之和 2.性质 a. 二叉树的第i 层(根为第0层,i ≥0)最多有2^i 个结点 b. 深度为k 的二叉树至多有2k+1-1个结点 c. 任何一颗二叉树,度为0的结点比度为2的结点多一个。n0 = n2 + 1 d. 满二叉树定理:非空满二叉树树叶数等于其分支结点数加1 e. 满二叉树定理推论:一个非空二叉树的空子树(指针)数目等于其结点数加1 f. 有n 个结点(n>0)的完全二叉树的高度为?log2(n+1)?,深度为?log2(n+1)?? g. 对于具有n 个结点的完全二叉树,结点按层次由左到右编号,则有: 1) 如果i = 0为根结点;如果i>0,其父结点编号是 (i-1)/2 2) 当2i+1∈N ,则称k 是k'的父结 点,k'是的子结点 若有序对∈N , 则称k'k ″互为兄弟 若有一条由 k 到达ks 的路径,则 称k 是的祖先,ks 是k 的子孙 2.树/森林与二叉树的相互转换 a.树转换成二叉树 加线: 在树中所有兄弟结点之间加一连线 抹线: 对每个结点,除了其最左孩子外,与其余孩 子之间的连线 旋转: 45° b.二叉树转化成树 加线:若p 结点是双亲结点的左孩子,则将的右孩子,右孩子的右孩子,所有右孩子,都与p 的双亲用线连起来 线 调整:将结点按层次排列,形成树结构 c.森林转换成二叉树 将各棵树分别转换成二叉树 将每棵树的根结点用线相连 为轴心,顺时针旋转,构成二叉树型结构 d.二叉树转换成森林 抹线:将二叉树中根结点与其右孩子连线,及沿右分支搜索到 的所有右孩子间连线全部抹掉,使之变成孤立的二叉树 还原:将孤立的二叉树还原成树 3.周游 a.先根(次序)周游 若树不空,则先访问根结点,然后依次先根周游各棵子树 b.后根(次序)周游 若树不空,则先依次后根周游各棵子树,然后访问根结点 c.按层次周游 若树不空,则自上而下自左至右访问树中每个结点 4.存储结构 “左子/右兄”二叉链表表示法:结点左指针指向孩子,右结点指向右兄弟,按树结构存储,无孩子或无右兄弟则置空 5. “UNION/FIND 算法”(等价类) 判断两个结点是否在同一个集合中,查找一个给定结点的根结点的过程称为FIND 归并两个集合,这个归并过程常常被称为UNION “UNION/FIND ”算法用一棵树代表一个集合,如果两个结点在同一棵树中,则认为它们在同一个集合中;树中的每个结点(除根结点以外)有仅且有一个父结点;结点中仅需保存父指针信息,树本身可以 存储为一个以其结点为元素的数组 6.树的顺序存储结构 a. 带右链的先根次序表示法 在带右链的先根次序表示中,结点按先根次序顺序存储在一片连续的存储单元中 每个结点除包括结点本身数据外,还附加两个表示结构的信息字段,结点的形式为: info 是结点的数据;rlink 是右指针,指向结点的下一个兄弟;ltag 是一个左标记,当结点没有子结点(即对应二 叉树中结点没有左子结点时),ltag 为 1,否则为 0 b. 带双标记位的先根次序表示法 规定当结点没有下一个兄弟(即对应的二叉树中结点没有右子结点时)rtag 为1,否则为0 c. 带双标记位的层次次序表示法 结点按层次次序顺序存储在一片连续的存储单元中 第七章 图 1.定义 a.假设图中有n 个顶点,e 条边: 含有e=n(n-1)/2条边的无向图称作完全图 含有e=n(n-1) 条弧的有向图称作有向完全图 若边或弧的个数e < nlogn ,则称作稀疏图,否则称作稠密图 b. 顶点的度(TD)=出度(OD)+入度(ID) 顶点的出度: 以顶点v 为弧尾的弧的数目 顶点的入度: 以顶点v 为弧头的弧的数目 c.连通图、连通分量 若图G 中任意两个顶点之间都有路径相通,则称此图为连通图 若无向图为非连通图,则图中各个极大连通子图称作此图的连通分量 d.强连通图、强连通分量 对于有向图,若任意两个顶点之间都存在一条有向路径,则称此有向图为强连通图 否则,其各个极大强连通子图称作它的强连通分量 e.生成树、生成森林 假设一个连通图有n 个顶点和e 条边,其中n-1条边和n 个顶点构成一个极小连通子图,称该极小连通子图为此连通图的生成树 对非连通图,则将由各个连通分量构成的生成树集合称做此非连通图的生成森林 2.存储结构 a.相邻矩阵表示法 表示顶点间相邻关系的矩阵 若G 是一个具有n 个顶点的图,则G 的相邻矩阵是如下定义的n ×n 矩阵: A[i,j]=1,若(Vi, Vj)(或)是图G 的边 A[i,j]=0,若(Vi, Vj)(或)不是图G 的边 b.邻接表表示法 为图中每个顶点建立一个单链表,第i 个单链表中的结点表示依附于顶点Vi 的边(有向图中指以Vi 为尾的弧)(建立单链表时按结点顺序建立) 3.周游 a. 深度优先周游: 从图中某个顶点V0出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发,深度优先搜索遍历图中的其余顶点,直至图中所有与V0有路径相通的顶点都被访问到为止 b. 广度优先周游: 从图中的某个顶点V0出发,并在访问此顶点之后依次访问V0的所有未被访问过的邻接点,随后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有与V0有路径相通的顶点都被访问到为止,若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止 4.拓扑排序 拓扑排序的方法是:1)选择一个入度为0的顶点且输出之 2)从图中删掉此顶点及所有的出边 3)回到第1步继续执行,直至图空或者图不空但找不到无前驱(入度为0)的顶点为止 5.单源最短路径(Dijkstra 算法) 6.每对顶点间的最短路径(Floyd 算法) 7.最小生成树 a.Prim 算法 b.Kruskal 算法 c.两种算法比较:Prim 算法适合稠密图,Kruskal 算法适合稀疏图 第八章 内排序 算法 最大时间 平均时间 直接插入排序 Θ(n2) Θ(n2) 冒泡排序 Θ(n2) Θ(n2) 直接选择排序 Θ(n2) Θ(n2) Shell 排序 Θ(n3/2) Θ(n3/2) 快速排序 Θ(n2) Θ(nlog n) 归并排序 Θ(nlog n) Θ(nlog n) 堆排序 Θ(nlog n) Θ(nlog n) 桶式排序 Θ(n+m) Θ(n+m) 基数排序 Θ(d ·(n+r)) Θ(d ·(n+r)) 最小时间 S(n) 稳定性 Θ(n) Θ(1) 稳定 Θ(n) Θ(1) 稳定 Θ(n2) Θ(1) 不稳定 Θ(n3/2) Θ(1) 不稳定 Θ(nlog n) Θ(log n) 不稳定 Θ(nlog n) Θ(n) 稳定 Θ(nlog n) Θ(1) 不稳定 Θ(n+m) Θ(n+m) 稳定 Θ(d ·(n+r)) Θ(n+r) 稳定 第十章 检索 1.平均检索长度(ASL )是待检索记录集合中元素规模n 的函数, 其定义为: ASL= Pi 为检索第i 个元素的概率;Ci 为找到第i 个元素所需的比较次数 2.散列 a.除余法 用关键码key 除以M(取散列表长度),并取余数作为散列地址 散列函数为:hash(key) = key mod M b.解决冲突的方法 开散列方法:把发生冲突的关键码存储在散列表主表之外(在主表外拉出单链表) 闭散列方法:把发生冲突的关键码存储在表中另一个位置上 c.线性探查 基本思想:如果记录的基位置存储位置被占用,就在表中下移,直到找到一个空存储位置;依次探查下述地址单元:d0+1,d0+2,...,m-1,0, 1,..., d0-1;用于简单线性探查的探查函数是:p(K, i) = i d.散列表的检索 1.假设给定的值为K ,根据所设定的散列函数h ,计算出散列地址h(K) 2. 如果表中该地址对应的空间未被占用,则检索失败,否则将该地址中的值与K 比较 3. 若相等则检索成功;否则,按建表时设定的处理冲突方法查找探查序列的下一个地址,如此反复下去,直到某个地址空间未被占用(可以插入),或者关键码比较相等(有重复记录,不需插入)为止 e.散列表的删除:删除后在删除地点应加上墓碑(被删除标记) f.散列表的插入:遇到墓碑不停止,知道找到真正的空位置 第十一章 索引技术 1.概念: a.主码:数据库中的每条记录的唯一标识 b.辅码:数据库中可以出现重复值的码 2.B 树 a.定义:B 树定义:一个m 阶B 树满足下列条件: (1) 每个结点至多有m 个子结点; (2) 除根和叶外 其它每个结点至少有??个子结点; (3) 根结点至少有两个子结点 例外(空树,or 独根) (4) 所有的叶在同一层,可以有??- 1到m-1个关键码 (5) 有k 个子结点的非根结点恰好包含k-1个关键码 b.查找 在根结点所包含的关键码K1,…,Kj 中查找给定的关键码值(用顺序检索(key 少)/二分检索(key 多));找到:则检索成功;否则,确定要查的关键码值是在某个Ki 和Ki+1之间,于是取pi 所指结点继续查找;如果pi 指向外部结点,表示检索失败. c.插入 找到的叶是插入位置,若插入后该叶中关键码个数

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

大连理工大学软件学院2014数据结构期末考试)

一、选择(2’×15=30’) 1.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时 间复杂度为( ) A.O(0) B.O(1) C.O(n) D.O(n2) 2.用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾 结点,则在进行删除操作时( ) A.仅修改队头指针 B.仅修改队尾指针 C.队头、队尾指针都不修改 D.队头、队尾指针都可能要修改 3.设栈S和队列Q的初始状态均为空,元素a,b,c,d,e,f,g依次进入栈S,若每个元素出栈 后立即进入队列Q,且7个元素出队的顺序是b,d,c,f,e,a,g,则栈S的容量至少是( ) A.1 B.2 C.3 D.4 4.对n(n≥2)个权值均不相同的字符构成哈夫曼树,关于该树的叙述中,错误的是( ) A.该树一定是一棵完全二叉树 B.树中一定没有度为1的结点 C.树中两个权值最小的结点一定是兄弟结点 D.树中任一非叶结点的权值一定不小于下一层任一结点的权值 5.一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是( ) A.CABDEFG B.ABCDEFG C.DACEFBG D.ADCFEG 6.下列线索二叉树中(用虚线表示线索),符合后序线索二叉树定义的是( D) 7.下面关于二分查找的叙述正确的是( ) A.表必须有序,表可以顺序方式存储,也可以链表方式存储 B.表必须有序,且表中数据必须是整型,实型或字符型 C.表必须有序,而且只能从小到大排列 D.表必须有序,且表只能以顺序方式存储 8.下列排序算法中,在每一趟都能选出一个元素放到其最终位置上,并且其时间性能受 数据初始特性影响的是( ) A.直接插入排序 B.快速排序 C.直接选择排序 D.堆排序 9.下列关于无向连通图特性的叙述中,正确的是( ) I.所有顶点的度之和为偶数 II.边数大于顶点个数减1

数据结构学习总结

数据结构与算法课程学习总结 2010年 5月 17日 班级:08计本(2)班姓名:谷敏敏学号:0804012023 时光飞逝,转眼之间,经过十几周的学习,“数据结构与算法”这门课程也已经接近尾声。通过学习、实验,我们明白“数据结构与算法”这门课是我们计算机专业人才培养计划中的一门必修的核心课程,同时也是计算机科学与技术专业同学的一门重要的基础专业课,重要之处不言而喻,所以,对于这门课大家也是比较认真投入的,学的也是比较尽心。当然这还与老师独特的教学风格以及不少的实验训练是密不可分的。 对于本学科的知识内容的概括、总结可如下所示: 1.第一章中是介绍的本学科的的一些基础、相关概念,如数据、数据元素、数据类型 以及数据结构的定义。其中,数据结构包括逻辑结构、存储结构和运算集合。逻辑 结构分为四类:集合型、线性、树形和图形结构,数据元素的存储结构分为:顺序 存储、链接存储、索引存储和散列存储四类。紧接着介绍了一些常用的数据运算。 最后着重介绍算法性能分析,包括算法的时间性能分析以及算法的空间性能分析。 2.第二章具体地介绍了顺序表的概念、基本运算及其应用。基本运算有:初始化表、 求表长、排序、元素的查找、插入及删除等。而关于元素查找方法课本例举了多种 方法,有:简单顺序查找、二分查找和分块查找。排序方法有:直接插入排序、希 尔排序、冒泡排序、快速排序、直接选择排序及归并排序等。最后介绍了顺序串的 概念以及字符处理问题,其重点核心内容在于串的模式匹配。 3.第三章介绍的是链表及其应用,链表中数据元素的存储不一定是连续的,还可以占 用任意的、不连续的物理存储区域。与顺序表相比,链表的插入、删除等功能是不 需要移动元素的,只需变化指针的取向即可,算法简单快捷,。链表这一章中介绍 了链表的节点结构、静态与动态链表的概念、链表的基本运算(如求表长、插入、 查找、删除等)、单链表的建立(头插法和尾插法)以及双向循环链表的定义、结 构、功能和基本算法。 4.第四章和第五章是关于堆栈和队列的介绍与应用。堆栈与队列是两种运算受限制的 线性结构。其基本运算方法与顺序表和链表运算方法基本相同,不同的是堆栈须遵 循“先进后出”的规则,对堆栈的操作只能在栈顶进行;而队列要遵循“先进先 出”的规则,课本中列出了两种结构的相应的基本算法,如入栈、出栈、入队、出 队等。在介绍队列时,提出了循环队列的概念,以避免“假溢出”的现象。同时, 对于其应用也分别讲述了如括号匹配问题等。 5.第六章介绍了特殊矩阵和广义表的概念与应用。其中,特殊矩阵包括对称矩阵、三 角矩阵、对角矩阵和稀疏矩阵等,课本中分别详细介绍了它们的存储结构。稀疏矩 阵的应用包括转置和加法运算等。最后介绍了广义表的相关概念及存储结构,关于 关于广义表的应用有:m元多项式的表示问题。 6.第七章是关于二叉树及其应用。在介绍有关概念时,提到了二叉树的性质以及两种 特殊的二叉树:完全二叉树和满二叉树。接着介绍二叉树的顺序存储和链接存储以 及生成算法。重点介绍二叉树的遍历算法(递归算法、先序、中序和后序遍历非递 归算法)和线索二叉树。二叉树的应用:基本算法、哈弗曼树、二叉排序树和堆与 堆排序。本章为本课程重点内容,需要重点掌握。

大数据标准体系

附件1 大数据标准体系 序号一级分类二级分类国家标准编号标准名称状态 1 基础标准总则信息技术大数据标准化指南暂时空缺 2 术语信息技术大数据术语已申报 3 参考模型信息技术大数据参考模型已申报 4 数据处理数据整理GB/T 18142-2000 信息技术数据元素值格式记法已发布 5 GB/T 18391.1-2009 信息技术元数据注册系统(MDR)第1部分:框架已发布 6 GB/T 18391.2-2009 信息技术元数据注册系统(MDR)第2部分:分类已发布 7 GB/T 18391.3-2009 信息技术元数据注册系统(MDR)第3部分:注册系统元模型与基本属性已发布 8 GB/T 18391.4-2009 信息技术元数据注册系统(MDR)第4部分:数据定义的形成已发布 9 GB/T 18391.5-2009 信息技术元数据注册系统(MDR)第5部分:命名和标识原则已发布 10 GB/T 18391.6-2009 信息技术元数据注册系统(MDR)第6部分:注册已发布 11 GB/T 21025-2007 XML使用指南已发布 12 GB/T 23824.1-2009 信息技术实现元数据注册系统内容一致性的规程第1 部分:数据元已发布 13 GB/T 23824.3-2009 信息技术实现元数据注册系统内容一致性的规程第3 部分:值域已发布 14 20051294-T-339 信息技术元模型互操作性框架第1部分:参考模型已报批 15 20051295-T-339 信息技术元模型互操作性框架第2部分:核心模型已报批 16 20051296-T-339 信息技术元模型互操作性框架第3部分:本体注册的元模型已报批 17 20051297-T-339 信息技术元模型互操作性框架第4部分:模型映射的元模型已报批 18 20080046-T-469 信息技术元数据模块(MM) 第1 部分:框架已报批

最新数据结构实训总结

精品文档 这次课程设计的心得体会通过实习我的收获如下1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。从刚开始得觉得很难,到最后把这个做出来,付出了很多,也得到了很多,以前总以为自己对编程的地方还不行,现在,才发现只要认真做,没有什么不可能。 编程时要认真仔细,出现错误要及时找出并改正,(其中对英语的要求也体现出来了,因为它说明错误的时候都是英语)遇到问题要去查相关的资料。反复的调试程序,最好是多找几个同学来对你的程序进行调试并听其对你的程序的建议,在他们不知道程序怎么写的时候完全以一个用户的身份来用对你的用户界面做一些建议,正所谓当局者迷旁观者清,把各个注意的问题要想到;同时要形成自己的编写程序与调试程序的风格,从每个细节出发,不放过每个知识点,注意与理论的联系和理论与实践的差别。另外,要注意符号的使用,注意对字符处理,特别是对指针的使用很容易出错且调试过程是不会报错的,那么我们要始终注意指针的初始化不管它怎么用以免不必要麻烦。 通过近两周的学习与实践,体验了一下离开课堂的学习,也可以理解为一次实践与理论的很好的连接。特别是本组所做的题目都是课堂上所讲的例子,在实行之的过程中并不是那么容易事让人有一种纸上谈兵的体会,正所谓纸上得来终觉浅绝知此事要躬行。实训过程中让我们对懂得的知识做了进一步深入了解,让我们的理解与记忆更深刻,对不懂的知识与不清楚的东西也做了一定的了解,也形成了一定的个人做事风格。 通过这次课程设计,让我对一个程序的数据结构有更全面更进一步的认识,根据不同的需求,采用不同的数据存储方式,不一定要用栈,二叉树等高级类型,有时用基本的一维数组,只要运用得当,也能达到相同的效果,甚至更佳,就如这次的课程设计,通过用for的多重循环,舍弃多余的循环,提高了程序的运行效率。在编写这个程序的过程中,我复习了之前学的基本语法,哈弗曼树最小路径的求取,哈弗曼编码及译码的应用范围,程序结构算法等一系列的问题它使我对数据结构改变了看法。在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,也从中发现自己平时学习的不足和薄弱环节,从而加以弥补。 精品文档

数据结构课程设计报告

《数据结构课程设计》报告 题目:课程设计题目2教学计划编制 班级:700 学号:09070026 姓名:尹煜 完成日期:2011年11月7日

一.需求分析 本课设的任务是根据课程之间的先后的顺序,利用拓扑排序算法,设计出教学计划,在七个学期中合理安排所需修的所有课程。 (一)输入形式:文件 文件中存储课程信息,包括课程名称、课程属性、课程学分以及课程之间先修关系。 格式:第一行给出课程数量。大于等于0的整形,无上限。 之后每行按如下格式“高等数学公共基础必修6.0”将每门课程的具体信息存入文件。 课程基本信息存储完毕后,接着给出各门课程之间的关系,把每门课程看成顶点,则关系即为边。 先给出边的数量。大于等于0的整形。 默认课程编号从0开始依次增加。之后每行按如下格式“1 3”存储。此例即为编号为1的课程与编号为3的课程之间有一条边,而1为3的前驱,即修完1课程才能修3课程。 例: (二)输出形式:1.以图形方式显示有向无环图

2.以文本文件形式存储课程安排 (三)课设的功能 1.根据文本文件中存储的课程信息(课程名称、课程属性、课程学分、课程之间关系) 以图形方式输出课程的有向无环图。 拓展:其显示的有向无环图可进行拖拽、拉伸、修改课程名称等操作。 2.对课程进行拓扑排序。 3.根据拓扑排序结果以及课程的学分安排七个学期的课程。 4.安排好的教学计划可以按图形方式显示也可存储在文本文件里供用户查看。 5.点击信息菜单项可显示本人的学好及姓名“09070026 尹煜” (四)测试数据(见六测设结果)

二.概要设计 数据类型的定义: 1.Class Graph即图类采用邻接矩阵的存储结构。类中定义两个二维数组int[][] matrix 和Object[][] adjMat。第一个用来标记两个顶点之间是否有边,为画图服务。第二个 是为了实现核心算法拓扑排序。 2.ArrayList list用来存储课程信息。DrawInfo类是一个辅助画图的类,其中 包括成员变量num、name、shuxing、xuefen分别代表课程的编号、名称、属性、 学分。ArrayList是一个DrawInfo类型的数组,主要用来在ReadFile、DrawG、DrawC、SaveFile、Window这些类之间辅助参数传递,传递课程信息。 3.Class DrawInfo, 包括int num;String name;String shuxing;float xuefen;四个成员变量。 4.Class Edge包括int from;int to;double weight;三个成员变量。 5.Class Vertex包括int value一个成员变量。 主要程序的流程图: //ReadFile.java

安徽大学2014数据结构期末考试试卷(A卷)

安徽大学2014-2015学年第一学期《数据结构》期末考试试卷(A卷) (含参考答案) 一、单项选择题(本大题共15小题,第小题2分,共30分)在每小题列出的四个选项中只有一 个符合题目要求,请将其代码填在题后的括号内。错选或未选均无分。 1. 算法必须具备输入、输出和[ C ] A. 计算方法 B. 排序方法 C.解决问题的有限运算步骤 D. 程序设计方法 2. 有n个节点的顺序表中,算法的时间复杂度是O(1)的操作是[ A ] A.访问第i个节点(1≤i≤n) B.在第i个节点后插入一个新节点(1≤i≤n) C.删除第i个节点(1≤i≤n) D.将n个节点从小到大排序 3.单链表的存储密度[ C] A.大于1 B. 等于1 C.小于1 D. 不能确定 4. 循环队列SQ的存储空间是数组d[m],队头、队尾指针分别是front和rear,则执行出队后其头指针front值是[ D ] A.front=front+1 B. front=(front+1)%(m-1) C. front=(front-1)%m D. front=(front+1)%m 5. 在一个具有n个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是 [ B ] A. O(1) B. O(n) C. O(n2) D. O(nlogn) 6 设二维数组A[0..m-1][0..n-1]按行优先顺序存储,则元素A[i][j]的地址为 [ B ] A.LOC(A[0][0])+(i*m+j) B.LOC(A[0][0])+(i*n+j) C.LOC(A[0][0])+[(i-1)*n+j-1] D. LOC(A[0][0])+[(i-1)*m+j-1] 7.设将整数1,2,3,4,5依次进栈,最后都出栈,出栈可以在任何时刻(只要栈不空)进行,则出栈序列不可能是[ B] A.23415 B. 54132 C.23145 D. 15432

关于数据结构课程设计心得体会范文

关于数据结构课程设计心得体会范文 心得体会是指一种读书、实践后所写的感受性文字。是指将学习的东西运用到实践中去,通过实践反思学习内容并记录下来的文字,近似于经验总结。下面是小编搜集的关于数据结构课程设计心得体会范文,希望对你有所帮助。 关于数据结构课程设计心得体会(1) 这学期开始两周时间是我们自己选题上机的时间,这学期开始两周时间是我们自己选题上机的时间,虽然上机时间只有短短两个星期但从中确实学到了不少知识。上机时间只有短短两个星期但从中确实学到了不少知识。 数据结构可以说是计算机里一门基础课程,据结构可以说是计算机里一门基础课程,但我觉得我们一低计算机里一门基础课程定要把基础学扎实,定要把基础学扎实,然而这次短短的上机帮我又重新巩固了 c 语言知识,让我的水平又一部的提高。数据结构这是一门语言知识让我的水平又一部的提高。数据结构这是一门知识,纯属于设计的科目,它需用把理论变为上机调试。 纯属于设计的科目,它需用把理论变为上机调试。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。来说具有一定的难度。它是其它编程语言的一门基本学科。我选的上机题目是交叉合并两个链表,对这个题目,我选的上机题目是交叉合并两个链表,对这个题目,我觉得很基础。刚开始调试代码的时候有时就是一个很小的错觉得很基础。 刚开始调试代码的时候有时就是一个很小的错调试代码的时候误,导致整个程序不能运行,然而开始的我还没从暑假的状导致整个程序不能运行,态转到学习上,每当程序错误时我都非常焦躁,态转到学习上,每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终找到了状态,一步一步慢慢来,放弃,但我最终找到了状态,一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件! 同时,通过此次课程设计使我了解到,必然具备的条件! 同时,通过此次课程设计使我了解到,硬件语言必不可缺少,要想成为一个有能力的人,必须懂得件语言必不可缺少,要想成为一个有能力的人,硬件

相关文档
最新文档