数据结构期末测试复习资料
一、选择题
-
非线性结构是数据元素之间存在的一种(B);
A)一对多关系
B)多对多关系
C)多对一关系
D)一对一 -
数据结构中,与所使用的计算机无关的是数据的(C)结构;
A)存储
B)物理
C)逻辑
D)物理和存储 -
算法分析的目的是(C)
A)找出数据结构的合理性
B)研究算法中的输入和输出的关系
C)分析算法的效率以求改进
D)分析算法的易懂性和稳定性 -
算法分析的两个主要方面是(A)
A)空间复杂度和时间复杂度
B)正确性和简明性
C)可读性和稳定性
D)数据复杂性和程序复杂性 -
计算机算法指的是:(C)
A)计算方法
B)排序方法
C)解决问题的有效运算序列
D)调度方法 -
计算机算法必须具备输入、输出和(B)等5个特性。
A)可行性、可移植性和可扩展性
B)可行性、确定性和有穷性
C)确定性、有穷性和稳定性
D)易读性、稳定性和安全性 -
数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为(C)
A)存储结构
B)逻辑结构
C)顺序存储结构
D)链式存储结构 -
在存储数据时,通常不仅要存储各数据元素的值,而且还要存储(C)
A)数据的处理方法
B)数据元素的类型
C)数据元素之间的关系
D)数据的存储方法 -
通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着(B)
A)数据元素具有同一特点
B)不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致
C)每个数据元素都一样
D)数据元素所包含的数据项的个数要相等 -
以下叙述正确的是(B)
A)线性表的顺序存储结构优于链表存储结构
B)二维数组是其数据元素为线性表的线性表
C)栈的操作方式是先进先出
D)队列的操作方式是先进后出 -
在我们选取何种存储结构时,一般不考虑(A)
A)各结点的值如何
B)结点个数的多少
C)对数据有哪些运算
D)所用的编程语言实现这种结构是否方便 -
若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用(D)存储方法最节省运算时间。
A)单链表
B)给出表头指针的单循环链表
C)双链表
D)带头结点的双循环链表 -
某算法的时间复杂度为O(n^2),表明该算法的(C)
A)问题规模是n^2
B)执行时间等于n^2
C)执行时间与n^2成正比
D)问题规模与n^2成正比 -
在分析算法时,采用(D)来作为算法运行时间的度量。
A)算法程序的运行时间
B)算法每一步操作的执行时间
C)算法基本操作的执行时间
D)算法基本操作的执行次数 -
一个数组第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(B);
A)110
B)108
C)100
D)120 -
某算法的空间复杂度为O(1),表明执行该算法时(B)
A)不需要存储空间
B)需要的临时存储空间为常量
C)需要的存储空间恰好为1
D)需要的临时存储空间为1 -
* 线性表是(A)
A)一个有限序列,可以为空
B)一个有限序列,不能为空
C)一个无限序列,可以为空
D)一个无限序列,不能为空 -
* 顺序表具有随机存取的特性,指的是(C)
A)查找值为 x 的元素的时间与顺序表中元素个数无关
B)查找值为 x 的元素的时间与顺序表中元素个数有关
C)查找序号为 i 的元素的时间与顺序表中元素个数无关
D)查找序号为 i 的元素的时间与顺序表中元素个数有关 -
* 在n个结点的顺序表中,算法的时间复杂度的O(1)的操作是:()
A)访问第 i 个结点(1 ≤ i ≤ n)和求第 i 个结点的直接前驱(2 ≤ i ≤ n)
B)在第 i 个结点后插入一个新结点(1 ≤ i ≤ n)
C)删除第 i 个结点(1 ≤ i ≤ n)
D) 将 n 个结点从小到大排序 -
* 在含有127个元素的顺序表中插入一个新元素,平均移动元素的次数是(B)
A)8
B)63.5
C)63
D) 7 -
链式存储的存储结构所占存储空间(A);
A)分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
B)只有一部分,存放结点值
C)只有一部分,存储表示结点间关系的指针
D)分两部分,一部分存放结点值,另一部分存放结点所占单元数 -
链表是一种采用(B)存储结构存储的线性表。
A)顺序
B)链式
C)星式
D)网状 -
线性表若采用链式存储结构时,要求内存中可用存储单元的地址(D)
A)必须是连续的
B)部分地址必须是连续的
C)一定是不连续的
D)连续或不连续都可以 -
线性表L在(B)情况下适用于链式结构实现。
A)需经常修改L中的结点值
B)需不断对L进行删除插入
C)L中含有大量的结点
D)L中结点结构复杂 -
* 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为();
A)i
B)n-i
C)n-i+1
D)不确定 -
* 在一个图中,所有顶点的度数之和等于图的边数的()倍。
A)1/2
B)1
C)2
D)4 -
* 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的()倍。
A)1/2
B)1
C)2
D)4 -
有8个结点的无向图最多有(B)条边。
A)14
B)28
C)56
D)112
解析:[n*(n-1)]/2 -
有8个结点的有向图有(C)条边。
A)14
B)28
C)56
D)112
解析:n*(n-1) -
* 对于22个记录的有序表作折半查找,当查找失败时,至少需要比较()次关键字。
A)3
B)4
C)5
D)6 -
链表适用于()查找。
A)顺序
B)二分法
C)顺序和二分法
D)随机
二、填空题
- 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和运算等学科。
- 数据结构被形式地定义为(D,R),其中D是数据元素的有限集合,R是D上的关系有限集合。
- 数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三个方面的内容。
- 数据结构按逻辑结构可分为两大类,它们分别是线性结构和非线性结构。
- 线性结构中元素之间存在一对一关系,图形结构中元素之间存在多对多关系。
- 线性结构中,第一个结点没有前驱结点,其余每个结点有且只有 1 个前驱结点;最后一个结点没有后续结点,其余每个结点有且仅有 1 个后续结点。
- 在树形结构中,树根结点没有前驱结点,其余每个结点有且仅有 1 个前驱结点;叶子结点没有后续结点,其余每个结点的后续结点数可以任意多个。
- 在图形结构中,每个结点的前驱结点数和后续结点数可以任意多个。
- 数据的存储结构可以用四种基本的存储方法表示,它们分别是顺序、链式、索引、散列。
- 数据的运算最常用的有5种,它们分别是插入、删除、修改、查找、排序。
- 一个算法的效率可分为时间效率和空间效率。
- 在分析算法的时间复杂度时,通常认为算法的执行时间是(问题规模 n)的函数
- 算法的空间复杂度是指(执行算法需要的内存空间)
- 线性表的存储结构主要分为顺序存储结构和链式存储结构
- 从长度为 n 的顺序表中删除第 i 个元素(1 ≤ i ≤ n)时,需向前移动 n-i 个元素,所以删除算法的时间复杂度为O(n)
- 向长度为 n 的顺序表中插入第 i 个元素(1 ≤ i ≤ n+1)时,需向后移动 n-i+1 个元素,所以插入算法的时间复杂度为O(n)
- 在顺序表在中插入或删除一个元素,需要平均移动表中一半的元素,具体移动元素的个数与表长和该元素在表中的位置有关。
- 线性表中结点的集合是有限的,结点间的关系是一对一。
- 在顺序表中访问任意一个结点的时间复杂度均为 O(1) ,因此,顺序表也称为随机存取的数据结构。
- 顺序表中逻辑上相邻的元素的物理位置 必定 相邻。单链表中逻辑上相邻的元素的物理位置不一定相邻。
- 链表是若干个结点构成,结点的次序由地址确定,并通过 指针域 反映数据的逻辑关系。
- 对于链表的查找是按序进行的,只能进行顺序查找,不能随机查找。
- 在单链表中,除了首元结点外,任一结点的存储位置由 其直接前驱结点的链域的值指示。
- 在n个结点的单链表中要删除已知结点 *p ,需找到它的前驱结点的地址,其时间复杂度为O(n)。
- 向量、栈、队列都是线性结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入元素和删除元素;对于队列只能在 队尾插入和队首删除元素。
- 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。不允许插入和删除运算的一端称为栈底。
- 队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。
- 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)称为空白串。
- 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。
- 设一颗完全二叉树有700个结点,则共有350个叶子结点。 叶子数=[n/2]=350
- 在各种查找方法中,平均查找长度与结点个数n无关的查找方法是散列查找。
- 散列法存储的基本思想是由 关键字的值 决定数据的存储地址。
三、知识点汇总
第一章
-
数据(Data):是描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受的各种符号集合的统称。包括数值数据和非数值数据(字符串、图形、图像、音频、视频)。
-
数据元素(Data Element):表示一个事物的一组数据称为一个数据元素(结点、顶点、记录);数据元素是数据的基本单位。
-
数据项(Data Item):是数据元素中含有独立含义的、不可分割的最小标识单位(字段、域、属性)。一个数据元素可由若干个数据项组成。
-
数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。如字符集合C={A,B,C,…}。
-
设计数据的存储结构时,既要存储逻辑结构中的每个元素,还要存储元素之间的逻辑关系。同一逻辑结构可以设计相对应的多个存储结构。
-
算法的定义:一个算法(algorithm)是一个有穷规则的集合,其规则确定一个解决某一特定类型问题的操作序列。
-
算法的五大特性:有穷性、确定性、可行性、输入、输出
-
算法是对特定问题求解步骤的一种描述,它是指令的有限序列。运算实现通过算法来表示。
-
算法满足有穷性,程序不一定满足有穷性
-
链表中的结点可包含多个指针域,分别存放多个指针。例如,双向链表中的结点可以包含两个指针域,分别存放其指向其直接前驱和直接后继结点的指针。
-
数据结构(Data Structure):是指相互之间具有(存在)一定联系(关系)的数据元素的集合。
-
数据的逻辑结构:
① 集合
② 线性结构
③ 树结构
④ 图 -
数据的存储结构:
① 顺序存储
② 链式存储
③ 索引存储
④ 散列存储 -
数据的操作:查找、插入、删除、修改、排序。
-
链表的存储结构特点是无序,而链表的示意图有序。
-
单链表只能从前向后一个方向扫描
-
双链表可以从前向后 或 从后向前 两个方向进行扫描
-
在双链表中,插入一个新的结点需要修改4个指针,删除一个结点需要修改两个指针。
-
循环链表分为循环单链表和循环双链表,循环单链表的结点构成一个查找环路,循环双链表的结点构成两个查找环路。
-
在循环双链表中任何一个结点,其算法的时间复杂度为O(1)。
-
链表的结点不会移动,只是指针内容改变。
-
链表也是线性表(注意逻辑结构与物理结构)。
-
线性表是逻辑结构,可以是顺序存储或链式存储,与元素数据类型无关。
-
链表的存储结构
-
链表适合“顺藤摸瓜”,顺序表才适合随机存取。
-
顺序存储方法插入、删除运算效率较低,在表长为n的顺序表中,插入和删除一个数据元素,平均需要移动表长一半个数的数据元素。
-
线性表有两种存储方式,顺序存储和链式存储;顺序存储:逻辑上相邻的元素在存储的物理位置次序上也相邻。链式存储:不要求连续存放。
-
顺序存储方式不仅能用与存储线性结构,还可以用于存放非线性结构,例如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。
-
栈是一种对所有插入、删除操作都限于在表的一端进行的线性表,是一种后进先出型结构。
-
栈的溢出:
① 当栈满时进栈运算称为“上溢”(PUSH)
② 当栈空时退栈运算称为“下溢”(POP) -
顺序栈初始 top = -1
① 栈空:top == -1
② 栈满:top == MaxSize - 1
③ 进栈:top++,data[top] = value
④ 出栈:取出data[top],top– -
链式栈初始 ls = null
① 栈空:ls == null
② 栈满:不考虑
③ 进栈:创建存放元素x的结点,将其插入到栈顶位置
④ 出栈:将栈顶结点的data域取值,并删除该结点 -
对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以说线性表。
-
栈是逻辑结构的概念,是特殊线性表,而链表的存储结构概念,两者不同。
-
栈和队列都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
-
栈和队列的存储方式即可是顺序方式,也可以是链式方式。
-
两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
-
二叉树中每个结点的两颗子树是有序的。
-
用二叉链表法(link-rlink)存储包含 n 个结点的二叉树,结点的 2n 个指针区域中有 n+1个为空指针。
-
队列的操作:入队(enqueue)rear=rear+1、出队(dequeue)front = front + 1
-
顺序队初始:data、front=rear=-1
① 队空:front == rear
② 队满:rear == MaxSize-1(容易导致假溢出)
③ 进队:rear++
④ 出队:front++ -
循环队列的判断
① 队空:front = rear
② 队满:front = (rear+1)%maxSize
③ 入队:rear = (rear+1)%maxSize
④ 出队:front = (front+1)%maxSize
⑤ 求队长:(rear-front+maxSize)%maxSize -
链式队初始:front=rear=null
① 队空:front==null
② 队满:不考虑
③ 入队:创建结点 p ,将其插入队尾,并由rear指向它
④ 出队: -
树的定义
① 结点n的度:n的孩子结点的数量
② 数的度:数中所有结点的最大度数
③ 结点n的层次:结点n所在处的树中的层次位置
④ 数的高度或深度:树中结点的最大层次数
⑤ 边:设树中 x 结点是 y 结点的父母结点,有序对 (x,y) 称为连接这两个结点的分支,也称为边。
⑥ 路径:从一个结点 n 到另一个结点的边序列。
⑦ 路径长度:路径中涉及到边的数量
⑧ 森林:m 颗互不相交的树的集合,但可能为空 -
二叉树的重要性质
① 若根节点的层次为1,则二叉树第 i 层最多有2^(i-1)个结点
② 在高度为 h 的二叉树中,最多有2^(h)-1个结点
③ 设一颗二叉树的叶子结点数为n0,2度结点数为n2,则有n0 = n2+1 -
满二叉树:一颗高度为 h 且有2^(h)-1个结点的二叉树称为满二叉树
-
完全二叉树:删除高度为 h 的满二叉树中第 h 层的 0 个或多个最右边叶子结点的树
-
图是一种比线性表和树更加复杂的数据结构
-
① 线性表:数据元素之间仅有线性关系,即每个元素只有一个直接前驱和一个直接后继
② 树形结构:数据元素之间有明显的层次关系,虽然每一层上的数据元素可能和下一层中多个子元素(孩子)相关,但只能和上一层中一个元素(双亲)相关。
③ 图形结构:结点之间的关系可以是任意的,任意两个数据元素之间都可能相关。 -
图的定义:图G 是有顶点集合V 和 顶点间的关系集合E 组成的一种数据结构 G =(V,E)
-
有向图 <v1,v2>:用箭头标明了边是有方向性的
-
无向图 (v1,v2):边没有方向性
-
稀奇古怪的各种图:
① 完全无向图:具有n个顶点,n(n-1)/2 条边的图
② 完全有向图:具有n个顶点,n(n-1) 条边的图
③ 一般无向图:顶点数为n,边数为e,则0 ≤ e ≤ n(n-1)/2
④ 一般有向图:顶点数为n,弧数为e,则0 ≤ e ≤ n(n-1)
⑤ 稠密图:当一个图完全接近完全图
⑥ 稀疏图:当一个图中含有较少的边或弧 -
带权图 (网络) :在图的边或弧中给出相关的数,称为权。权可以代表一个顶点到另一个顶点的距离。
-
邻接顶点:
① 在一个无向图中:若存在一条边(vi,vj),则称 vi 和 vj 为此边的两个端点,并称他们互相为邻接顶点(adjacent);
② 在一个有向图中:若存在一条边< vi , vj >,则称 vi 和 vj 为此边的起始端点和终止端点,称顶点 vi 邻接 到 顶点 vj ,顶点 vj 邻接 自 顶点 vi;称 vi 为 vj 的入边邻接点, 称 vj 为 vi 的出边邻接点。 -
相关边:两个邻接的点连成的边叫做这两个结点的相关边。
-
度、入度、出度
① 度:无向图中一个顶点依附的边或弧的数目,称为该顶顶点的度;度为0的顶点称为孤立点,度为1的顶点称为悬挂点。
② 度:有向图中的度 = 入度 + 出度
③ 入度:有向图中箭头指向的数目
④ 出度:有向图中指出的数目 -
连通图和强连通图
① 在无向图中:若从顶点 i 到顶点 j 有路径,则称顶点 i 和 顶点 j 是连通的。若任意两个顶点都是连通的,则称此无向图为连通图,否则称为非连通图
② 在有向图中:若从顶点 i 到顶点 j 有路径,则称从顶点 i 和 顶点 j 是连通的,若图中任意两个顶点都是连通的,则称此有向图为强连通图,否则称为非强连通图。 -
连通分量和强连通分量
①在无向图中:极大的连通子图为该图的连通分量。显然,任何连通图的连通分量只有一个,及它本身,而非连通图有多个连通分量
② 在有向图中:极大的强连通子图为该图的强连通分量。显然,任何的强连通图和强连通分量只有一个,及它本身,而非强连通图有多个强连通分量。 -
生成树:一个连通图(无向图)的生成树是一个极小连通子图,它含有图中全部 n 个顶点和只有足以构成一棵树的 n-1 条边,称为图的生成树。
-
关于生成树的结论:
① 一颗有 n 个顶点的生成树有且仅有 n-1 条边
② 如果一个图有 n 个顶点和小于 n-1 条边,则是非连通图
③ 如果多于 n-1条边,则一定有环
④ 有 n-1 条边的图不一定是生成树 -
存储图的方式:邻接矩阵、邻接表、邻接多重表等,不管使用哪种方式,都需要存储图中各个顶点本身的信息 和 顶点与顶点之间的所有关系。
-
邻接矩阵的优缺点:
① 优点:容易实现图的操作,如:求某顶点的度、判断顶点之间是否有边(弧)、找顶点的邻接点等等。
② 缺点:n 个顶点需要 n*n 个单元存储边(弧);空间效率为O(n^2),对于稀疏图而言比较浪费空间
③ 用途:多用于稠密图的存储 e接近n(n-1)/2 -
邻接表主要包括两部分:一部分是单链表,用于存放边的信息;一部分是数组,用于存放顶点本身的数据信息
-
邻接表的优缺点:
① 优点:空间效率高,容易寻找顶点的邻接点
② 缺点:判断两顶点之间是否有边(弧),需要搜索两结点对应的单链表,这一点没有邻接矩阵方便
③ 用途:多用于稀疏图的存储 -
邻接表与邻接矩阵的异同之处:
① 同:邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。
② 异:对于任意确定的无向图,邻接矩阵是唯一的,但是邻接表不唯一;邻接矩阵的空间复杂度为O(n^2),而邻接表的空间复杂度为 O(n+e)。