数据结构与算法
文章平均质量分 64
抗大象的蚂蚁
这个作者很懒,什么都没留下…
展开
-
顺序表的实现
使用c++实现一下常用的数据结构,参考书为《数据结构、算法与应用-c++语言描述》。此次代码为顺序表,为了保证通用性采用模板机制,算法本身没有什么难度,毕竟是基础算法,但是长时间不用c++,一些高级特性和陷阱着实让人难受。此次代码共分三个文件:1、Sq_list.h :实现顺序表的结构和基本操作。2、excp.h :实现异常类,关于命名空间的问题,直接将异常类加入到std空间内。原创 2014-04-15 10:32:55 · 449 阅读 · 0 评论 -
「算法导论」:插入排序
/************************************************************************* > File Name: insert_sort.cpp > Author sangoly > Mail: sangoly@aliyun.com > Created Time: 2014年06月28日 星期六原创 2014-06-29 19:33:18 · 443 阅读 · 0 评论 -
「算法导论」:到底什么是循环不变式?
算法导论第二产原创 2014-06-28 18:40:34 · 9299 阅读 · 0 评论 -
「算法导论」:二分查找
时间复杂度:o(lgn)空间复杂度原创 2014-07-01 16:45:51 · 652 阅读 · 0 评论 -
「算法导论」:课后习题2.3-7求集合S中是否有两个元素的和为X
本题要求时间复杂度控制在o(nlgn),原创 2014-07-01 20:18:15 · 688 阅读 · 0 评论 -
「算法导论」:思考题2-4,逆序对问题
问题描述: 假设A[1..n]是一个有n个不同数的数组,若i原创 2014-07-02 15:07:26 · 1986 阅读 · 0 评论 -
「算法导论」:分治法求最大子数组
时间复杂度:o(nlgn)原创 2014-07-07 16:54:32 · 600 阅读 · 0 评论 -
KMP算法的实现
语言:C++思想:1原创 2014-10-17 12:53:13 · 501 阅读 · 0 评论 -
快速排序
#include#includeusing namespace std;void swap(int &a, int &b) { a = a ^ b; b = a ^ b; a = a ^ b;}// Must make sure pivotIndex belongs to [head, tail]int partion(int a[], int head,原创 2015-03-17 13:05:33 · 385 阅读 · 0 评论 -
堆排序
实现了一下堆排序,几个小部分包括自顶向下调整、自下向上调整、插入操作、删除操作、数组建堆、堆排序,使用了函数指针来支持大顶和小顶两种模式#include#includeusing namespace std;void swap(int &a, int &b) { a = a ^ b; b = a ^ b; a = a ^ b;}// Use the arr原创 2015-03-17 15:02:40 · 482 阅读 · 0 评论 -
「算法导论」:归并排序
时间复杂度:o(nlgn)空间复杂度:s(n)代码:原创 2014-06-30 21:07:09 · 453 阅读 · 0 评论 -
「算法导论」;选择排序
时间复杂度:o(n^2)空间复杂度:s原创 2014-06-30 19:57:35 · 546 阅读 · 0 评论 -
链表的实现
此次实现的数据结构仍为线性表,物理结构上采用链表结构,与顺序表相比有以下特点:优点:不再有存储空间上的限制(主要取决了机器的存储能力,不会提前分配一定量的空间)缺点:失去了随机存储特性,若只用简单的链表则查找、插入、删除都将占用O(K)的时间(K为操作位置)使用C++语言实现。代码如下:原创 2014-04-15 10:34:56 · 411 阅读 · 0 评论 -
间接寻址
间接寻址(indirect addressing)是公式化描述和链表描述的组合。采用这种方法,可以保留公式化描述方法的许多优点,在单位时间内访问每个元素,可采用二叉搜索方法在对数时间内对一个有序表进行搜索等等。与此同时,也可以获得链表描述方法的重要特色---在诸如插入和删除操作期间不必对元素进行实际的移动。因些,大多数间接寻址链表操作的时间复杂度都有元素的总数无关。 说到底,间接寻址只是一个原创 2014-04-15 10:42:30 · 1188 阅读 · 0 评论 -
模拟指针(simulated pointer)
模拟指针,也就是清华严老师《数据结构-C语言描述》中的静态链表,静态链表的引用是使用一段连续的存储区还模拟指针的功能,可以有效的利用一段连续内存进行一定范围内可变的子链表的空间分配,此数据结构原理比较简单,但是实现起来(至少我个人感觉)有一些绕,原因在于结点的指针域和所申请的整个空间数组的下标都是用整型来表示,极易出错,由于使用连续存储区,稍有不甚将指针地址错写成数组下标则很容易出错并且很难被发现原创 2014-04-15 11:18:22 · 973 阅读 · 0 评论 -
插入排序
#include #include using namespace std;/* * name : insertion sort * author : sangoly * O(n^2) * S(1) * date : 2014/4/15 */void insert_sort(int a[], int length){ for (int j=1; j<length;原创 2014-04-15 12:15:22 · 360 阅读 · 0 评论 -
归并排序
#include #include #include using namespace std;void merge(int a[], int start, int middle, int end){ int max = numeric_limits::max(); int tempArray1[middle-start+2];//include the s原创 2014-04-15 13:25:53 · 374 阅读 · 0 评论 -
选择排序
#include #include using namespace std;/* * name : selection sort * author : sangoly * O(n^2) * S(1) * date : 2014/4/15 */void selection_sort(int a[], int length){ for (int i=0; i<lengt原创 2014-04-15 13:52:11 · 357 阅读 · 0 评论 -
二分查找
#include #include using namespace std;/* * name : selection sort * author : sangoly * O(n^2) * S(1) * date : 2014/4/15 */ int binary_search(int a[], int v, int low, int high) { if (原创 2014-04-15 14:22:39 · 369 阅读 · 0 评论 -
利用归并排序求一序列中inversion的个数
inversion指的是在一个序列a[]中若有i原创 2014-04-15 20:36:07 · 552 阅读 · 0 评论 -
利用分治法求最大子数组
利用分治法求解最大连续子数组问题原创 2014-04-19 00:22:02 · 898 阅读 · 0 评论 -
二叉排序树删除节点
#includeusing namespace std;class TreeNode {public: int val; TreeNode *left, *right; TreeNode(int val) { this->val = val; this->left = this->right = NULL; }};cla原创 2015-09-15 13:30:43 · 601 阅读 · 0 评论