- 浏览: 131446 次
- 性别:
- 来自: 成都
最新评论
-
yi_chao_jiang:
你好,多谢分享,问个问题,在上传数据的时候判断文件是否有上传记 ...
断点续传和下载原理分析 -
a41606709:
为什么我的tabhost显示不出来? 怎么设置在全部页面中让他 ...
TabActivity中的Tab标签详细设置 -
Zero颴:
大神篇,思路,配图都很清晰,perfect!
Android事件模型之interceptTouchEvnet ,onTouchEvent关系正解 -
QAZ503602501:
牛死人了!!!
B-树 -
mengsina:
很牛的文档。数学功底好啊
Android Matrix理论与应用详解
文章列表
1.堆的概念
这里只需要注意两点:
a.堆的存储方式:就是顺序存储在数组中,在二叉树中表现为满二叉树
b.堆的用处:用于排序,查找最大最小都非常方便
2.堆的实现
heapexception.h
#ifndef HEAPEXCEPTION_H
#define HEAPEXCEPTION_H
class ArrayOverFlowException{
public:
const char* what() const throw()
{
return "array over flow exception!\n ...
一.理论基础
1.什么是kmp算法
同BF算法一样,就是串的模式匹配算法。
前面已经学过,我想都应该明白BF算法,就是用一种最直观的方式进行模式匹配。
优点:非常容易理解,是我们常用的思维方式来编程;
缺点:效率比 ...
1.常见的字符串操作
如计算长度,求子串等都是考验基本功的,现在基本操作进行实现,如下
2.基本实现
mchar.h
//串的基本操作(注意:里面的所有操作要求串必须以'\0'结束)
#ifndef MCHAR_H
#define MCHAR_H
//注意:这里面的i都是位置,从1开始;而数组中对应于0,从0开始
class MChar{
public:
int strLen(const char *s); //串长度(在输入串的时候,必须以'\0'结束)
char* strCpy(char* s,const char* p); //串拷贝,p ...
这里面包含了所有常见的排序操作
1.性能等比较分析
2.代码实现
sort.h
//各种排序方法总结
#ifndef SORT_H
#define SORT_H
template<class T>
class Sort{
public:
void insertSort(T r[], int n); //直接顺序排序
void shellSort(T r[], int n); //希尔排序
void bubbleSort(T r[], int n); ...
1.Set的简单实现
set是利用二叉查找树来实现的,而且为了查找方便,添加了另外两个指针,一个指向下一个最小结点,一个指向上一个最大结点。
iset.h
//利用二叉查找树实现set
#ifndef ISET_H
#define ISET_H
template<class T>
struct Node{
T data;
Node<T> *rchild, *lchild; //左右孩子
Node<T> *parent; //父结点
Node<T> *next, *pre; //下一个最小和上一个 ...
1.红黑树
这个在july的博客中有详尽的说明,我就不在赘述了
http://blog.csdn.net/v_JULY_v/article/details/6105630
2.红黑树的插入
插入见下图:
1.什么是B-树?
这个在我的前一篇博客中已经详细的阐释过:
http://hao3100590.iteye.com/blog/1576846
具体的了解,好好看看这篇文章就可以了!
2.实现关键问题分析
a.B-树删除原则
见下图:
当然总结起来,大的方面就3点,具体的细节就没有做多大的说明,在下面具体实现的时候会说明
b.B-树的递归和非递归遍历
对于非递归遍历,比较麻烦,自己需要按照下面图中所示的方式来遍历B-树,输出的关键字大小从小到大排列,但是对于递归却相当简单,这里非递归没有利用栈来实现,所以注意!
c.B-树删除伪代码
见下图:
d.具体 ...
1.问题描述
什么是平衡二叉树?在此就不在赘述,下面主要就几个关键问题进行分析
2.关键问题
a.AVL树的非递归与递归插入
平衡二叉树的非递归的关键:
1.在寻找插入位置和旋转的时候设置其路径上的平衡因子,这个要特 ...
1.基本概念
二叉排序树,树的定义就不赘述了,主要就是想说明一下在设计类的过程中需要注意的问题。
a.问题引入?
设计插入,删除等操作的过程中,我们的二叉排序树根节点的指针有可能改变,如删除根结点的指针操 ...
1.B-树的概念
是一种多路搜索树,适合在磁盘等直接存取设备上组织动态的查找表,可能部分数据不在内存中。它作为索引文件的一种重要存储结构(数据库索引)
对于m阶(m>=3)B-tree,满足如下特性:
1)树中每个节点至多 ...
1.算法说明
就是建造哈夫曼树树,从而使得构造出的树带权路径长度最小
2.步骤
输入叶子结点个数n;
创建长度为2*n-1的数组并初始化;
while(i<n) 循环输入n个叶子结点的权值;
while(n-1次循环建立树){
在parent==-1的元素中查找权最小的两个结点;
合并两个叶子结点,并加入新结点到数组;
}
3.代码
//构造haffman树
#include <iostream>
using namespace std;
const int MAX = 10000;
struct Node{
int ...
1.算法描述
就是简单的线索二叉树的建立,遍历,查找等基本操作,具体什么是线索二叉树,百度一下!
2.算法说明
具体说明有四点:如下图
注:尤其要注意第4点,我在写的时候就没注意这个问题,结果遍历的时候出现了无限循环,找了半天才找到!主要是建立二叉树判断的惯性思维,故而容易出现错误!
3.代码实现
头文件
#ifndef BITHRTREE_H
#define BITHRTREE_H
enum flag{CHILD, THREAD};//枚举类型,枚举常量Child=0,Thread=1
template<class T>
struct ...
1.二叉树的基本操作
这里我有一个疑问:
在使用构造函数的时候,传参数的问题?
开始我是这么理解的------只使用指针(其实指针本身就是一个地址,相当于引用,也会改变root建立起二叉树),而2指针的引用,相当于就是对记录了指针的地址,采用了二次引用,其实是没有必要的,一次就够了。但是实际上用的时候并不是这样?根本不能建立二叉树,原因是因为开始指针指向的是一个不确定的位置?然后我又实验了,分配空间先,但是还是不行?所以不知道为什么一定要使用双重指针或指针引用?不知哪位高人能解答之,谢谢了
就是这样void creatTree(Node<T>* root);
...
1.算法描述
a.数据结构与算法(Mark Allen Weiss)3.28双端队列的实现,在队列的两端都可以进行插入和删除工作,每种操作复杂度O(1).
b.没有头结点和尾结点的队列实现
c.循环数组的队列实现
2.算法实现
a.由于有复杂度的限制,和两端插入删除,故而使用数组是不适合的,必须使用链表,我这里使用的是双向链表,在两端操作的复杂度就一样的,非常方便
b.没有头尾结点实现队列,关键就是注意空队列的判断,在空队列情况下的插入删除操作。
c.循环数组就是在尾部循环的时候操作。
3.代码实现
a.双端队列
deque.h
//双端队列(两头都可以插 ...
1.算法描述
a.实现二个栈,在一个数组里面,除非没有任何空间剩余,否则不能有溢出声明
b.实现一个没有头尾结点的栈(单链表)
c.实现带有头结点的栈(单链表)
2.双栈
对于双栈,我们还可以添加resize()方法,当空间满了重新自动分配空间(new),就是将原来的两个栈,拷贝到新建立的数组上面去
a.dsexceptions.h
#ifndef DSEXCEPTIONS_H
#define DSEXCEPTIONS_H
//栈溢出异常
class StackOverFlowException{ //public: exception
public:
...