
Data Structure
文章平均质量分 60
MJN
programming and sharing.
展开
-
插入排序(ASC)
1、算法描述:将待排序表看做左、右两部分,左边为有序,右边为无序;将无序区的数据依次插入到有序区中2、辅助函数/** * Function : 交换两个整型数据 * Param : (int)待交换变量的引用 * Param : (int)待交换变量的引用 * Return : No */void swapData(int &a, int &b){ a ^= b; b ^= a; a ^= b;}3、直接插入排序/** * F原创 2010-09-02 23:44:00 · 650 阅读 · 0 评论 -
栈
栈的操作规则:后入先出,在栈顶执行入栈、出栈操作。1. 代码实现todo...2. 相关问题:1) n个元素依次入栈,则可能的出栈序列有2^(n-1)个。3. 应用1) 判断括号是否匹配bool isBracketValid(char *str){ bool result = true; int i = 0; Stack s; wh原创 2011-10-31 22:11:45 · 567 阅读 · 0 评论 -
折半查找
前提条件:原记录已经有序。时间复杂度:O(log2n)/** * 设data已经按升序排列 * 非递归版本 */templateint binarySearch(const T *data, int n, T k){ int index = -1; int low = 0; int high = n - 1; int mid; whi原创 2011-10-31 22:28:02 · 584 阅读 · 0 评论 -
线性表的顺序存储结构与链式存储结构的比较
1. 顺序存储结构:优点:1)随机存取(时间复杂度为O(1));2)无需为表示表中元素之间的逻辑关系而增加额外的存储空间;缺点:1)插入、删除操作需要移动大量元素,效率低(时间复杂度为O(n));2)表的长度难以确定2. 链式存储结构优点:1)插入、删除不需要移动数据,效率高(时间复杂度为O(1));缺点:1)存取时需要遍历,效率低(时间复杂度为O(n)原创 2011-10-29 21:59:47 · 22099 阅读 · 4 评论 -
基于间接寻址的线性表
顺序存储结构的线性表中,有一个显著的缺陷是:增加或删除元素时,要移动大量数据(平均移动n/2次),当每个元素占用的空间较大时,效率很低。间接寻址就是解决此问题的一种方案。间接寻址的思想是:在顺序存储结构的基础上,每个元素存储数据的地址,增加或删除时只需移动地址,当元素很大且表长度很大时,效率的提升将很可观。C++语言的代码实现如下:/** * 基于间接寻址的顺序存储结构线性表原创 2011-10-30 12:20:27 · 1615 阅读 · 0 评论 -
顺序存储结构的线性表
顺序存储结构的线性表采用数组实现,优点是随机存取;缺点是删除时,需要移动数据,特别是当元素很多时,效率很低(针对此问题的解决方案是,采用间接寻址)。在本文的代码实现中,借鉴了Java的ArrayList的思想,数组自动扩充(增倍)。以下是采用C++语言的实现代码:/** * List.h */#pragma once/** * @Descripton : 顺序存储结构的线原创 2011-10-29 16:26:14 · 1120 阅读 · 0 评论 -
堆排序(ASC)
<br /> 1、算法描述:堆排序是对选择排序的一种改进,即减少关键字的比较次数,选择排序没有把前一趟的比较结果保留下来,在后一趟选择时,把前一趟已做过的比较又重复了一遍。堆排序利用每趟比较后的结果,也就是在找出关键字值最小记录的同时,也找出较小的记录,减少了在后面的比较次数,从而提高了排序效率。<br />2、辅助函数:<br />/** * Function : 交换两个整型数据 * Param : (int)待交换变量的引用 * Param : (int)待交换变量的引用原创 2010-09-07 10:33:00 · 876 阅读 · 0 评论 -
快速排序(ASC)
1、算法描述:每一次把数组中的一个数放到它的最终位置上。从待排序数组中选取一个数(习惯取第一个数)key,将小于key的数的移到key前面,大于key的数移到key后面,结果将数组划分成两个子表,key插到分界线处。此过程称为“划分”。经过一次划分,key放到它的最终位置上,数组也被分成两个子表,利用递归,对key前面的子表执行划分,走到表长小于等于1;对于key后面的子表,执行相同的过程。2、函数partion:执行一次划分/** * Function : 确定data[low]的最终位置 * P原创 2010-09-04 20:24:00 · 1908 阅读 · 0 评论 -
希尔排序(ASC)
<br />1、算法描述:希尔排序是对直接插入排序的一种改进,它利用了插入排序的两个性质:1)若待排序数组按关键字值基本有序,则直接插入排序效率较高;2)若待排数组元素个数较少,则直接插入排序效率较高。希尔排序先将待排序列划分为若干小序列,在这些小序列中进行插入排序,表叔扩大小序列的长度,养活小序列的个数,这样使待排序列于更有序的状态,最后对全体序列进行一次直接插入排序,从而完成排序。<br />2、算法实现<br />/** * Function : 希尔排序(ASC) * Param :原创 2010-09-04 23:30:00 · 1212 阅读 · 0 评论 -
归并排序(ASC)
<br />1、算法描述:将若干有序序列逐步归并,最张归并为一个有序序列。这里用二路归并的非递归算法。<br />2、函数myMerge:一次归并,实现两个序列的归并<br />/** * Function : 归并排序(ASC) * Param : (int array)待排数组 * Param : (int array)已排数组 * Param : (int)第一个序列的起始下标 * Param : (int)第一个序列的末尾下标 * Param :原创 2010-09-07 09:28:00 · 674 阅读 · 0 评论 -
冒泡排序(ASC)
冒泡排序1、原始算法:2、改进一:增加一个flag标记某次循环是否有交换,若无,则表示已经是有序的,退出循环3、改进二:在改进一的基础上,增加两个变量:low,表示第一次交换的下标;high,表示最后一次交换的下标原创 2010-09-02 22:46:00 · 883 阅读 · 0 评论 -
选择排序(ASC)
1、算法描述:每一趟从待排序的数据元素中选出最小的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。2、在介绍算法之前,先写两个辅助函数。 3、原始算法原创 2010-09-02 23:25:00 · 1533 阅读 · 0 评论 -
模式匹配
模式匹配的定义:主串s中寻找子串t 的过程,子串t 称为模式。如果匹配成功,则返回t在s中第一次出现的位置。如:主串s:“ababc”匹配子串t:“abc”的结果为2(下标从0开始)。实现算法:1. BF算法todo。。。2. KMP算法KMP算法中,主串不需要回溯。int kmp(char *s, char *t) { void initNextArray(原创 2011-10-31 21:55:37 · 798 阅读 · 0 评论