散列表的插入和删除
来源:互联网 发布:网络电视找不到电视猫 编辑:程序博客网 时间:2024/06/09 23:53
散列表进行插入和删除都要借助于hash函数,根据要插入或删除的值,对应到相应的位置,再对该位置进行操作。代码如下:
void collsion(hash_node *hash[],int elem, hash_node *news)//*hash[]传的是指针数组,其实传的是指针数组的首地址,即地址的地址,如果直接传数组元素的地址,返回并不指向该数组中元素的地址。处理冲突{ if(hash[elem]==NULL) { hash[elem]=news; } else { news->next=hash[elem];//头插法,elem是数组元素下标,即该下标 链表的头结点 hash[elem]->prev=news; hash[elem]=news; }}void Insert(hash_node *hash[],int key){ hash_node *temp=new hash_node(); temp->data=key; temp->next=NULL; temp->prev=NULL; int location=Hash(key);//此位置就是随机的,根据key的值来得到它的位置 collsion(hash,location,temp);//location元素下标,即头结点}void Delete(hash_node *hash[],int key){ int low=Hash(key); hash_node *temp=hash[low]; if(temp==NULL) { cout<<"this number doesn't exit!"<<endl; return; } else { if(temp->data==key)//预防第一个就找到该值 { hash[low]=temp->next; delete temp; return; } else { while(temp->data!=key) { if(temp->next==NULL) { cout<<"this number isn't found"<<endl; return; } temp=temp->next; } if(temp->next==NULL)//预防是最后一个找到该值 { temp->prev->next=NULL; delete temp; } else { temp->prev->next=temp->next; temp->next->prev=temp->prev; delete temp; } } }}
由此可知,插入操作时间复杂度就是O(1),删除操作的时间复杂度可根据链表输入长度决定,在最坏情况下,链表长度为n,时间复杂度就为o(n).
0 0
- 散列表的插入和删除
- 线性列表的添加、删除、插入和修改
- 闭散列表的查找、插入和删除操作的完整C代码
- Java实现列表的创建,插入,删除
- 列表的添加、插入、删除、切割、合成
- c语言单向列表的创建、插入、删除、排序和遍历。。。
- 数据的插入和删除
- 单链表的插入和删除
- 单链表的插入和删除
- BST的插入和删除
- 红黑树的插入和删除
- 容器的插入和删除
- 二叉排序树的插入和删除
- 单链表的插入和删除
- RecyclerView的插入和删除
- 单链表的插入和删除
- 单链表的插入和删除
- RecyclerView的插入和删除
- Android studio使用与设置
- OPENCV直方图均衡化
- DSP-C6416-录音混音算法工程
- 中文分词之左右完整性及稳定性
- 测试管理-测试任务安排
- 散列表的插入和删除
- 使用Chrome来调试你的Android App
- 《IOS多线程基础》
- 安装 MySQLdb 出现 Python version 2.7 required, which was not found in the registry
- Node.js入门第二讲
- 语言模型srilm(二) prune剪枝
- [Android]代码实现ColorStateList及StateListDrawable
- Vmvare 安装mac系统遇到几个小问题
- 一个简单的嗅探器