数据存储( 散列表,B+树,二叉排序树)一些知识回顾

 

2011-10-6日:数据存储;散列表,B+树,二叉排序树,平衡二叉树

计算机程序主要关注两个核心的东西,一个是数据的存储,一个是数据的计算。在不同的编程的层次上,这两个核心的概念对应的实现方式不一定相同。今天去图书馆看了会书,回顾了数据结构中的一些关于数据存储的内容。

 

常用的顺序存储方式没有回顾,主要回顾了一些高效的数据存储的数据结构。

1:散列表。散列表是用散列的方式存储数据的一种数据结构。是一种非常实用的数据结构。普通的程序员在程序设计中也经常实际用到。一些重要的概念:散列函数,冲突函数; 直接定址法,除留余数法,线性探测,二次探测,溢出表法,链地址法。

 

2:B+树。B+树是存储记录索引的方式之一(其他方式如多级索引)。这种在普通的程序设计中不经常使用,文件系统中,一种目录索引的组织方式就是B+树。一些自己组织大量的(如上亿个)记录的程序中,如果内存空间不足以存放这些记录,那么采用散列存储则不行,因为内存空间不够大,需要把记录放在外存储器上的时候,可能会需要自己在具体问题中去实现这种数据结构。

 

3:二叉排序树。二叉排序树也是组织数据结构的一种高效的方式。首先空树是二叉排序树;二叉排序树是这么一颗树,任何一个根结点,其左子树的任何一个元素小于根结点,右子树的任何一个元素大于根结点;同时任何一个根结点其左子树是二叉排序树,右子树也是二叉排序树。中序遍历二叉排序树得到的是有序的序列。二叉排序树的高度,就是查找的最大次数。    二分查找判定树,“快速排序生成树”都是一颗二叉排序树。。。

 

4:平衡二叉树。当然实际更实用的是二叉排序树的一种进化版-> 平衡二叉树。采用平衡二叉树,可以使得二叉排序树的查找时间复杂度接近二分查找。那为什么我们不只用二分查找呢?原因是因为二分查找适合于数据元素变动较少的情况;平衡二叉树适合于数据元素经常插入删除的“动态”情况。

 

其他一些点:

尾递归可以容易转化成非递归的原因是递归的语句是算法的最后一条,因此保存的返回地址和参数变量等不需要实用。因此可以直接用循环的方式把递归转换成非递归。二叉排序树的查找就是一种尾递归。

譬如二叉排序树的递归和非递归方式的关键语句如下:

BST* findx(BST* bst)//递归

{

  if(bst==NULL)

   return NULL;

  else

  {

    if(bst->data==x)

      return bst;

    else if( bst->data < x)

      return findx(bst->lchild)

    else

      return findx(bst->rchild)

  }

}

BST* findx(BST *bst)//非递归

{

  if(bst==NULL)

   return NULL;

  BST* p=bst;

  while(p!=NULL)

  {

   if(p->data == x)

    return p;

    else if(p->data < x)

     p=p->lchild;

    else

     p=p->rchild;

   }

}

  

文件:流式文件;记录文件;

索引结构的组织方式问题;

 

帮我做选择题 将元素序列{18,23,11,20,2,7,27,33,42,15}按顺序插入一个初始为空的、大小为11的散列表中。散列函数为:H(Key)=Key%11,采用线性探测法处理冲突。问:当第一次发现有冲突散列表的装填因子大约是多少? A. 0.27 B. 0.45 C. 0.64 D. 0.73 分数 2 作者 DS课程组 单位 临沂大学 折半查找对应的判定中,外部结点是( )。 A. 一次成功查找过程终止的结点 B. 一次失败查找过程终止的结点 C. 一次成功查找过程中经过的中间结点 D. 一次失败查找过程中经过的中间结点 分数 2 作者 M 单位 西南石油大学 顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为( )次。 A. n B. n+1 C. n+2 D. n-1 分数 2 作者 M 单位 西南石油大学 在散列存储中,装填因子α的值越大,则( )。 A. 存取元素发生冲突的可能性就越大 B. 存取元素发生冲突的可能性就越小 C. 存取元素不可能发生冲突 D. 毫无影响 分数 2 作者 ZXM 单位 西南石油大学 分别以下列序列构造二叉排序树,与用其他三个序列所构造的结果不同的是( )。 A. (89,120,99,86,72,80) B. (89,120,99,80,72,86) C. (89,80,86,72,120,99) D. (89,80,120,72,86,99) 分数 2 作者 黄龙军 单位 绍兴文理学院 对n个元素的表做顺序查找,若查找每个元素的概率相同,则平均查找长度为( ) A. (n-1)/2 B. n/2 C. (n+1)/2 D. n 分数 2 作者 YJ 单位 西南石油大学 有序表元素存储在数组A[1..11]中,其元素为{A,B,C,D,E,F,G,H,I,J,K};二分法查找元素A依次比较的元素是 A. F,B,A B. F,E,B,A C. F,C,A D. C,B,A 分数 2 作者 DS课程组 单位 浙江大学 下列排序算法中,哪种算法可能出现:在最后一趟开始之前,所有的元素都不在其最终的位置上?(设待排元素个数N>2) A. 冒泡排序 B. 插入排序 C. 堆排序 D. 快速排序 分数 2 作者 DS课程组 单位 浙江大学 对一组数据{ 2,12,16,88,5,10 }进行排序,若前三趟排序结果如下: 第一趟排序结果:2,12,16,5,10,88 第二趟排序结果:2,12,5,10,16,88 第三趟排序结果:2,5,10,12,16,88 则采用的排序方法可能是: A. 冒泡排序 B. 希尔排序 C. 归并排序 D. 基数排序 分数 2 作者 DS课程组 单位 浙江大学 就排序算法所用的辅助空间而言,堆排序、快速排序、归并排序的关系是: A. 堆排序 < 归并排序 < 快速排序 B. 堆排序 > 归并排序 > 快速排序 C. 堆排序 < 快速排序 < 归并排序 D. 堆排序 > 快速排序 > 归并排序 分数 2 作者 考研试卷 单位 浙江大学 下列排序方法中,若将顺序存储更换为链式存储,则算法间效率会降低的是: 1.插入排序;2.选择排序;3.起泡排序;4.希尔排序;5.堆排序 A. 仅1、2 B. 仅2、3 C. 仅3、4 D. 仅4、5 分数 2 作者 DS课程组 单位 临沂大学 设一组初始记录关键字序列为(60,80,55,40,42,85),则以第一个关键字60为基准而得到的一趟快速排序结果是( )。 A. 40,42,60,55,80,85 B. 42,45,55,60,85,80 C. 42,40,55,60,80,85 D. 42,40,60,85,55,80
最新发布
06-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值