
Data Structures
文章平均质量分 79
nomasp
Android 工程师
展开
-
【数据结构】回顾散列表
1.散列表(hash table)的实现成为散列(hashing),是一种以常数平均时间执行输入、删除和查找的技术。但是那些需要元素间任何排序信息的数操作将不会得到有效的支持。2.散列函数示例int hash(const string & key, int tableSize){ int hashVal=0; for(int i=0;i<key.length();i++)原创 2015-05-09 17:31:13 · 2040 阅读 · 0 评论 -
【数据结构】回顾优先队列(堆)
1.优先队列有两项基本操作:插入(insert)和删除最小项(deleteMin),后者的工作是找出、返回和删除优先队列中最小的元素。而insert操作则等价于enqueue(入队),deleteMin则等价于dequeue(出队)。补充:C++提供2个版本的deleteMin,一个删除最小项,另一个在删除最小项的同时在通过引用传递的对象中存储所删除的值。2.优先队列的类接口template <ty原创 2015-05-10 12:46:56 · 2336 阅读 · 0 评论 -
【数据结构】回顾二叉树
1.为什么会有树?因为当有大量的输入数据时,链表的线性访问时间就显得略长了。而树结构,其大部分操作的运行时间平均为O(logN)。2.树的实现并不难,几行代码就搞定了。struct TreeNode{ Object element; TreeNode *firstChild; TreeNode *nextSibling;}3.遍历形式:// 中序遍历二叉树void in原创 2015-05-09 16:46:44 · 2076 阅读 · 0 评论 -
【数据结构】回顾表、栈、队列
1.如何通过调整链而不是数据来交换两个相邻的元素? // 单向链表 Node *p,*afterp; p=beforep->next; afterp=p->next; p->next=afterp->next; beforep->next=afterp; afterp->next=p; // 双向链表 Node *beforep,*a原创 2015-05-09 15:31:49 · 1989 阅读 · 0 评论 -
【数据结构】回顾栈ADT和队ADT
1.简单的说,栈就是只在一个位置上进行插入和删除操作的表,而这个特殊的位置就是表的末端,但这却不被成为栈的末端,而是顶(Top)。2.栈的基本操作时进栈和出栈,英文名分别是push和pop,分别相当于插入和删除。切记对空栈进行pop和top操作在栈ADT被认为是错误的,而如果push在空间之外进行操作也是有实现限制的,但这并不是ADT错误。3.栈的特点是后进先出,对于学生来说可能用食堂里堆砌起来的餐原创 2015-05-07 22:40:30 · 2807 阅读 · 0 评论 -
【数据结构】回顾表ADT
1.对于表的所有操作来说,都可以使用数组来实现,而且数组虽然是静态分配的,但内部存储数组的vector类却允许在需要时将数组的大小增加一倍。2.正是因为数组的实现,使得printList以线性时间来执行,而findkth甚至是通过常数时间。最不济的是插入和删除了,如果位置不好,比如说在0号位置插入就需要将整个数组的所有元素都向后移,为O(N)。正是为了避免插入和删除的线性开销,我们就开始使用一种叫做原创 2015-05-07 22:14:16 · 2580 阅读 · 0 评论 -
图论算法 有图有代码 万字总结
图的定义背景知识看到这篇博客相信一开始映入读者眼帘的就是下面这幅图了,这就是传说中的七桥问题(哥尼斯堡桥问题)。在哥尼斯堡,普雷格尔河环绕着奈佛夫岛(图中的A岛)。这条河将陆地分成了下面4个区域,该处还有着7座连接这些陆地的桥梁。问题是如何从某地出发,依次沿着各个桥,必须经过每座桥且每座桥只能经过1次,最终回到原地。不知道这个问题且好奇的童鞋现在肯定在忙活着找出来这道题的结果了。是伟大的数学家欧拉(原创 2015-05-18 20:55:46 · 28239 阅读 · 31 评论 -
图论算法 有图有代码 万字总结 向前辈致敬
图的定义背景知识看到这篇博客相信一开始映入读者演练的就是下面这幅图了,这就是传说中的七桥问题(哥尼斯堡桥问题)。在哥尼斯堡,普雷格尔河环绕着奈佛夫岛(图中的A岛)。这条河将陆地分成了下面4个区域,该处还有着7座连接这些陆地的桥梁。问题是如何从某地出发,依次沿着各个桥,必须经过每座桥且每座桥只能经过1次,最终回到原地。不知道这个问题且好奇的童鞋现在肯定在忙活着找出来这道题的结果了。是伟大的数学家欧拉(原创 2015-05-11 21:15:32 · 3180 阅读 · 1 评论 -
如何用两个栈实现一个队列,以及用两个队列实现一个栈
开始再开始开始实现之前,首先将定读者已经理解了栈和队列的区别(如果不理解的话,可以先看看这一篇,传送门:【算法】7 分不清栈和队列?一张图给你完整体会 )用两个栈实现一个队列这本来就是一道面试题,所以如果你感兴趣的话可以先自己实现一遍。这是队列的声明:template <typename T> class CQueue{public: CQueue(void); ~CQueue(v原创 2015-10-24 13:56:38 · 3284 阅读 · 0 评论