Date:2019-07-17
1. 线性表的逻辑顺序和物理顺序总是一致的 False.( 线性表除了顺序存储之外, 还有链式存储,所以物理位置不一定相邻)
线性表有两种存储方式,一种是顺序表一种是链式表,只有用顺序表时,逻辑顺序才和物理顺序一致。
2. 广义表的表头可以是广义表,也可以是单个元素 True
3. 串的逻辑结构与(树)的逻辑结构不同,不同的是线性表、栈、队列
4.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为 顺序存储结构。
5.线性表就是顺序存储的表 False.
6.顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。 False。应该是:顺序表结构适用于随机存取;而链表适用于顺序存取。
7.从逻辑上可以把数据结构分为(线性结构和非线性结构)两大类。
8.以下四类基本的逻辑结构反映了四类基本的数据组织形式,解释错误的是(A)
A.集合中任何两个结点之间都有逻辑关系但组织形式松散(错误).
B.线性结构中结点按逻辑关系依次排列形成一条"锁链".
C. 树形结构具有分支、层次特性,其形态有点像自然界中的树.
D. 图状结构中的各个结点按逻辑关系互相缠绕,任何两个结点都可以邻接.
9.假设物理块大小为4KB,每个指针占4B,采用一级间接索引,则允许的文件的最大长度是(256KB)
10.广义表是0个或多个单元素或子表组成的有限序列
11. 通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着 : 不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致.
12. Ethernet 采用的媒体访问控制方式是(CSMA/CD)
13. 缓存系统中的主要使用的数据结构是(HashMap)
A: 缓存系统中主要是:Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它 通过在内存中缓存数据和对象来减少读取数据库的次数,从而 提高动态、数据库驱动网站的速度。Memcached基于一个存储键/ 值对的hashmap。其守护进程(daemon )是用C写的,但是客
户端可以用任何语言来编写,并通过memcached协议与守护进程通信
14. 抽象数据类型与计算机内部表示和实现无关 True。因为:抽象数据类型 (Abstract Data Type) 是指一个数学模型以及定义在该模型上的一组操作。它的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。
15. 在平衡二叉树中,向某个平衡因子不为零的结点的树中插入一新结点,必引起平衡旋转 False.不一定会引起平衡旋转。
16. 设数据结构 A=(D , R) ,其中 D={1 , 2 , 3 , 4} , R={r} , r={<1 , 2> , <2 , 3> , <3 , 4> , <4 , 1>} ,则数据结构 A 是( 图型结构)
17. 两台计算机利用电话线路传输数据信号时,必备的设备是(调制解调器)
18. 一些表面上很不相同的数据可以有相同的逻辑结构 True.
19.
20. 下面程序运行后,输出的结果是 (67,323). 解释如下:
21.图的广度优先遍历和深度优先遍历:(补充:树的遍历有前序遍历、中序遍历和后序遍历)
图的遍历主要有深度优先搜索 DFS(depth-first search) 和广度优先搜索BFS( breadth-first search) 两种方式;
深度优先遍历
深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点为新的源点重复上述过程,直至图中所有的顶点均已被访问为止。
深度优先遍历结果是: A B E F C D G H I
深度优先遍历尽可能优先往深层次进行搜索。
广度优先遍历
广度优先遍历可定义如下:首先访问出发点v,接着依次访问v的所有邻接点w1、w2......wt,然后依次访问w1、w2......wt邻接的所有未曾访问过的顶点。以此类推,直至图中所有和源点v有路径相通的顶点都已访问到为止。此时从v开始的搜索过程结束。
广度优先遍历结果是: A B C D E F G H I
广度优先遍历按层次优先搜索最近的结点,一层一层往外搜索。
实现:
图的数据结构主要有邻接矩阵和邻接表2种。在 python 中我们可以这样表示上面的图
#!/usr/bin/env python3
import collections
import queue
g = collections.OrderedDict()
g['A'] = ['B', 'C', 'D']
g['B'] = ['A', 'E']
g['C'] = ['A', 'F']
g['D'] = ['A', 'G', 'H']
g['E'] = ['B', 'F']
g['F'] = ['E', 'C']
g['G'] = ['D', 'H', 'I']
g['H'] = ['G', 'D']
g['I'] = ['G']
# 类似邻接表,这里用了 OrderedDict ,因为哈希表的遍历输出是不固定的
# 深度优先遍历
def DFSTraverse(g):
visited = {}
def DFS(v):
print(v)
visited[v] = True
for adj in g[v]:
if not visited.get(adj):
DFS(adj)
for v in g:
if not visited.get(v):
DFS(v)
DFSTraverse(g)
# 广度优先遍历
def BFSTraverse(g):
visited = {}
q = queue.Queue()
for v in g:
if not visited.get(v):
print(v)
visited[v] = True # 先访问再入队
q.put(v)
while not q.empty():
e = q.get()
for adj in g[e]:
if not visited.get(adj):
print(adj)
visited[adj] = True
q.put(adj)
BFSTraverse(g)
# 广度优先遍历借助了队列来保证按层次搜索,上级层次的结点先入队,结点出队时它的相邻子结点再依次入队