
数据结构
文章平均质量分 63
枕霞
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二叉树利用前序遍历+中序遍历---->后序遍历(把整个树建立起来)
#include #include using namespace std; typedef struct TreeNode { char Data; TreeNode* Left; TreeNode* Right; }*BinTree; BinTree InPrePost(char* inorder, char * preorder, int length) { BinTree BT原创 2015-08-20 16:54:58 · 533 阅读 · 0 评论 -
KMP的实现
#include using namespace std; int* buildNext(char * p) { size_t m = strlen(p), j = 0; int *Next = new int[m]; int t = Next[0] = -1;//模式串指针 while (j<m - 1) { if (t<0 || p[j] == p[t]) { Next[原创 2015-09-14 16:37:10 · 400 阅读 · 0 评论 -
堆排序
堆是用数组来存储的,可以被看成一个近似的完全二叉树,树上的每一个结点对应数组中的一个元素。规定树的根节点是Array[1],即从下标1开始。 这样给定一个结点i,我们可以很容易计算它的父结点、左孩子和右孩子的下标:PARENT(i)=[i/2];LEFTCHILD(i)=2i;RIGHT(i)=2i+1; 最大堆:除了根以外的所有结点i都要满足:Array[PARENT(i)]>=Array[原创 2015-08-22 15:08:28 · 450 阅读 · 0 评论 -
BST的插入、删除、查找操作
#include using namespace std; typedef struct TreeNode { char Data; TreeNode* Left; TreeNode* Right; }*BinTree; BinTree Insert(BinTree &T, char e)//要传T的引用 { if (T==NULL) { T = (BinTree)malloc原创 2015-08-20 17:02:31 · 814 阅读 · 0 评论 -
快速排序
快速排序是采用分治思想的。下面是分治过程的三个步骤。 分解:数组A[p…r]被划分成两个(可能空)子数组A[p…q-1]和A[q+1…r],使得A[p…q-1]中的每个元素都小于等于A[q],A[q+1…r]中每个元素都大于A[q],而下标q也在这个划分过程中进行计算。 解决:通过递归调用快速排序,对子数组A[p…q-1]和A[q+1…r]排序。 合并:因为两个子数组是就地排序的,将它们合并原创 2015-08-21 10:59:22 · 610 阅读 · 0 评论 -
二叉树利用中序+后序----->前序
#include using namespace std; typedef struct TreeNode { char Data; TreeNode* Left; TreeNode* Right; }*BinTree; BinTree InPostpre(char* inorder, char * postorder, int length) { BinTree BT; if (原创 2015-08-20 16:57:13 · 485 阅读 · 0 评论 -
二叉树递归版本的前序、中序、后序
#define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; typedef struct TreeNode { char Data; TreeNode* Left; TreeNode* Right; }*BinTree; typedef struct _BinNode { BinTree p; b原创 2015-08-20 16:32:14 · 420 阅读 · 0 评论 -
shell排序
template void Shell_Sort(T arr[], int N) { for (int D = N / 2; D > 0; D /= 2) { for(int i = D; i < N; i++) { int j = i; T tmp = arr[i]; while ( j >= D&&tmp < arr[j - D]) { arr[j]原创 2015-08-20 22:22:24 · 426 阅读 · 0 评论 -
冒泡排序、直接插入排序
冒泡排序 template void Bubble_Sort(T arrary[], int N) { for (int i = N-1; i >=0; i--) { for (int j =0; j < i; j++) { if (arrary[j] > arrary[j + 1]) { swap(arrary[j], arrary[j+1]); }原创 2015-08-20 21:49:12 · 462 阅读 · 0 评论 -
AVL的插入过程
#include #include using namespace std; #define ElementType int typedef struct AVLTreeNode { ElementType Data; AVLTreeNode* Left; AVLTreeNode* Right; int height; }*AVLTree; int GetHeight(AVLTre原创 2015-08-20 16:59:21 · 1121 阅读 · 0 评论 -
Hash Table
Direct-address tablesDirect addressing is a simple technique that works well when the universe ⋃\bigcup of keys is reasonably small. Suppose that an application needs a dynamic set in which each elemen原创 2015-09-24 17:16:14 · 635 阅读 · 0 评论 -
二叉树的层次遍历
void LevelOrderTraversal(BinTree BT) { if (!BT) return; queue Q; Q.push(BT); BinTree tmp=BT; while (!Q.empty()) { tmp = Q.front(); Q.pop(); printf("%c", tmp->Data); if原创 2015-08-20 16:49:59 · 375 阅读 · 0 评论 -
二叉树的非递归前序、中序、后序遍历
#define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; typedef struct TreeNode { char Data; TreeNode* Left; TreeNode* Right; }*BinTree; typedef struct _原创 2015-08-20 16:41:47 · 366 阅读 · 0 评论 -
Counting sort
Counting sort assumes that each of the n input elements is an integer in the range 0 to k , for some integer k. When k=OO(n), the sort runs in Θ\Theta(n) time. The basic idea of counting sort is to de原创 2015-09-23 20:09:58 · 766 阅读 · 0 评论