数据结构

一、线性表

 线性结构中的任意一个结点至多只能有一个前驱与一个后继。

  1. 向量

     向量(vector)是由具有相同数据类型的数据元素(表目)组 成的线性表,即所有表目类型相同,它们都属于同一数据对象, 一般采取顺序存贮的方式。
  2. 目录表
    如果线性表的表目不为同一类型,每个表目所占的存储空间就可能不相等。仍用顺序存储的方法就不能快速存取任一表目。为了提高运算速度,可以采用索引的方法,建立一个目录表。这样就把结点不等长的处理问题转化为对等长表目的目录表的处理问题。
     建立目录表常采用以下两种方法。
     1.目录表是一个指针向量
     2.带有关键字和指针两个字段的目录表

  3.  栈(stack)是一种运算受限的线性表。它限定只能在表的同一端进行插入和删除等运算,允许运算的一端称为栈顶(top)。而表的另一端称为栈底(bottom)。当表中没有元素时称为空栈。
  4. 队列
     队列(queue)也是一种运算受限的线性表。它只允许在表的一端进行插入,而在表的另一端进行删除。允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。
二、链表

  1. 单链表 (singly linked list)

    用单链表来表示线性表时,每个数据元素占用一个结点(node)。每个结点均由两个域(字段)组成:一个域存放数据元素(data);另一个域存放指向结点后继的指针(next)。终端结点没有后继,其next域为空(NULL)。另外还需要一个表头指针head指向表的第一个结点。
  2. 双链表

    双链表即在单链表的每个结点中增加一个指向前驱结点的指针prior。这样每个结点就有了两个指针域,一个指向前驱,一个指向后继。
三、串

 串(string)是由n(n≥0)个字符组成的有限序列。一般记作S=“1…an-1”,其中,S是串名;用双引号括起来的字符序列是串的值;ai(0 ≤ i≤ n-1)是有限字符集(如ASCII码)中的字符;串中字符的个数称为串的长度。长度为0的串称为空串(empty string),它不包含任何字符。

  1. 模式匹配
     设有两个字符串T和P,若要在串T中查找与串P相等的子串,则称T为目标串(target string),P 为模式串(pattern string),并称查找模式串在目标串的匹配位置的运算为模式匹配(pattern matching)。如果T中存在模式为P的子串,则指出该子串在T中的位置(当T中存在多个子串P时,通常只要找出第一个子串即可),称为匹配成功,否则称为匹配失败。
     模式匹配比较典型的算法有两个:一个是朴素匹配算法,即蛮力匹配算法( Brute-Force algorithm);另一个是无回溯的匹配算法,即KMP算法。
  • Brute-Force算法
    设目标串(主串)T和模式串P为:
    T=“t0t1t2…tn-1”
    P=“p0p1p2…pm-1”
    Brute-Force算法的匹配方法如下:
     从目标串的第0个字符开始与模式串P的第0个字符进行比较:若相等,则继续比较后续字符;否则,从目标串的第1个字符开始重新与模式串P的第0个字符进行比较。如此继续下去,如果在目标串T中找到一个与模式串P相等的子串,则匹配成功,算法返回模式串P的首字符在目标串T中的位置;否则匹配失败,算法返回的值为-1。
  • KMP算法
     第i趟匹配失败时,目标串T中的扫描指针i不需回溯,而是继续从此处(失配位置)开始向后进行比较。但模式串P中的扫描指针应退回到pk的位置。
四、树形结构

树形结构主要有两类:树(森林)和二叉树。

 树是树形结构中的一个重要类型。
树(tree)是n(n≥0)个结点的有限集T,如果n=0,则称T为空树;否则T满足如下条件:
(1)有且仅有一个特定的称为根( root)的结点,它仅有后继,没有前驱;
(2)除根以外的其他结点被划分为m( m≥0)个互不相交的有限集合T1,T2,…,Tm,其中每一个集合又都是树,并且称为根的子树(subtree )。

  1. 二叉树
     它的特点是:每个结点最多只有两个子女(即不存在度数大于2的结点),并且二叉树的子树有左右之分,其子树的次序不能随意颠倒。
     定义 二叉树(binary tree)是n(n≥0)个结点的有限集合,这个集合或者是空集,或者是由一个根结点加上两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。
     这也是一个递归定义,由于二叉树可以是空集,因此根可以有空的左子树或右子树,或者左、右子树均为空。
