
数据结构与算法
文章平均质量分 65
Gouhailiang
卑微的世界,不再需要欣赏,甚至别人的应和都显得多余
展开
-
链表使用: 两个有序链表序列的合并
本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:List Merge( List L1, List L2 );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode原创 2016-10-26 16:05:59 · 8604 阅读 · 4 评论 -
堆的实现-用数组表示的完全二叉树
堆时一种具有优先级的队列,取出元素的顺序按照元素的优先级 堆若用数组和链表,二者的插入时间复杂度为O(1),删除时间复杂度为O(N) 若用有序数组或有序链表,插入操作所需时间均为O(N),删除操作所需时间复杂度为O(1) 更为理想的堆实现方式为:用数组表示的完全二叉树. 另外将该完全二叉树调整为任何父结点都比左子树和右子树的元素大(最大堆) 我们来看以下这样实现的好处: 插入操作:原创 2016-11-08 17:44:36 · 2455 阅读 · 0 评论 -
二叉树(创建、遍历、树的最大深度和最小深度)
我们利用链表来实现一个二叉树,其实一般的二叉树用处并不大,后面会引申出二叉搜索树,红黑树,堆等。。再此我们只需要掌握如何对二叉树进行遍历,首先我们用前序遍历的方法创建一个二叉树,然后研究其遍历方法(递归),只给出了中序遍历,其他遍历方法类似,交换一下顺序即可。另外,还需要了解一些其他对树的操作,再此举一个《剑指offer》上的一个笔试题,即给出一个树,求出树的最大深度和最小深度。原创 2016-11-08 21:29:44 · 3945 阅读 · 0 评论 -
二叉搜索树与平衡二叉树
二叉树也是一种树,适用与以上的全部操作,但二叉搜索树能 够实现数据的快速查找 性质: 非空左子树的所有键值小于其根节点的键值 非空右子树的所有键值大于其根节点的键值 左右子树都是二叉搜索树以下代码实现了二叉树 的插入、查找操作。。并给出了一个《剑指offer》上的一道笔试题:查找一个二叉搜索树中第k小的元素。原创 2016-11-08 21:57:09 · 7483 阅读 · 1 评论 -
几种常用的排序算法(冒泡,插入排序,希尔排序,快速排序)
#include #include using namespace std;/* 冒泡排序 冒泡排序总的比较次数为:(n-1)+(n-2)...+1=n*(n-1)/2 时间复杂度:O(n^2)(数量级)*/void bubble_sort(int arr[], int n){ int temp; for(int i=0原创 2016-11-17 11:34:50 · 1782 阅读 · 0 评论 -
0/1背包问题的动态规划分析
0/1背包问题: 简单来说就是,面对体积和价值不同的物品,如果在背包容量下尽可能装价值最多的物品。而且每个物品只有一件,当物品数较多,价值量区别不是那么明显时,这对一个贪财老可是一个巨大的折磨(哈哈),我们如何去解决这样一个问题呢! 假设有一个容量为10的背包 另外有五个供选择的物品编号为:1 2 3 4 5 物品的重量(w)分别为:2 2 6 5 4 物品的价原创 2016-11-17 19:06:41 · 956 阅读 · 0 评论