- 博客(18)
- 资源 (16)
- 收藏
- 关注
原创 求两个等长升序序列的中位数
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】1. 算法要求一个长度为L(L≥1)的升序序列S,处在第L / 2(若为小数则去掉小数后加1)个位置的数称为S 的中位数。例如,若序列S1=(11,13,15,17,19),则S1 的中位数是15,两个序列的中位数是含它们所有元素的升序序列的中
2011-12-19 15:47:11
13956
1
原创 循环左移数组
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】1. 算法要求设将n(n>1)个整数存放到一维数组R中,试设计一个在时间和空间两方面尽可能有效的算法,将R中保有的序列循环左移P(0﹤P﹤n)个位置,即将R中的数据由(X0 X1 ……Xn-1)变换为(Xp Xp+1 ……Xn-1 X
2011-12-07 17:09:26
6974
原创 取单链表倒数第k个元素
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】1. 算法要求已知一个带有表头结点的单链表,结点结构为typedef struct lnode { elemtype data; struct lnode *next;}lnode, *linklist;假设该链表只给出了头指针l.在不
2011-12-07 11:51:19
11936
原创 排序算法之总结
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】前面几节讲了几种排序算法(包括算法思想、算法实现、算法分析),本节将要对这几种算法进行一个综合比较分析,大致有如下结果:排序算法平均时间最坏情况稳定性辅助存储直接插入排序
2011-12-05 16:05:38
1279
原创 排序算法之选择排序
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。常用的选择排序方法有简单选择排序(Simple Selection Sort)和堆排序(Heap So
2011-11-30 13:44:23
2477
原创 排序算法之交换排序
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。应用交换排序基本思想的主要排序方法有:冒泡排序(Bubble sort)和快速排序(Quick sort)。1. 冒泡排序
2011-11-29 11:34:24
11595
原创 排序算法之插入排序
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】本节主要分析插入排序算法的直接插入排序和希尔(shell)排序(又称缩小增量排序)。1. 直接插入排序 该排序是最简单的排序方法,其基本思想是:假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序
2011-11-24 13:26:22
1422
原创 排序算法之概述
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】排序是计算机程序设计中的一种重要操作。所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。其确切定义如下: 输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn。 输出:Ril,Ri2,…,Rin,使得K
2011-11-24 11:48:50
1978
原创 二叉树的线索化
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】前面说到二叉树的二叉链表表示实现,当以二叉树作为存储结构时,只能找到节点的左右孩子信息,不能直接得到结点在任一序列中的前驱和后继信息,只有在遍历过程中才能得到这种信息。我们知道,在n个结点的二叉链表栈必定存在n+1个空链域,因此,可以利用这些空链域来存放这些结点
2011-11-21 14:37:00
34715
原创 二叉树遍历非递归实现
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】遍历是二叉树各种操作的基础,上一节给出的遍历算法是递归实现的,本节给出二叉树遍历的非递归实现,非递归实现需要使用前面讲到的数据结构——栈、队列来作为辅助空间。先序遍历int preorder_traverse(bitree bt, int (*v
2011-11-16 11:52:15
7030
原创 二叉树的二叉链表表示与实现
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】 前面几节讲到的结构都是一种线性的数据结构,今天要说到另外一种数据结构——树,其中二叉树最为常用。二叉树的特点是每个结点至多只有两棵子树,且二叉树有左右字子树之分,次序不能任意颠倒。二叉树的存储结构可以用顺序存储和链式存储来存储。二叉树的顺序存储结构由一组连
2011-11-15 17:47:49
29669
原创 循环队列的实现
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】在队列中也可以使用连续的内存空间存放队列元素,附设两个指针分别指向对头和队尾,初始化两个指针为0,当有元素进队时对为指针加1,有元素出对时队尾指针加1。但这样的话会有问题,就是出队列留下的地址空间就不会被利用了,且当开始分配的空间使用完时还会不停的申请空间,浪费
2011-11-12 23:20:04
2200
原创 链式队列的实现
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】队列是一种先进先出的线性表,也是一种操作受限的线性表,只允许在表的头部删除元素和尾部添加元素。队列有链式表示和顺序表示。队列的链式表示由于在表头和表尾操作,需要两个指针分别指向对头和队尾。空的链式队列判决条件为对头指针和队尾指针是否指向同一个结点(头节点)。
2011-11-12 22:40:39
1712
原创 链栈的实现
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】链栈的操作就是链式线性表的尾部进行添加元素和删除元素,由于只在尾部进行操作,不需要专门的头节点,栈顶元素即是该链栈的头节点。(注意:栈顶元素对应头插法建表的刚进入链表的元素,栈底元素对应头插法建表最早进入链表的元素)链栈的存储结构#define
2011-11-12 21:44:14
1182
原创 顺序栈的实现
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】其实栈也是线性表,只是其为操作有限制的线性表,栈的插入和删除被限制为只能在表尾进行。栈也有两种表示方式:顺序表示和链式表示。栈的基本操作除了在栈顶进行插入、删除之外还有栈的初始化、栈顶元素等操作。顺序栈使用一组连续的内存空间存放数据,附设两个指针分别指向栈顶和栈
2011-11-12 21:03:43
861
原创 线性表链式实现
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】上一节说到线性表的顺序实现,顺序表示是使用一段连续的内存空间存储表元素,这使得存取数据元素相当快,直接使用下标即可存取元素,但这种线性表表示方式的缺点就是在插入和删除元素是要移动数据元素,移动元素多少并且是和线性表的长度相关的,当表很长时插入删除元素要移动相当大
2011-11-12 17:28:30
1907
原创 线性表顺序实现
【版权声明:转载请保留出处:blog.youkuaiyun.com/algorithm_only。邮箱:liuy0711@foxmail.com】线性表的顺序表示是指用一组连续的内存地址单元存储线性表数据。线性表的这种存储结构容易实现随机存取第i个数据元素以及求线性表的长度。顺序存储结构#define LIST_INIT_SIZE 50#define LIS
2011-11-11 23:30:27
731
原创 算法开篇
【声明:版权所有,转载请保留出处。作者邮箱:liuy0711@foxmail.com】算法广义上是指“计算机领域的对问题的思考方式以及解决步骤,是一种思路和逻辑性的体现”。还有大家都知道的一句话:算法是程序的灵魂。很多编程人员很注重使用编程语言,都没有学过算法,没有意识到算法的重要,因为一些算法被包装到一些编程序语言之中,这其中的算法往往只适用于本语言或工具而且只能解决某些问题,移植到别的
2011-11-11 22:53:47
684
线性表链式表示及实现源码
2011-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人