二叉树具有如下性质:
性质1 二叉树的第i层上至多有2i个结点(i≥0)。
性质2 高度为h的二叉树至多有2h+1-1 个结点。
性质3 在任意一棵二叉树中,若叶结点的个数为n0,度为2的结点个数为n2,则有n0=n2+1。

满二叉树(full binary tree)
 一棵高度为h且有2h+1-1个结点的二叉树称为满二叉树。
完全二叉树(complete binary tree)
 如果一棵二叉树至多只有最下面的两层结点的度数可以小于 2,并且最下面一层的结点都集中在该层的最左边的若干位置上,则此二叉树称为完全二叉树。
2. 遍历二叉树

  • 栈遍历
  • 递归遍历
  1. 线索二叉树
     即用指向结点在某种次序下的前驱结点和后继结点的指针来代替这些空的指针。这种附加的指向前驱、后继的指针称作线索,加进了线索的二叉链表存储表示的二叉树称作线索二叉树(Threaded Binary Tree),简称为线索树。对二叉树进行某种次序的遍历,在遍历的过程中添加线索使之变为线索二叉树的过程称为线索化。


  2.  堆实质上是满足如下性质的完全二叉树:二叉树中任何分支结点的关键字均不大于(或均不小于)其左右子女(若存在)结点的关键字。
    小根堆:
     任一非叶结点的关键字均小于或等于它的左、右子女的关键字,位于堆顶(即完全二叉树的根结点位置)的结点的关键字是整个序列中最小的,所以称它为最小堆(min heap),又称小根堆;
    大根堆:
     任一非叶结点的关键字均大于或等于它的左、右子女的关键字,位于堆顶的结点的关键字是整个序列中最大的,所以称它为最大堆(max heap),又称大根堆。

  3. 扩充二叉树
     在原来的二叉树中出现空的子树时,就添加一个特殊的结点——空树叶。对于原来二叉树里度为1的分支结点,在它下面添加一个空树叶;对于原来二叉树的树叶,在它下面添加两个空树叶。

  4. 哈夫曼树
     假设给定m个实数w0,w1,…,wm-1,求一个具有m个外部结点的扩充二叉树,每个外部结点ki都有一个wi与之对应,作为它的权值,使得带权外部路径长度(Weighted Path Length)
    为最小,其中 li是根到外部结点 ki的路径长度。具有 WPL 最小的扩充二叉树称作哈夫曼树(Huffman tree),又称作最优二叉树。

五、图

 在图结构中,对结点的前驱和后继的个数都不加限制,结点和结点之间的关系可以是任意的。在图中,结点习惯地称为顶点。

  1. 图的存储
    • 邻接矩阵表示法
    • 邻接表表示法
    • 邻接多重表表示法
  2. 图的遍历
  • 深度优先遍历
     图的深度优先遍历(depth first traversal)类似于树的先根遍历。它的方法是:访问顶点V0,然后选择一个V0邻接到的且未被访问过的顶点V1,再从V1出发进行深度优先遍历;当遇到一个所有邻接于它的顶点都已被访问过了的顶点Vt时,则返回到已访问的顶点序列中最后一个拥有未被访问的相邻顶点的顶点Vs,再从Vs出发继续深度优先遍历;当V0可达的顶点都已被访问过时,以V0为出发点的遍历完成。若这时图中还有未被访问的顶点,则从中再选一个未被访问的顶点作为出发点,重复上述的过程。
  • 广度优先遍历
     图的广度优先遍历(breadth first traversal)类似于树的层次遍历。它的方法是:访问顶点V0,然后依次访问V0邻接到的所有未被访问过的顶点V1, V2, …, Vt,再依次访问V1, V2, …, Vt邻接到的所有未被访问过的顶点,如此进行下去,当 V0可达的顶点都已被访问过时,以 V0为出发点的遍历完成。若这时图中还有未被访问的顶点,则从中再选一个未被访问的顶点作为出发点,重复上述的过程,直到图G中的所有顶点都已被访问过为止。
  1. 最小(代价)生成树
     对于有n个顶点的连通图,它的生成树应含有n-1条边,这是它的极小连通子图。也就是说,若边数少于n-1,则图不是连通的;若边数多于n-1,则图中一定存在回路。图的生成树不是唯一的,采用不同的遍历方法,不同的顶点出发或存储结构中顶点的排列顺序不同都可能得到不同的生成树。
     构造最小生成树比较典型的有两种:
     普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法。
  • 普里姆(Prim)算法
     从带权的连通无向图的任意一个顶点开始,把这个顶点加入到生成树中,然后在其一个顶点在生成树里、另一个顶点不在生成树里的诸条边中,选一条权值最小的边(不止一条时可从中任选一条),并把这条边和不在生成树里的顶点加入到生成树中。如此重复处理,直到图中的n个顶点n-1条边全部进入生成树中为止。
  • 克鲁斯卡尔(Kruskal)算法
  1. 拓扑排序(topological sort)
     将有向图G的所有顶点排成一个线性序列,使得对图中的任何一对顶点Vi和Vj,若存在一条从Vi到Vj的路径,则Vi在此线性序列中必排在Vj之前。通常将这样的线性序列称为满足拓扑次序(topological order)的序列,简称为拓扑序列(topological sequence)。根据有向图G,求得拓扑序列的过程称为拓扑排序。
