加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

【数据结构】散列表

发布时间:2021-03-30 19:28:14 所属栏目:安全 来源:网络整理
导读:副标题#e# ? ? ??散列表是典型的以空间换取时间的数据结构;它在插入、删除、查找操作上也具有常数平均时间的表现,但是这种表现是以统计为基础的; 基本知识 (1)负载系数,指元素的个数除以表格大小,除非采用开链法(拉链法),否则负载系数应该在0~1之


删除元素

//删除所有与节点键值相同的元素
template <class V,A>::size_type 
hashtable<V,A>::erase(const key_type& key)
{
  const size_type n = bkt_num_key(key);     //找到插入位置
  node* first = buckets[n];     //第一个元素的指针
  size_type erased = 0;

  if (first) {
    node* cur = first;    //当前指针,首指针先跳过
    node* next = cur->next; //下一个指针
    while (next) {  //下一个元素和key来比
      if (equals(get_key(next->val),key)) {    //节点的键值相同
        cur->next = next->next;   //先改变当前指针的指向
        delete_node(next);        //删除
        next = cur->next;         //next
        ++erased;
        --num_elements;
      }
      else {
        cur = next;         
        next = cur->next;  
      }
    }
    if (equals(get_key(first->val),key)) { //若首指针也相同,也要删除
      buckets[n] = first->next;     //buckets指向下一个
      delete_node(first);           //删除
      ++erased;
      --num_elements;
    }
  }
  return erased;
}

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读