
数据结构
my_et
这个作者很懒,什么都没留下…
展开
-
堆排序实现
void sift(int k,int m){ int temp=data[k]; int i=k; int j=2*i; bool finished=false; while(j<=m&&!finished) { if(j<m&&data[j]<data[j+1]) j++; if(data[j]<=temp) finished=true; else {原创 2013-04-26 10:03:11 · 482 阅读 · 0 评论 -
进一步理解快速排序
int QKpass(int left,int right){ int k; int low=left,high=right; k=data[low]; while(low<high) { while(lowk) high--; if(low<high) { data[low]=data[high]; low++; } while(low<high原创 2013-04-26 10:00:53 · 686 阅读 · 0 评论 -
最大K个数
最近学习了排序算法的应用--最大K个数。从比较多的数据中找出最大的K个数。该问题主要有以下几种解法:1.直接进行排序,堆排序和快速排序都是比较好的选择,在时间为N*lgN的时间开销下完成排序然后再选择前K个数即为最大的K。在这里可以讨论一下K的大小,如果K2.如果只要求找出最大的K个数,而对K个数顺序没有要求,那么可以对这一堆数据进行改良的快速排序:首先选择数据中部的元素m原创 2013-04-26 10:05:19 · 824 阅读 · 0 评论 -
二分查找实现
int BinSrch(int a){ int top=0; int bottom=ROWS-1; int mid=(top+bottom)/2; if(data[top]>a||data[bottom]<a) { printf("不在查找范围\n"); return -1; } while(top!=bottom) { if(data[mid]==a) re原创 2013-04-26 10:02:12 · 411 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历实现
// g1.cpp : 定义控制台应用程序的入口点。//#include #include #define fileName "book.txt"#define ROWS 10#define INFI 10000#define NODES 6typedef struct Node{ bool isVist; char name;}Node;type原创 2013-04-26 11:16:32 · 826 阅读 · 0 评论 -
树的非递归遍历
在写的时候可以先写下以下算法,然后将其转化为代码先序1.访问p节点2.节点入栈3.p=p->Lchild4.访问p5.压栈p6..p=p->Lchild7.p不为空 goto step 28.栈不为空,弹栈p,否则goto step 109.p=p->Rchlid,goto step 410.结束void PreOreder(Node *bt)原创 2013-06-04 15:32:16 · 501 阅读 · 0 评论 -
Tire树 求出现次数最多单词
Tire树 又称字典树 Tire树 核心的思想是以空间换时间,每个节点下面分26叉,需要统计一个单词比如abc,这时候先找根节点,然后由a分支到a节点,然后在a节点里面找b分支,然后到b节点去找c分支,最后将该节点的单词计数器加1.1.Tire树每个节点的定义class TireNode{public: char c; int count; Tir原创 2013-06-14 16:51:38 · 1036 阅读 · 0 评论 -
按层次/广度遍历二叉树
原理和图的广度优先遍历一样算法描述如下1.节点入队列2.取队列首元素,访问之3.如果左子树不为空,入队4.如果右子树不为空,入队5.队列是否为空?否,GOTO STEP 26.结束关键代码:void printtree(Node* bt,Que *que){ if(bt==NULL) { cout<<"空树"<<endl; return ;原创 2013-05-26 22:11:11 · 518 阅读 · 0 评论 -
判断可能出栈顺序--动态规划解法
先给定一个进栈序列(如1,2,3,4,5),可以随意弹栈(如在3进栈之前,2就可能已经进栈然后出栈了)然后给定一个序列如5,4,3,2,1和3,4,5,1,2,判断是不是其弹栈序列。我是用动态规划强行弄出来的,弄出来后查质料得知这是一个卡特兰数问题。。。。思路:例子4,3,5,1,2一旦一个数弹栈了比如上面序列中的4,在它进栈之前又在它后面出栈的元素,如1,2,3在它之前进原创 2013-05-20 14:36:59 · 1146 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理
本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分。第转载 2013-05-18 20:49:47 · 577 阅读 · 0 评论 -
原地转置单向链表
本身不难,主要应该关注边界的处理1.如果只有一个节点2.尾节点的处理3.输入的为空指针实现如下:#include using namespace std;class node{ public: int value; node * next;};int main(){ int length,i=1; int temp; cin>>length;原创 2013-05-12 15:44:01 · 1117 阅读 · 0 评论 -
跳跃表--加速链表访问
之前一次去实习笔试的时候,有一题笔试题是这样的,设计一个队列,使得它在高强度的插入和删除下任然具有较好的访问速度。当时想,数组虽然好,访问的时候是O(1)但是一旦涉及到删除和添加元素的时候,性能就下来了。 由此想到STL中的vector,往里面添加元素是是添加在末尾,一旦超过了其内存大小,在分配一块更大的内存(原来的两倍)然后将旧元素拷贝到新的内存空间去,这样虽然在拷贝的时候时间原创 2013-06-30 22:08:56 · 1447 阅读 · 0 评论