六、多维数组和广义表

多维数组(multidimentional array)是向量的推广。
通常有两种顺序存储方式。

  • 行优先顺序
  • 列优先顺序
    特殊矩阵是指非零元素的分布有一定规律的矩阵。
  1. 对称矩阵
     如果元素满足aij=aji0≤ i,j≤ n-1,则称A为对称矩阵

 2.三角矩阵
   以主对角线划分,三角矩阵有上三角和下三角两种。
 3.三对角矩阵
   在三对角矩阵里,除下标在下面范围的元素aij不为0外,其他元素均为0(或常数e)。

3.稀疏矩阵
 设二维数组Amn中有s个非零元素,若s远小于矩阵元素的总数(即s<<m×n),则称A为稀疏矩阵(sparse matrix)。在存储稀疏矩阵时,为了节省存储空间,也是采用压缩存储的方法只存储非零元素,但因此会失去随取存取的性能。对稀疏矩阵的压缩存储通常有两类方法:顺序存储和链接存储。

  • 顺序存储
     采用行优先(或列优先)的顺序存储稀疏矩阵中非零元素,但由于非零元素在矩阵中的分布一般是没有规律的,因此在存储非零元素的同时还应存储适当的辅助信息。主要有三元组表示和带辅助行向量的二元组表示。

    1. 三元组表示
      该方法是用一个线性表来表示稀疏矩阵,线性表中的每个结点对应稀疏矩阵的一个非零元素,其形式是一个三元组:(row,col,val),表示非零元素的行下标、列下标和非零元素的值。

    2. 带辅助行向量的二元组表示
      有时为了便于某些矩阵的运算,使之能快速地找到稀疏矩阵中各行非零元素的位置及本行的所有非零元素,就需要对三元组表示法进行一些改造。可以考虑建立一个辅助行向量ARV[m+1],其中m仍为矩阵的行数,然后去掉三元组表中的行下标字段使之变成二元组表。

  • 链式存储
     用链接的方法存储稀疏矩阵的非零元素是稀疏矩阵压缩存储的另一种常用的方式。它与顺序存储方式相比,其优点是能适应矩阵的动态变化,即容易实现插入、删除运算。其缺点是查找速度较慢且存储开销增大。下面介绍两种常用的链式存储稀疏矩阵的方法。

    1. 行链表表示
      该方法类似于图的邻接表表示法,用m个类型为指针(指向本行第一个非零元素)的表目组成的向量来替代顶点表;矩阵的每一行组成一个单链表,单链表中的每个结点表示稀疏矩阵的一个非零元素,其结点由三个字段组成:一个字段是非零元素的列下标、一个字段是非零元素的值、最后一个字段是指向本行下一个非零元素的指针。
    2. 十字链表(正交表)表示
      对于行链表表示的稀疏矩阵要找某一行的非零元素非常方便,但要找某一列的非零元素却不太容易。

广义表(generalized list)又称为列表(Lists),简称作表,它是线性表的推广。
 广义表是由n(n≥0)个元素α0,α1,…,αn-1组成的有限序列,其中元素αi(0≤i≤n-1)或者为数据元素(又称为原子或单元素)或者为广义表(又称为列表)。一般记作
