复习题

数据结构复习题

判断

1.1、所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。(2分)
解:错误。将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)

2.二分法不能用于链表
3.二分法查找平均复杂度是O(logN)
4.数据的物理结构是指数据在计算机中的实际存储形式。
5.数据的逻辑结构与数据元素本身的内容和形式无关。
6.数据的逻辑结构是指数据的各数据项之间的逻辑关系。
F
逻辑结构是指数据元素之间的逻辑关系
7.数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的存储结构

与储存结构没有直接关系
8.数据结构的抽象操作的定义与具体实现无关
9.在数据结构中,与所使用的计算机无关的数据结构是(逻辑结构)
10.数据结构涉及数据的逻辑结构、存储结构和施加其上的操作3个方面
11.数据结构操作的实现与存储结构有关
12.定义逻辑结构时可不考虑存储结构
1-4
用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。

(1分)

F

1-5
用邻接矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。

(1分)

T

1-6
如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G中一定有回路。

(2分)

F

1-7
如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G一定有2个连通分量。

T

2-3
对于给定的有权无向图G,下列哪个说法是正确的?

(3分) D

A.
G的最小生成树中,任意一对顶点间的路径必是它们在G中的最短路径

B.
设顶点V到W的最短路径为P。若我们将G中每条边的权重都加1,则P一定仍然是V到W的最短路径

C.
单源最短路问题可以用O(∣E∣+∣V∣)的时间解决

D.
以上都不对

2-4
下列有关图的叙述中,有几句是对的?

如果e是有权无向图G唯一的一条最短边,那么边e一定会在该图的最小生成树上。
如果无向图的宽度优先搜索的结果为1234…,且顶点1与顶点4之间存在一条边相连,那么顶点1与顶点3之间也一定有边相连。
如果从有向图G(至少有2个顶点)的每一点均能通过深度优先搜索遍历到所有其它顶点,那么该图一定不存在拓扑序列。
若图采用邻接矩阵表示,如果该矩阵不全为0,且矩阵主对角线以下全是0,那么说明该图一定是有向图。
(3分)A
A.
4句

B.
3句

C.
2句

D.
1句

2-5
如果G是一个有15条边的非连通无向图,那么该图顶点个数最少为多少?

(3分)

A.
7

B.
8

C.
9

D.
10

解:无向图的边数:n(n-1)/2
n=6
又因为非连通再加1
n=7

2-8
设有向图的顶点个数为n,则该图最多可以有()条弧。

(2分)C

A.
n-1

B.
n(n-1)/2

C.
n(n-1)

D.
n^2

2-13
连通图的极小连通子图称为该图的()。
B
(2分)

A.
关键路径

B.
生成树

C.
回路

D.
最小回路

2-14
有拓扑排序的图一定是()。

(2分)B

A.
无向图

B.
有向无环图

C.
有环图

D.
强连通图

又环的也可以是无向连通图
2-15
下列关于无向连通图特性的叙述中,正确的是 I.所有顶点的度之和为偶数 II.边数大于等于顶点个数减1 III.至少有一个顶点的度为1 。

(2分)C

A.
只有I

B.
只有II

C.
I和II

D.
I和III

拓扑排序

void Topsort( Graph G )
{
   Queue Q;
   Vertex V, W;
   NodePtr ptr;
   int counter = 0;

   Q = CreateEmptyQueue(NumVertex);
   for ( V=0; V<G->NumV; V++ )
      if ( Indegree[V] == 0 )
         Enqueue(V, Q);
   while ( !IsEmpty(Q) ){
      V = Dequeue( Q );
      TopNum[V] = 
++counter
;
      for ( ptr=G->List[V]; ptr; ptr=ptr->Next) {
         W = ptr->Vertex;
         if ( 
--Indegree[W]
 == 0 )
            Enqueue(W, Q);
      }
   }
   if ( counter != NumVertex )
      printf("ERROR: Graph has a cycle.\n");
   DisposeQueue(Q);
}

BFS

void BFS(LGraph Graph, Vertex S, void(*Visit)(Vertex))
{
	int p [MaxVertexNum+10],a;
	PtrToAdjVNode q = NULL;
	int f = 0, r = 0;
	p[r++] = S;
	Visited[S] = true;
	while (f!=r)
	{
		a = p[f++];
		Visit(a);
		q = Graph->G[a].FirstEdge;
		while (q)
		{
			if (!Visited[q->AdjV])
			{
				p[r++] = q->AdjV;
				Visited[q->AdjV] = true;
			}
			q = q->Next;
		}
	}
}

DFS

void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ){

    Vertex i;

    Visited[V] = 1;

    Visit(V);

    for(i = 0; i < Graph->Nv ; i++){

        if(Graph->G[V][i] ==1&&!Visited[i]){

           DFS(Graph, i, Visit);

        }

    }

    return;

}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值