数据结构习题集锦
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
chap2课堂练习
• 表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概 率相等时,插入一个元素所需移动元素的平均次数为(),删除一个元 素需要移动的元素的个数为()。 • 对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为() A O(n) O(n) B O(n) O(1) C O(1) O(n) D O(1) O(1) • 在一个单链表中,若删除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 • 不带头结点的单链表head为空的判定条件是()。 A head==NULL B head->next==NULL C head->next==head D head!=NULL • 在单链表中,要删除某一指定结点,必须找到该结点的()结点。 • 对于一个具有n个Βιβλιοθήκη Baidu点的单链表,在*p结点后插入一个新结点的时间复杂 度是();在给定值为x的结点后插入一个新结点的时间复杂度是()
b
d g e
c
f
h
i
• 已知一个森林的先序序列和中序序列如下, 请构造森林。 先序序列:ABCDEFGHIJKLMNO 中序序列:CDEBFHIJGAMLONK
A
B
F
G
C
D
E
H
I
J
K
L
N
M
O
• 有7个带权结点,其权值分别为4,7,8,2, 5,16,30,试以它们为叶子结点构造一棵 哈夫曼树(要求按每个结点的左子树根结 点的权值小于或等于右子树根结点的权值 的次序构造),并计算其带权路径长度WPL.
• 栈和队列的共同点是() A都是先进先出 B都是先进后出 C只允许在端点处插入和删 除元素 D没有共同点 • 一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列 是()。 A edcba B decba C dceab D abcde • 判定一个栈ST(最多元素为MaxSize)为空的条件是()。 A ST->top!=0 B ST->top==0 C ST->top!=MaxSize-1 D ST->top==MaxSize-1 • 若用一个大小为6的一维数组来实现循环队列,且当前 rear和front的值分别为0和3。当从队列中删除一个元素, 再加入两个元素后,rear和front的值分别是()。 A 1和5 B 2和4 C 4和2 D 5和1 • 在一个链队中,假设f和r分别为队头和队尾指针,则插入s 所指结点的运算时()。 A f->next=s;f=s; B r->next=s;r=s; C s->next=r;r=s; D s->next=f;f=s
§2.2 线性表的顺序表示和实现----顺序表
①逆置顺序表
逆置前: (a1,a2,...,ai-1,ai,ai+1,...,an-1,an)
逆置后: (an,an-1,...,ai+1,ai,ai-1,...,a2,a1)
§2.2 线性表的顺序表示和实现----顺序表 逆置顺序表演示
a1
0
a2
1
9 ∞ 0 7
10 4 7 ∞ 0
• 已知AOE网如图所示,求: • (1)完成此工程需要的时间 • (2)该AOE网的关键路径
V2
a6=4
a1=3
v5
a7=1 a10=3
v1
a3=2
a4=2 a2=6
a5=1
v4 v6
• 怎样判定循环队列的空和满?并给出循环 队列中元素个数的计算式(设队列最大长 度为N,队首指针front,队尾指针rear) • 试写一个算法,识别依次读入的一个以@为 结束符的字符序列是否为形如‘序列1&序 列2’模式的字符序列。其中序列1和序列2中 都不含字符‘&’,且序列2是序列1的逆序列, 例如:‘a+b&b+a’是属于该模式的字符序列, 而’1+3&3-1’则不是。
作业
• 已知某图的邻接表如图所示 (1)写出此邻接表对应的邻接矩阵 (2)写出由v1开始的深度优先遍历的序列 (3)写出由v1开始的广度优先遍历序列
1
2 3 4 5
6
V1 V2 V3 V4 V5 V6
2
3 5∧ 5∧ 6∧ 3∧
4∧
1
1 1
2 4∧
//将数组E自下标s至下标t之间的元素逆置
while(s<t) E[s++] E[t--] ; }
void InvertSqList( SqList L ) {
//将顺序表L中的所有元素逆置
invert(L.elem, 0, L.length-1); }
②在有序顺表L中插入新结点,使得L仍然有序
…
am-1 am
m-2 m-1
am+1 …
m
an-1
n-2
an
n-1
s
t
初始时在表头和表尾各设一个指针s和t; 互换s、t所指的元素; s++; t--; 重复执行,直至s和t相遇或s>t。
§2.2 线性表的顺序表示和实现----顺序表
void invert ( ElemType *E,int s, int t ) {
void OrderInsert( SqList &L, ElemType x ) {
//L非递减有序的顺序表,插入新元素x,使L仍然有序
i=L.length-1; //i指向表尾元素 while(i>=0 && x<L.elem[i]) {
L.elem[i+1]=L.elem[i]; //大于x的元素右移
i--; } //while L.elem[i+1]=x; L.length++;
} //OrderInsert
③在有序单链表L中插入新结点,使得L仍然有序:
void OrderInsert( LinkList &L, ElemType e ) {
//L是带头结点且非递减有序的单链表,插入新元素 e,使L仍然有序
• 已知图G的邻接表如图所示,其从顶点v1出发的 深度优先搜索序列为(),其从顶点v1出发的广 度优先搜索序列为()。
V1 V2 V3 V4 V5 V6
v2 v3 v6 ∧
v5 v5 ∧
v4 ∧
∧
v4 v6 v3 ∧
∧
• 一个图的()表示法是唯一的,而()表示法是不唯一的。 • 在有n个顶点的有向图中,每个顶点的度最大可达() • 已知一个图的邻接矩阵表示,计算第i个结点的入度的方 法是() • AOV网中,顶点表示(),弧表示()。AOE网中,顶点表 示()弧表示()。 • 设有向图G如图所示。写出所有的拓扑序列() • 从下面的邻接矩阵可以看出,该图共有()个顶点。如果 是有向图,该图共有()条弧;如果是无向图,则共有() 条边。
V1
V3
V2
0 1 0 A 1 0 1 0 1 0
V4
• 给出一个以下带权图的邻接矩阵表示: 试完成下列要求: (1)写出在该图上从顶点1出发进行深度优先遍历的顶点序 列,并据此判断该图是否为连通图。 (2)画出该图的带权邻接表。 (3)画出按普里姆算法构造最小生成树(森林)的示意图。
作业
• 已知一棵树如图所示,将其转换为二叉树。
A B E C F D G
Chap7 课堂练习
• 下列关于AOE网的叙述中,不正确的是: A.关键活动不按期完成就会影响整个工程的完成时间. B.任何一个关键活动提前完成,那么整个工程将会提前完成. C.所有的关键活动提前完成,那么整个工程将会提前完成. D.某些关键活动提前完成,那么整个工程将会提前完成. • 一个有n个顶点的无向图最多有()条边。 A n B n(n-1) C n(n-1)/2 D 2n • 对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向 量的大小为(1),所有邻接表中的结点总数是(2)。 (1)A n B n+1 C n-1 D n+e (2)A e/2 B e C 2e D n+e • 采用邻接表存储的图的广度优先遍历算法类似于二叉树的()。 A先序遍历 B中序遍历 C后序遍历 D按层遍历 • 关键路径是事件结点网络中() A从源点到汇点的最长路径 B从源点到汇点的最短路径 C最长的回路 D最短的回路
15
1
5
0
6
1
7
8
4 7 8 2 5 16 30
1
2
4
• 用一维数组存放的一棵完全二叉树为 ABCDEFGHIJKL。请写出后序遍历该二叉树 的访问结点顺序。
A
B
C
D
E
F
G
H
I
J
K
L
后序遍历:HIDJKEBLFGCA
作业
• 已知一棵二叉树的中序遍历序列为 DBEHAFCIG,后序遍历序列为DHEBFIGCA, 画出该二叉树,并写出该二叉树的前序序 列。
chap6课堂练习
• 设高度为h的二叉树上只有度为0和度为2的结点, 则此类二叉树中所包含的结点数至少为()。 A 2h B 2h-1 C 2h+1 D h+1 • 如果T2是由有序树T1转换来的二叉树,那么T1中 结点的后序就是T2中结点的()。 A先序 B 中序 C 后序 D层次序 • 某二叉树的先序遍历序列和后序遍历序列正好相 反,则该二叉树一定是() A 空或只有一个结点 B 完全二叉树 C 二叉排序树 D 高度等于其结点数 • 深度为5的二叉树至多有()个结点。 A 16 B 32 C 31 D 10
作业
• 顺序存储的线性表A,其数据元素为整型, 试编写一算法,将A拆成B和C两个表,使A 中元素值大于等于0的元素放入B,小于0的 放入C中,要求表B和C另外设置存储空间。
• 已知一个如图所示的单链表,编写一个函 数将该单链表复制一个拷贝。
head a1 a2 … an-1 an ∧
Chap3 课堂练习
p=L;
while(p->next!=NULL && p->next->data<e) p=p->next;
//找插入位置
s=(LNode *)malloc(sizeof(LNode)); s->next=p->next; s->data=e; p->next=s; } //OrderInsert O(n)
a9=4
v7
v3
a8=3
作业
• 使用克鲁斯卡尔算法构造如图所示的图G的 一棵最小生成树。
1
6
18
23 12
2
5 8
7
7
4
5
25 15
3
10
6
20
4
• 有一图的邻接矩阵如下,试给出用弗洛伊 德算法求各点间最短距离序列A1、A2、A3、 A4.
0 2 0 1 6 A 0 5 4 0 3
• 通常元素进栈的操作是() • 通常元素出栈的操作是() • 若用不带头结点的单链表来表示链栈S,则 创建一个空栈所要执行的操作是() • 从循环队列中插入一个元素时,通常的操 作是() • 从循环队列中删除一个元素时,通常的操 作是() • 栈的特点是(),队列的特点是()。
作业
• 有5元素,其入栈次序为:A、B、C、D、E,在 各种可能的出栈次序中,以元素C、D最先出栈 (即C第一个且D第二个出栈)的次序有哪几个?
• 深度为k的完全二叉树至少有()个结点, 至多有()个结点,若按自上而下,从左 到右次序给结点编号(从1开始),则编号 最小的叶子结点的编号是()。 • 线索二叉树是一种()结构 A 逻辑 B逻辑和存储 C物理 D线性
• 如图所示的二叉树,回答以下问题: (1)其中序遍历序列为() (2)其先序遍历序列为() (3)其后序遍历序列为() (4)该二叉树的中序线索二叉树为() (5)该二叉树的后序线索二叉树为() a (6)该二叉树对应的森林是()
4 72
7
8
2
5
16
30
6
11
15
26
26
42
6
11
15
11 15
5
6
2
4
2 4
7
8
5
6
7
8
72
a
c
2 4
b
30
42
d
42
16
16 26
26
11
15
11
15
5
6
7
8
5
6
7
8
2
4
2
e
4
f
72
0
1
权值
42
编码
11011 1110 1111 11010 1100 10 0
30
0
16
0
26
1
11
0 1
0
1 1 2 3 4 5 6 7 ∞ 0 3 5 9 2 3 4 5 6 7 8
8
3 ∞ 0 6 10
5 6 ∞ 0 4
∞ 0 3 6
3 ∞ 0 5
6 5 ∞ 0
• 表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概 率相等时,插入一个元素所需移动元素的平均次数为(),删除一个元 素需要移动的元素的个数为()。 • 对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为() A O(n) O(n) B O(n) O(1) C O(1) O(n) D O(1) O(1) • 在一个单链表中,若删除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 • 不带头结点的单链表head为空的判定条件是()。 A head==NULL B head->next==NULL C head->next==head D head!=NULL • 在单链表中,要删除某一指定结点,必须找到该结点的()结点。 • 对于一个具有n个Βιβλιοθήκη Baidu点的单链表,在*p结点后插入一个新结点的时间复杂 度是();在给定值为x的结点后插入一个新结点的时间复杂度是()
b
d g e
c
f
h
i
• 已知一个森林的先序序列和中序序列如下, 请构造森林。 先序序列:ABCDEFGHIJKLMNO 中序序列:CDEBFHIJGAMLONK
A
B
F
G
C
D
E
H
I
J
K
L
N
M
O
• 有7个带权结点,其权值分别为4,7,8,2, 5,16,30,试以它们为叶子结点构造一棵 哈夫曼树(要求按每个结点的左子树根结 点的权值小于或等于右子树根结点的权值 的次序构造),并计算其带权路径长度WPL.
• 栈和队列的共同点是() A都是先进先出 B都是先进后出 C只允许在端点处插入和删 除元素 D没有共同点 • 一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列 是()。 A edcba B decba C dceab D abcde • 判定一个栈ST(最多元素为MaxSize)为空的条件是()。 A ST->top!=0 B ST->top==0 C ST->top!=MaxSize-1 D ST->top==MaxSize-1 • 若用一个大小为6的一维数组来实现循环队列,且当前 rear和front的值分别为0和3。当从队列中删除一个元素, 再加入两个元素后,rear和front的值分别是()。 A 1和5 B 2和4 C 4和2 D 5和1 • 在一个链队中,假设f和r分别为队头和队尾指针,则插入s 所指结点的运算时()。 A f->next=s;f=s; B r->next=s;r=s; C s->next=r;r=s; D s->next=f;f=s
§2.2 线性表的顺序表示和实现----顺序表
①逆置顺序表
逆置前: (a1,a2,...,ai-1,ai,ai+1,...,an-1,an)
逆置后: (an,an-1,...,ai+1,ai,ai-1,...,a2,a1)
§2.2 线性表的顺序表示和实现----顺序表 逆置顺序表演示
a1
0
a2
1
9 ∞ 0 7
10 4 7 ∞ 0
• 已知AOE网如图所示,求: • (1)完成此工程需要的时间 • (2)该AOE网的关键路径
V2
a6=4
a1=3
v5
a7=1 a10=3
v1
a3=2
a4=2 a2=6
a5=1
v4 v6
• 怎样判定循环队列的空和满?并给出循环 队列中元素个数的计算式(设队列最大长 度为N,队首指针front,队尾指针rear) • 试写一个算法,识别依次读入的一个以@为 结束符的字符序列是否为形如‘序列1&序 列2’模式的字符序列。其中序列1和序列2中 都不含字符‘&’,且序列2是序列1的逆序列, 例如:‘a+b&b+a’是属于该模式的字符序列, 而’1+3&3-1’则不是。
作业
• 已知某图的邻接表如图所示 (1)写出此邻接表对应的邻接矩阵 (2)写出由v1开始的深度优先遍历的序列 (3)写出由v1开始的广度优先遍历序列
1
2 3 4 5
6
V1 V2 V3 V4 V5 V6
2
3 5∧ 5∧ 6∧ 3∧
4∧
1
1 1
2 4∧
//将数组E自下标s至下标t之间的元素逆置
while(s<t) E[s++] E[t--] ; }
void InvertSqList( SqList L ) {
//将顺序表L中的所有元素逆置
invert(L.elem, 0, L.length-1); }
②在有序顺表L中插入新结点,使得L仍然有序
…
am-1 am
m-2 m-1
am+1 …
m
an-1
n-2
an
n-1
s
t
初始时在表头和表尾各设一个指针s和t; 互换s、t所指的元素; s++; t--; 重复执行,直至s和t相遇或s>t。
§2.2 线性表的顺序表示和实现----顺序表
void invert ( ElemType *E,int s, int t ) {
void OrderInsert( SqList &L, ElemType x ) {
//L非递减有序的顺序表,插入新元素x,使L仍然有序
i=L.length-1; //i指向表尾元素 while(i>=0 && x<L.elem[i]) {
L.elem[i+1]=L.elem[i]; //大于x的元素右移
i--; } //while L.elem[i+1]=x; L.length++;
} //OrderInsert
③在有序单链表L中插入新结点,使得L仍然有序:
void OrderInsert( LinkList &L, ElemType e ) {
//L是带头结点且非递减有序的单链表,插入新元素 e,使L仍然有序
• 已知图G的邻接表如图所示,其从顶点v1出发的 深度优先搜索序列为(),其从顶点v1出发的广 度优先搜索序列为()。
V1 V2 V3 V4 V5 V6
v2 v3 v6 ∧
v5 v5 ∧
v4 ∧
∧
v4 v6 v3 ∧
∧
• 一个图的()表示法是唯一的,而()表示法是不唯一的。 • 在有n个顶点的有向图中,每个顶点的度最大可达() • 已知一个图的邻接矩阵表示,计算第i个结点的入度的方 法是() • AOV网中,顶点表示(),弧表示()。AOE网中,顶点表 示()弧表示()。 • 设有向图G如图所示。写出所有的拓扑序列() • 从下面的邻接矩阵可以看出,该图共有()个顶点。如果 是有向图,该图共有()条弧;如果是无向图,则共有() 条边。
V1
V3
V2
0 1 0 A 1 0 1 0 1 0
V4
• 给出一个以下带权图的邻接矩阵表示: 试完成下列要求: (1)写出在该图上从顶点1出发进行深度优先遍历的顶点序 列,并据此判断该图是否为连通图。 (2)画出该图的带权邻接表。 (3)画出按普里姆算法构造最小生成树(森林)的示意图。
作业
• 已知一棵树如图所示,将其转换为二叉树。
A B E C F D G
Chap7 课堂练习
• 下列关于AOE网的叙述中,不正确的是: A.关键活动不按期完成就会影响整个工程的完成时间. B.任何一个关键活动提前完成,那么整个工程将会提前完成. C.所有的关键活动提前完成,那么整个工程将会提前完成. D.某些关键活动提前完成,那么整个工程将会提前完成. • 一个有n个顶点的无向图最多有()条边。 A n B n(n-1) C n(n-1)/2 D 2n • 对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向 量的大小为(1),所有邻接表中的结点总数是(2)。 (1)A n B n+1 C n-1 D n+e (2)A e/2 B e C 2e D n+e • 采用邻接表存储的图的广度优先遍历算法类似于二叉树的()。 A先序遍历 B中序遍历 C后序遍历 D按层遍历 • 关键路径是事件结点网络中() A从源点到汇点的最长路径 B从源点到汇点的最短路径 C最长的回路 D最短的回路
15
1
5
0
6
1
7
8
4 7 8 2 5 16 30
1
2
4
• 用一维数组存放的一棵完全二叉树为 ABCDEFGHIJKL。请写出后序遍历该二叉树 的访问结点顺序。
A
B
C
D
E
F
G
H
I
J
K
L
后序遍历:HIDJKEBLFGCA
作业
• 已知一棵二叉树的中序遍历序列为 DBEHAFCIG,后序遍历序列为DHEBFIGCA, 画出该二叉树,并写出该二叉树的前序序 列。
chap6课堂练习
• 设高度为h的二叉树上只有度为0和度为2的结点, 则此类二叉树中所包含的结点数至少为()。 A 2h B 2h-1 C 2h+1 D h+1 • 如果T2是由有序树T1转换来的二叉树,那么T1中 结点的后序就是T2中结点的()。 A先序 B 中序 C 后序 D层次序 • 某二叉树的先序遍历序列和后序遍历序列正好相 反,则该二叉树一定是() A 空或只有一个结点 B 完全二叉树 C 二叉排序树 D 高度等于其结点数 • 深度为5的二叉树至多有()个结点。 A 16 B 32 C 31 D 10
作业
• 顺序存储的线性表A,其数据元素为整型, 试编写一算法,将A拆成B和C两个表,使A 中元素值大于等于0的元素放入B,小于0的 放入C中,要求表B和C另外设置存储空间。
• 已知一个如图所示的单链表,编写一个函 数将该单链表复制一个拷贝。
head a1 a2 … an-1 an ∧
Chap3 课堂练习
p=L;
while(p->next!=NULL && p->next->data<e) p=p->next;
//找插入位置
s=(LNode *)malloc(sizeof(LNode)); s->next=p->next; s->data=e; p->next=s; } //OrderInsert O(n)
a9=4
v7
v3
a8=3
作业
• 使用克鲁斯卡尔算法构造如图所示的图G的 一棵最小生成树。
1
6
18
23 12
2
5 8
7
7
4
5
25 15
3
10
6
20
4
• 有一图的邻接矩阵如下,试给出用弗洛伊 德算法求各点间最短距离序列A1、A2、A3、 A4.
0 2 0 1 6 A 0 5 4 0 3
• 通常元素进栈的操作是() • 通常元素出栈的操作是() • 若用不带头结点的单链表来表示链栈S,则 创建一个空栈所要执行的操作是() • 从循环队列中插入一个元素时,通常的操 作是() • 从循环队列中删除一个元素时,通常的操 作是() • 栈的特点是(),队列的特点是()。
作业
• 有5元素,其入栈次序为:A、B、C、D、E,在 各种可能的出栈次序中,以元素C、D最先出栈 (即C第一个且D第二个出栈)的次序有哪几个?
• 深度为k的完全二叉树至少有()个结点, 至多有()个结点,若按自上而下,从左 到右次序给结点编号(从1开始),则编号 最小的叶子结点的编号是()。 • 线索二叉树是一种()结构 A 逻辑 B逻辑和存储 C物理 D线性
• 如图所示的二叉树,回答以下问题: (1)其中序遍历序列为() (2)其先序遍历序列为() (3)其后序遍历序列为() (4)该二叉树的中序线索二叉树为() (5)该二叉树的后序线索二叉树为() a (6)该二叉树对应的森林是()
4 72
7
8
2
5
16
30
6
11
15
26
26
42
6
11
15
11 15
5
6
2
4
2 4
7
8
5
6
7
8
72
a
c
2 4
b
30
42
d
42
16
16 26
26
11
15
11
15
5
6
7
8
5
6
7
8
2
4
2
e
4
f
72
0
1
权值
42
编码
11011 1110 1111 11010 1100 10 0
30
0
16
0
26
1
11
0 1
0
1 1 2 3 4 5 6 7 ∞ 0 3 5 9 2 3 4 5 6 7 8
8
3 ∞ 0 6 10
5 6 ∞ 0 4
∞ 0 3 6
3 ∞ 0 5
6 5 ∞ 0