LS=(α0,α1,…,αn-1)
其中LS是广义表的名字,n为表的长度,长度为0的广义表为空表,记作LS=( )。若αi为广义表,则称它为LS的子表。
广义表存储结构
 1.模仿单链表结构存储广义表
 2.模仿二叉树的lchild-rchild表示法存储广义表

七、文件

文件(file)是性质相同的记录的集合。
文件按记录的类型可分为两类:操作系统的文件和数据库文件。

操作系统中的文件是一维的连续的字符序列,它的记录不具有结构。  
数据库文件的记录是带有结构的,可以由若干个数据项组成。
这里的数据项是指初等项,也称为字段(field)或属性(attribute)。
记录(record)是文件中存取的基本单位。数据结构中主要讨论数据库文件。

按文件中记录的长度是否相同来分,文件可分为定长记录文件和不定长记录文件。
若文件中每个记录含有的信息长度相同,则称这类记录为定长记录,由定长记录组成的文件称作定长记录文件;
若文件中各记录含有的信息长度不等,则称此类文件为不定长记录文件。

按文件的记录中关键字的多少,还可将文件分成单关键字文件和多关键字文件。
若文件中的记录只有一个唯一标识记录的主关键字,则称其为单关键字文件;
若文件中的记录除了含有一个主关键字外,还含有若干个次关键字,则称为多关键字文件。

一、文件的逻辑结构及其操作
 文件的逻辑结构是由各记录之间的逻辑关系来决定的。当一个文件的各个记录按照某种次序排列时(这种排列的次序可以是按记录中关键字值的大小,也可以按各记录存入该文件的时间先后等),各记录之间就自然形成了一种线性关系。因此,文件可以视为一种线性结构。
文件的操作主要有两类:检索与修改。
1.文件的检索方式
(1)顺序检索:检索下一个逻辑记录;
(2)按记录序号检索:检索第i个逻辑记录;
(3)按关键字检索:检索关键字与给定值相关的一个或多个逻辑记录。
   按检索条件的不同,可将检索分为四种查询:

  • 单值查询:查询关键字或属性字段的值等于给定值的记录;
  • 范围查询:查询关键字或属性字段的值属于某个范围的记录;
  • 函数查询:查询的条件表现为关键字或属性字段的函数;
  • 布尔查询:以上三种查询条件用布尔运算(与、或、非)组合起来的查询。
    2.文件的修改
    文件的修改包括对文件进行的记录插入、删除和更新三种操作。
    文件的操作可分为实时和批量的两种处理方式。

二、文件的存储结构
文件在存储介质(磁带、磁盘等)上的组织方式称为文件的存储结构,又称为物理结构。
基本的组织方式有四种:顺序组织、索引组织、散列组织和链组织。

  1. 顺序文件(sequential file)
     按记录的逻辑次序依次存储在外存上的文件。顺序文件中物理记录的顺序与逻辑记录的顺序是一致的。如果次序相继的两个物理记录在存储介质上的存储位置也是相邻的,则称为连续文件;如果物理记录之间的次序是由指针链接表示的,则称为串联文件。如果顺序文件中的记录按其主关键字有序,则称为顺序有序文件;否则称为顺序无序文件。

 顺序文件是根据记录的序号或记录的相对位置来进行存取的,因此,它具有如下特点:
 (1)存取第i个记录,必须先存取前面的i-1个记录;
 (2)新记录只能插在文件的尾部;
 (3)若要更新文件中的某个记录,则必须将整个文件进行复制。
顺序文件的优点是连续存取速度快,因此,它特别适用于顺序存取、成批修改的情况。

  1. 索引文件

      除了文件本身(称为主文件)之外,另外建立一张指示逻辑记录和物理记录之间的一一对应关系的表,这张表称为索引表。这类包括主文件和索引表两部分的文件称为索引文件。

      索引表中的每一项称作索引项,通常索引项由关键字和该关键字所在记录的物理地址组成。索引表必须按主关键字有序,而主文件本身则可以按主关键字有序或无序,前者称为索引顺序文件(indexed sequential file),后者称为索引非顺序文件(indexed nonsequential file)。

