数据结构
文章平均质量分 63
枕霞
这个作者很懒,什么都没留下…
展开
-
二叉树利用前序遍历+中序遍历---->后序遍历(把整个树建立起来)
#include#includeusing 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 · 490 阅读 · 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 · 362 阅读 · 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 · 406 阅读 · 0 评论 -
BST的插入、删除、查找操作
#includeusing 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 · 754 阅读 · 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 · 552 阅读 · 0 评论 -
二叉树利用中序+后序----->前序
#includeusing 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 · 444 阅读 · 0 评论 -
二叉树递归版本的前序、中序、后序
#define _CRT_SECURE_NO_WARNINGS#include#includeusing namespace std;typedef struct TreeNode{ char Data; TreeNode* Left; TreeNode* Right;}*BinTree;typedef struct _BinNode{ BinTree p; b原创 2015-08-20 16:32:14 · 382 阅读 · 0 评论 -
shell排序
templatevoid 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 · 380 阅读 · 0 评论 -
冒泡排序、直接插入排序
冒泡排序templatevoid 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 · 411 阅读 · 0 评论 -
AVL的插入过程
#include#includeusing namespace std;#define ElementType inttypedef struct AVLTreeNode{ ElementType Data; AVLTreeNode* Left; AVLTreeNode* Right; int height;}*AVLTree;int GetHeight(AVLTre原创 2015-08-20 16:59:21 · 916 阅读 · 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 · 593 阅读 · 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 · 336 阅读 · 0 评论 -
二叉树的非递归前序、中序、后序遍历
#define _CRT_SECURE_NO_WARNINGS#include#include#includeusing namespace std;typedef struct TreeNode{ char Data; TreeNode* Left; TreeNode* Right;}*BinTree;typedef struct _原创 2015-08-20 16:41:47 · 332 阅读 · 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 · 700 阅读 · 0 评论