
数据结构与算法
文章平均质量分 72
kevinzhangyang
这个作者很懒,什么都没留下…
展开
-
判断单链表是否有环以及两个单链表是否相交?
链表是最常用的数据结构之一,总结其常见应用中的问题及其解决方法是很有意义的。原创 2011-07-22 16:39:09 · 112 阅读 · 0 评论 -
常见排序算法
从大的方面来说,排序可以分成内排序和外排序——内排序是外排序的基础。我们常用的内排序又可以粗略分成下面的类型: 1.经典算法:如冒泡排序; 2.插入排序及希尔排序; 3.选择交换排序; 4.堆排序; 5.归并排序; 6.快速排序。别看排序有那么多种类型,但它们都离不开这样的核心思想:|有序序列区|无序序列区|原创 2011-11-08 16:20:50 · 926 阅读 · 0 评论 -
数据结构学习资料
牛人的博客:http://blog.youkuaiyun.com/v_july_v/article/details/6870251http://blog.youkuaiyun.com/v_JULY_v/article/details/6460494 一个实现带min()函数的栈:实现原理入栈时,比较辅助栈栈顶元素大小,如果新增元素小于等于辅助栈栈顶元素,辅助栈同时入栈。出栈时,如果出栈元素等于辅助原创 2011-11-03 16:08:01 · 676 阅读 · 0 评论 -
二分查找法及判断一个数组中是否有两个元素之和为指定值
请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合里快速判断是否存在两个元素,其和等于某一指定值key。 方法一: 思路:1.对数组进行归并排序或快速排序,运行时间为O(nlgn);2.对已经排序的的数组进行遍历,并在遍历当前元素x时,在其后的序列里用binary search查找是否存在key-x,。binary search 运行时间为O(lgn原创 2011-11-14 17:54:59 · 5328 阅读 · 1 评论 -
二叉搜索树的一种C++实现
二叉树的一个重要的应用是它们在查找中的使用。二叉搜索树的概念相当容易理解,即:对于树中的每个结点X,它的左子树中所有关键字的值都小于X的关键字值,而它的右子树中的所有关键字值都大于X的关键字值。这意味着该树所有的元素都可以用某种统一的方式排序,如中序遍历,将获得元素的按升序排序。 /*bstree.h (btree.h is the header file for class BTr原创 2011-08-01 11:10:28 · 708 阅读 · 0 评论 -
二叉树的一种C++实现
树是一种非线性的数据结构,最常用到的是树和二叉树,其中又以二叉树更为实用。 下面是二叉树的一个C++实现:/*btree.h*/#ifndef __BINARY_TREE_H__#define __BINARY_TREE_H__#include #incl原创 2011-07-29 15:58:11 · 906 阅读 · 0 评论 -
队列的两种C++实现
像栈一样,队列(queue)也是表。然而,使用队列时插入在一端进行而删除则在另一端进行,也就是先进先出(FIFO)。队列的基本操作是EnQueue(入队),它是在表的末端(叫做队尾(rear))插入一个元素;还有DeQueue(出队),它是删除(或返回)在表的开头(叫做队头(fr原创 2011-07-28 15:29:00 · 13829 阅读 · 3 评论 -
单链表的一个C++实现
下面是单链表的一个C++实现,参考了《数据结构与算法分析C语言版》及不少牛人的分析总结,在此一并感谢了。在VC2005上经反复验证试验,结果非常不错。但可能还有不少bug,如果发现bug, 请告诉我一下。 注意:单链表及双向及循环链表均不适用表头(即哑节点,dummy node原创 2011-07-27 11:12:40 · 912 阅读 · 0 评论 -
判断链表是否有环及两链表是否相交
单向链表是最常用的数据结构之一,因此总结其常见的问题及其解决方案是很有意义的。 问题1:如何判断一个单向链表是否有环?如果有,如何找到其入口节点的指针? 算法思想:用两个指针p1,p2同时指向链表的头部,p1一次移动一步,p2一次移动两步,如果最终p1原创 2011-07-27 13:40:55 · 6883 阅读 · 1 评论 -
栈的两种C++实现
栈是应用最广泛的数据结构之一,很有必要对其进行一些总结。栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top),它是后进先出(LIFO)的。对栈的基本操作只有push(进栈)和pop(出栈)两种,前者相当于插入,后者相当于删除最后的元素。原创 2011-07-28 12:32:52 · 1137 阅读 · 0 评论 -
双向链表的一个C++实现
下面是双向链表的一个C++实现,参考了《数据结构与算法分析C语言版》及不少牛人的分析总结,在此一并感谢了。在VC2005上经反复验证试验,结果非常不错。但可能还有不少bug,如果发现bug, 请告诉我一下。 注意:单链表及双向及循环链表均不适用表头(即哑节点,dummy nod原创 2011-07-27 12:07:20 · 5646 阅读 · 0 评论 -
栈的两种C++实现
栈是应用最广泛的数据结构之一,很有必要对其进行一些总结。栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top),它是后进先出(LIFO)的。对栈的基本操作只有push(进栈)和pop(出栈)两种,前者相当于插入,后者相当于删除最后的元素。原创 2011-07-28 12:26:41 · 100 阅读 · 0 评论 -
循环链表的一个C++实现
下面是循环链表的一个C++实现,参考了《数据结构与算法分析C语言版》及不少牛人的分析总结,在此一并感谢了。在VC2005上经反复验证试验,结果非常不错。这是一个比较简易的实现,让其继承自单链表,并提供了一个专为解决约瑟夫问题的函数(RemoveAt)。以后将会开发一个更一般性的版原创 2011-07-27 16:51:33 · 5002 阅读 · 0 评论 -
大整数相乘
算法领域一个常见的问题是处理大整数相乘。这里做一个小结吧。这个问题的解法很多,最简单的有使用多项式相乘的思想,最快的还有使用傅里叶变换,变换到频域空间操作。 最简单的方法:多项式相乘下面是这种方法的一个实现:#define N 40#define M 100int res[M];/****** Function: 大整数相乘算法* 参数:* a:原创 2011-11-10 10:07:57 · 2944 阅读 · 0 评论