由于索引非顺序文件的主文件中的记录是无序的,因此每个记录都必须对应一个索引项,
这样建立起来的索引表称为稠密索引。

对于索引顺序文件由于主文件中的记录是按主关键字有序的,所以可以让一组记录(如页块)对应一个索引项,这种索引表称为稀疏索引。
通常可将索引非顺序文件简称为索引文件,本节只讨论这种文件。

索引文件在外存上分为两个区:索引区和数据区,前者存储索引表,后者存储主文件。

当记录的数目很大时,索引表也很大,以致一个页块(物理块)容纳不下。在这种情况下查阅索引仍要多次访问外存。
为此,可以对索引表再建一个索引,称为查找表。

上述的多级索引是一种静态索引。各级索引均为顺序表,其结构简单,但修改却很不方便,每次修改都要重组索引。

因此,当数据文件在使用过程中记录变动较多时,应采用动态索引。如二叉排序树(或AVL树)、B-树(或其变形)等,这些都是树形表结构,插入、删除都很方便。

又由于它们本身是层次结构,因而无需建立多级索引,而且建立索引表的过程即为排序的过程。

通常,当数据文件的记录个数不是很多,内存容量足以容纳整个索引表时,可采纳二叉排序树(或 AVL树)作为索引表;

否则当文件很大时,索引表(树表)本身也在外存,为降低树的高度以减少访问外存的次数,可采纳B-树、B+树等作为索引表
  1. 索引顺序文件
    索引顺序文件是常用的一种文件组织。下面介绍两种最常用的索引顺序文件:ISAM文件和VSAM文件。

ISAM为Indexed Sequential Access Method(索引顺序存取方法)的缩写,

它是一种专为磁盘存取设计的文件组织方式。由于磁盘是以盘组、柱面和磁道三级地址存取的设备,则可对磁盘上的数据文件建立盘组、柱面和磁道多级索引。
以下仅考虑在同一个盘组上建立的 ISAM 文件的情况。

ISAM 文件由三级索引(即主索引、柱面索引、磁道索引)和主文件组成。
文件的记录在同一盘组上存放时,应先集中放在一个柱面上,然后再顺序存放在相邻的柱面上,对同一柱面,则应按盘面的顺序存放。

为了提高检索效率,主索引可常驻内存,并将柱面索引放在数据文件所占空间居中位置的柱面上,这样可使得在从柱面索引查找到磁道索引时,磁头移动的平均距离为最短。

插入记录时,首先找到它应插入的磁道。如果该磁道未满,则将新记录插入到该磁道的适当位置上即可;
如果该磁道已满,则新记录或者插在该磁道上,或者直接插入该磁道的溢出链表上。

在ISAM文件中删除记录的操作要比插入简单的多,只需找到待删的记录,在其存储位置上做删除标记即可,而不需要移动记录或改变指针。
当然,经过多次的增删后,文件的结构可能变得很不合理。此时,大量的记录进入了溢出区,而基本区又空闲了很多的空间。
因此,通常需要周期性地整理ISAM文件。把记录读入内存,进行重新排列,复制成一个新的ISAM文件,填满基本区而空出溢出区。

VSAM是Virtual Storage Access Method (虚拟存储存取方法)的缩写,

它也是一种索引顺序文件的组织方式,采用 B+树作为动态索引结构。
这种存取方法利用了操作系统的虚拟存储器的功能,给用户提供方便。
对用户来说,文件只有控制区间和控制区域等逻辑单位,而与外存储器中的柱面、磁道等具体存储单位没有必然的联系。
用户在存取文件中的记录时,不需要考虑这个记录的当前位置是否在内存,也不需要考虑何时执行对外存进行“读/写”的指令。

它由三部分组成:索引集、顺序集和数据集。

文件的记录均放在数据集中,数据集的一个结点称为控制区间(control interval),它是一个I/O 操作的基本单位,每个控制区间含有一个或多个数据记录。  

顺序集和索引集一起构成了一棵B+树,作为文件的索引部分。顺序集中存放每个控制区间的索引项。索引项由两部分信息组成,即该控制区间的最大关键字和指向控制区间的指针。  

若干相邻的控制区间的索引项形成了顺序集中的一个结点,结点之间用指针相链接,而每个结点又在其上一层的结点中建有索引,且逐层向上建立索引,所有的索引项都是由最大关键字和指针两部分信息组成,这些高层的索引项作为B+树的分支结点。 

