数据结构和算法
Legendary_life
这个作者很懒,什么都没留下…
展开
-
排序算法(一)
冒泡排序基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。冒泡排序的示例:算法实现void print(int *arr, int size){ int i; for( i = 0; i < size原创 2015-08-30 15:28:08 · 461 阅读 · 0 评论 -
排序算法(三)
堆排序堆给人的感觉是一个二叉树,但是其本质是一种数组对象,因为对堆进行操作的时候将堆视为一颗完全二叉树,树种每个节点与数组中的存放该节点值的那个元素对应。所以堆又称为二叉堆,堆与完全二叉树的对应关系如下图所示:把堆看成一个棵树,有如下的特性:(1)含有n个元素的堆的高度是lgn。(2)当用数组表示存储了n个元素的堆时,叶子节点的下标是n/2+1,n/2+原创 2015-08-31 20:33:01 · 385 阅读 · 0 评论 -
排序算法(二)
归并排序基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序示例:算法实现void merge(int *arr,int *store,int start,int mid,int end){ int i,j,k; for(i原创 2015-08-30 16:10:20 · 392 阅读 · 0 评论 -
二叉树的四种遍历方式(非递归和递归)
二叉树的四种遍历方式二叉树的创建--先序非递归创建#include#include#include#includeconst int OK = 1;const int ERROR = 0;using namespace std;typedef struct TreeNode{ int data; struct TreeNode *lchild,*rchild;}Tr原创 2015-09-11 10:45:08 · 479 阅读 · 0 评论 -
二叉树的节点个数和深度(非递归)
二叉树的节点个数代码实现int count_tree(TreeNode *bt){ int count = 0; if(NULL == bt){ //cout<<"tree is empty\n"; return 0; } queue que; que.push(bt); while(!que.empty()){ bt = que.front(); que.p原创 2015-09-11 10:50:19 · 1342 阅读 · 1 评论 -
二叉树的镜像(非递归)
二叉树的镜像代码实现int tree_mirror(TreeNode *bt){ if(NULL == bt){ cout<<"tree is empty\n"; } TreeNode *temp; stack st; while(1){ temp = bt->lchild; bt->lchild = bt->rchild; bt->rchild = tem原创 2015-09-11 11:02:46 · 439 阅读 · 0 评论 -
哈希表
哈希表哈希表是一种高效的数据结构。它的最大优点就是把数据存储和查找和所消耗的时间大大减少,几乎可以看成是O(1),而代价是消耗较多的内存。哈希表的基本原理哈希表的基本原理是使用一个下标范围比较大的数组A来存储元素,设计一个函数h,对于要存储的线性表的每个元素node,取一个关键字key,算出一个函数值h(key),把h(key)作为数组下标,用A[h(key)]来存原创 2015-09-22 13:38:25 · 424 阅读 · 0 评论 -
二叉排序树的相关操作
二叉排序树定义:1)若它的左子树非空,则左子树的所有节点都小于它的根节点;2)若它的右子树非空,则右子树的所有节点都小于它的根节点;3)它的左右字数也分别为二叉排序树。二叉排序树的创建和插入节点代码实现int BST_Insert(TreeNode **root, int data){ if(NULL == *root){ (*root) = (Tree原创 2015-09-21 23:46:38 · 505 阅读 · 0 评论