数据结构
文章平均质量分 58
wangjian20095356
这个作者很懒,什么都没留下…
展开
-
快速排序的非递归实现
一、快速排序简单介绍,参考http://linux.cn/article-3613-1.html快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实原创 2014-12-07 15:36:15 · 397 阅读 · 0 评论 -
二路归并排序实现
一、归并算法思想归并算法是建立在归并操作的基础上的。归并操作是指将两个或者多个以上的有序序列合并成一个新的序列,得到的新序列仍然有序。假设带排序序列大小为n,则初始状态下带排序序列有n个有序的子序列,其中每个子序列的大小为1,经过一次“两两归并”后,带排序序列将包含多个有序的大小为2的子序列。。。以此类推,直到整个序列有序。二、代码实现#include #includ原创 2014-12-07 18:46:50 · 410 阅读 · 0 评论 -
双向链表的简单实现
一、简单说说链表概念链表和数组在逻辑上讲都属于线性表,只是在物理上他们的存储方式不一样。怎么个不一样就不废话了,但是总结一条,这种存储方式的不同使得数组便于随机存取,而链表在删除和插入方面效率要比数组高。二、代码实现:(操作指针是要保持头脑清醒,时刻注意NULL,你懂得,哈哈)#include #include #include #define DATA_SIZE 10ty原创 2014-12-10 15:59:54 · 347 阅读 · 0 评论 -
二叉查找树非递归实现
一、二叉查找树概念二叉查找树也称二叉排序树、二叉搜索树,它有如下特点:1、它是一个二叉树(不一定是完全二叉树)。2、对于树上每个节点,如果存在左孩子,则左孩子的值比自己小,如果存在右孩子,则右孩子的值比自己大。3、对于每个节点,它的左子树和右子树都是二叉查找树。从以上特点可以总结出一个很重要的性质:中序遍历二叉查找树,将得到一个已排好序的序列。另外二叉查找树在查找方原创 2014-12-14 12:00:55 · 607 阅读 · 0 评论 -
由快速排序引申的两个分类问题
快速排序的关键操作在于分割,即以某个关键值为轴讲序列分割成比轴大和比轴小的两类。下面是由此引申的两个分类问题。1.已有有一组整数,如何使得数组中奇数在偶数的前面。这个问题的解法和快速排序的分割很相似,代码如下:void do_parttion(int *pdata, int size){ int i, j; i = 0; j = si原创 2014-12-11 14:23:22 · 445 阅读 · 0 评论 -
二叉树的非递归实现
二叉树的概念就不多讲,直接上代码:#include #include #define STACK_INIT_SIZE 10#define INCREASE_SIZE 10typedef struct Node{ char data; struct Node *left; struct Node *right; int lflag; int rflag;}Node,原创 2014-12-14 11:56:52 · 378 阅读 · 0 评论 -
堆排序实现
一、堆排序简单介绍1、什么是堆:堆是一个完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。2、从一个节点开始筛选:筛选的目的是使得以当前开始结点为根的子树也是一个堆。3、堆排序的基本过程:1、从最后一个非叶子节点(当前待排序节点数/2)开始筛选,筛选到第一个节点结束,此时第一个节点就是当前的最值。2、将当前最值与最后一个节点原创 2014-12-07 17:10:19 · 415 阅读 · 0 评论