08 2020 档案
摘要:实现的结构和闭散列表完全一致,由于开散列表没有扩容机制,因此在创建散列表时要大概估计适合的散列表大小。 另外就是理论上插入到同一个散列表的键值是不能重复的,否则会造成查询和删除时的错误。(leetcode第一题两数之和是可能存在重复键值的,要考虑如何做特殊处理) #include <iostream
阅读全文
摘要:可以根据散列表解决散列冲突的方法把散列表分成开散列表和闭散列表: 当发生散列冲突时,使用开放寻址法把冲突的数据项放入别的空的单元中,称为闭散列表,其中寻址方法有线性探测法,平方探测法等。 当发生散列冲突时,使用拉链法,把映射到同一地址的数据元素组织成链表,称为开散列表 闭散列表的装载因子不能大于1,
阅读全文
摘要:全部为c++实现 一,线性表篇 1.单链表 2.双链表 3.双向循环链表 4.顺序表 5.链表的常见操作 树篇 三,哈希表篇 1.闭散列表 2.开散列表 图篇
阅读全文
摘要:以下所有的链表操作都基于单链表类。 并且假设未知链表的长度,没有取链表任意节点的指针的辅助函数(也就是不能用currentLength和move()) 1.单链表翻转:就地翻转法,头节点插入法 头节点插入法:实现思路简单,把链表的数据从都头到尾读入到一个栈中,再依次出栈构成新的链表。头节点插入法适用
阅读全文
摘要:顺序表是线性表除了链表的另外一种形式,底层是以数组实现,功能类似于STL中的vector 顺序表支持随机查找,查找的时间复杂度是O(1),但是由于删除和插入操作都要涉及到数据的整体移动,因此删除和插入操作的平均时间复杂度也是O(n)级别的,对于需要频繁查找的情景顺序表更好用,对于需要频繁插入删除的情
阅读全文
摘要:双向循环链表类似于双链表,但是在实现上有不同: 双向循环链表没有头尾哨兵节点,因此在插入/删除链表时必须考虑特殊情况:往空表中插入第一个元素和删除表中最后一个元素,另外还需要注意的是,如果插入/删除的是表中的第一个元素,将会改变起始指针begin的位置,造成起始指针的左移或者右移,这也是一种特殊情况
阅读全文
摘要:1.把双链表这种数据结构的更高一级别抽象(线性表)单独写成一个抽象类,然后用于双链表类的继承,这种写法可以规范双链表应该有的接口/操作 2.把节点定义为类内的结构体而不是单独的代码显得更加简洁。 3.在双链表的插入/删除/查找操作中都要找到指向第i个节点的指针,把这个操作统一定义为一个私有的辅助函数
阅读全文
摘要:单链表为链表的一种,链表和顺序表又同属于线性表,在正式写单链表之前,可以先定义一个线性表抽象类,用来规范所有线性表共同的操作 #include <iostream> using namespace std; // 线性表:顺序表和链表共同的抽象类 template<typename elemType
阅读全文

浙公网安备 33010602011771号