今日算法题练习 包括数据结构和算法知识(7-17)【2】

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)
# 广度优先遍历借助了队列来保证按层次搜索,上级层次的结点先入队,结点出队时它的相邻子结点再依次入队

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值