哈希表/散列表hash table在插入、删除、查找上具有“平均常数时间复杂度”O(1),hash table原理大部分都了解,具体实现还是要看其源代码。...
分类:
其他好文 时间:
2014-08-17 20:02:02
阅读次数:
398
当二叉树在某些情况下退化为类单链表时,它的查找、插入、删除运算复杂度将不再是O(logN)),解决问题的方法就是尽量维持树的平衡。节点的平衡因子定义为左子树高度减去右子树高度,AVL树中每个节点平衡因子为0,1,-1;具体代码: 1 #include 2 #include 3 using na...
分类:
其他好文 时间:
2014-08-17 17:01:22
阅读次数:
323
给定一个单链表,只给出头指针h:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少?解法:1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出...
分类:
其他好文 时间:
2014-08-17 11:34:22
阅读次数:
236
按照书上的说法,引入头结点有一下两个优点:
由于开始结点的位置被存放在头结点的指针域中,所以在链表的第一个位置上的操作和在表的其他位置上的操作一致,无须进行特殊处理。
无论链表是否为空,其头指针是指向头结点的非空指针,因此空表和非空表的处理也就一致了。
你可能会疑惑:难道非得要头指针吗?难道没有头结点,插入、删除、空表的处理就不一致了吗?(貌似有一些同学和我有同样的疑问)...
分类:
其他好文 时间:
2014-08-16 22:33:51
阅读次数:
300
STL中,关联式容器的内部结构是一颗平衡二叉树,以便获得良好的搜索效率。红黑树是平衡二叉树的一种,它不像AVL树那样要求绝对平衡,降低了对旋转的要求,但是其性能并没有下降很多,它的搜索、插入、删除都能以O(nlogn)时间完成。平衡可以在一次或者两次旋转解决,是“性价比”很高的平衡二叉树。...
分类:
其他好文 时间:
2014-08-15 22:36:59
阅读次数:
445
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用Strin..
分类:
编程语言 时间:
2014-08-14 16:59:49
阅读次数:
256
60.在 O(1)时间内删除链表结点(链表、算法)。题目:给定链表的头指针和一个结点指针,在 O(1)时间删除该结点。链表结点的定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;};函数的声明如下:void DeleteNode(ListNode*....
分类:
其他好文 时间:
2014-08-14 15:56:18
阅读次数:
148
1. 堆堆:n个元素序列{k1,k2,...,ki,...,kn},当且仅当满足下列关系时称之为堆:(ki = k2i,ki >= k2i+1), (i = 1,2,3,4,...,n/2)若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树...
分类:
其他好文 时间:
2014-08-11 17:05:42
阅读次数:
253
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
//增加节点
/*第一个参数是一个指向指针的指针。当我们往一个空链表中插入一个节点时,新插入的节点
就是链表的头指针。由于此时会改动头指针,因此必须把pHead参数设为指向指针的指针*/
void addToTail(ListNode** pHead, int value) ...
分类:
其他好文 时间:
2014-08-11 15:00:22
阅读次数:
307
第 7 题(链表)微软亚院之编程判断俩个链表是否相交给出俩个单向链表的头指针,比如 h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。问题扩展:1.如果链表可能有环列?2.如果需要求出俩个链表相交的第一个节点列?看到这个题目我很困惑。如果链表的结构是下面这个样子typede...
分类:
其他好文 时间:
2014-08-10 12:45:20
阅读次数:
258