设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 服务器 > 安全 > 正文

【数据结构】散列表(3)

发布时间:2021-03-30 15:03 所属栏目:53 来源:网络整理
导读:删除元素 //删除所有与节点键值相同的元素template class V,A::size_type hashtableV,A::erase(const key_type key){ const size_type n = bkt_num_key(key); //找到插入位置 node* first = buckets[n]; //第一个元


删除元素

//删除所有与节点键值相同的元素
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;
}

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读