因此,VSAM 文件既可在顺序集中顺序存取,又可从 B+树的根结点出发,进行关键字的随机存取。顺序集的一个结点连同对应的所有控制区间形成一个整体,称作控制区域(control range),它相当ISAM文件中的一个柱面,而控制区间相当于一个磁道。  

在VSAM文件中,记录可以是不定长的,因而在控制区间中,除了存放记录本身以外,还存放每个记录的控制信息(如记录的长度等)和整个区间的控制信息。

VSAM文件没有溢出区,解决插入的办法是在初建文件时留出空间。
一是每个控制区间内没有填满记录,而是在最末一个记录和控制信息之间留有空隙;
二是在每个控制区域有一些完全空的控制区间,并在顺序集的索引中指明这些空区间。

当插入新记录时,大多数的新记录能插入到相应的控制区间内,但要注意:
为了保持区间内记录的关键字从小到大有序,则需将区间内关键字大于插入记录关键字的记录向控制信息的方向移动。
若在若干记录插入之后控制区间已满,则在下一个记录插入时要进行控制区间的分裂,即把近乎一半的记录移到同一控制区域中全空的控制区间中,并修改顺序集中相应索引。
倘若控制区域中已经没有全空的控制区间,则要进行控制区域的分裂,此时顺序集中的结点亦要分裂。由此尚需修改索引集中的信息。
但由于控制区域较大,一般很少发生分裂的情况。

在VSAM文件中删除记录时,需将同一控制区间中较删除记录关键字大的记录向前移动,把空间留给以后插入的新记录。
若整个控制区间变空,则回收作为空闲区间使用,并需删除顺序集中相应的索引项。

和ISAM文件相比,基于B+树的VSAM文件有如下优点:
能保持较高的查找效率,查找一个后插入的记录与查找一个原有的记录具有相同的速度;
动态地分配和释放存储空间,能保持平均75%的存储利用率;
而且无需像ISAM文件那样定期重组文件。

因此,它常被作为大型索引顺序文件的标准组织。
  1. 散列文件

     散列文件(hash file)是利用哈希(hash)法组织的文件,又称为直接存取文件。
    它类似于散列表,即根据文件中关键字的特点来设计散列函数和处理冲突的方法,将记录散列到外存储设备上。

     与散列表不同的是,对于文件来说,磁盘上的文件记录通常是成组存放的。若干个记录组成一个存储单位,在散列文件中,这个存储单位叫作桶(bucket)。

     假如一个桶能存放m个记录,则当桶中已有m个同义词的记录时,再存放第m+1个同义词就会发生“溢出”。处理溢出虽然可以采用散列表中处理冲突的各种方法,但对于散列文件,主要采用拉链法。
    当发生“溢出”时,需要将第 m+1 个同义词存放到另一个桶中,通常称此桶为“溢出桶”;
     相对地,称前m个同义词存放的桶为“基桶”。溢出桶和基桶的大小相同。相互之间用指针链接。当在基桶中没有找到待查记录时,就沿着指针到所指的溢出桶中进行查找。因此,希望同一散列地址的溢出桶和基桶在磁盘上的物理位置不要相距太远,最好在同一柱面上。

     在散列文件中进行查找时,首先根据给定值求得散列地址(即桶编号),将基桶的记录读入内存,进行顺序查找。
     若找到关键字等于给定值的记录,则查找成功;否则,读入溢出桶的记录继续进行查找。
    
  2. 多关键字文件

    1. 多重表文件

      多重表文件(multilist file)的主文件通常是一个顺序文件,除对主关键字建有索引之外,还对每个需要查询的次关键字建立一个索引,同时将具有相同次关键字的记录链接成一个链表,并将此链表的头指针、链表长度及次关键字作为索引表的一个索引项。

    2. 倒排文件

      倒排文件(inverted file)和多重表文件的区别在于次关键字的索引结构不同,倒排文件中的次关键字索引称为倒排表。具有相同次关键字的记录之间在主文件中不再有用指针链接的链,在索引表中的索引项也没有头指针和链表长度的字段。

      在倒排表中的每个索引项由次关键字和具有该次关键字的所有记录的物理地址两部分组成。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值