自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 基于线性探测法的散列表(来自:算法)

下列代码主要实现了调整数组的大小来保证散列表的使用率永远都不会超过1/2resize(),插入键put(),查找键get(),查找键在线性表中的位置getplace(),删除键delete(),遍历线性表keys()等方法package cn.edu.zzuli.api;import edu.princeton.cs.algs4.Queue;import edu.princeton.c...

2018-09-15 16:23:09 1089

原创 基于拉链法的散列表(来自:算法)

下列代码主要实现了基于拉链法的散列表的添加元素put(),查找元素get(),删除元素delete(),遍历元素keys()等方法,我们需要首先根据元素值调用hash()方法找到该元素所对应的数组,而每一个数组都是一个链表,遍历链表,若元素不存在,则可以实现元素的添加,若存在,则可以实现元素的更新,删除等操作.对于每一条链表的操作package cn.edu.zzuli.api;im...

2018-09-15 15:37:04 1084

原创 红黑树的元素添加和查找(来自:算法)

下面的代码实现了对红黑树的元素的添加和查找,想要了解和掌握,就要先理解2-3树的思想.红黑二叉查找树的思想是用将3-结点表示为由一条左斜的红色链接(两个2-结点其中之一是另一个左子结点)相连的两个2-结点,而且,我们无需修改就可以直接使用标准二叉查找树的表示方法package cn.edu.zzuli.api;import cn.edu.zzuli.api.BST;import edu...

2018-09-11 17:32:12 634

原创 二叉查找树Java版(来自:算法)

二叉查找树定义(来自百度百科): 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的节点。下面代码中主要实现了求以某结点为根的子树中的结点个数,二叉查找树的查找和排序方法,二叉查找树中...

2018-09-08 18:18:57 1683

原创 二叉搜索树的插入,查找,删除和遍历(c/c++)

二叉搜索树的建立二叉搜索树的建立即为向二叉树中插入元素.开始插入第一个元素时,二叉搜索树是空树,直接申请一个内存空间将元素放入树中.再插入元素时,从根节点开始比较,若待插入的元素值较大,则树中节点向右走,若较小,则树中节点向左走,直到找到一个空位置,将节点插入.二叉搜索树中查找元素在二叉搜索树中查找元素时,先将元素与根节点值比较,若元素的值较小,则根节点向左走(root = root-...

2018-08-19 14:47:24 2220 1

原创 堆排序(c/c++)

不需要额外空间可对数组排序,把维持在待排序的数组内.在建堆时,采用自顶向下堆化的方法.堆中的元素向下移动,找到该元素的左孩子,如果左孩子存在的话,就比较左孩子与右孩子的大小,找出其中较大的孩子,与父元素比较,如果父元素较大,则循环停止,否则两元素交换.如此即可完成自顶向下的堆化.在堆排序时,先用一个for循环调用建堆函数来建堆,然后用while循环来将数组中最大的元素找到,再将其放到最后一个位置上...

2018-08-17 15:34:34 176

原创 归并排序的链表实现

利用归并法可以对链表进行排序,而且不需要占用额外空间.对于一个无序链表,先利用循环找到链表的中值,再利用递归先将一个链表分成两个链表,逐步递归,递归停止的条件是链表中只有一个元素或是没有元素的情况,然后完成链表的有序.#include <cstdio>#include <cstdlib>#include <algorithm>#include &lt...

2018-08-16 17:30:15 2128

原创 归并算法的改进

递归对数组b排序,将排序后的结果放入a中,下次递归排序时对数组a排序,将结果放入b中,以此方式可以完成对数组的排序.且没有出现在子数组合并后数组之间的复制.#include <cstdio>#include <cstdlib>#include <algorithm>#include <stack>#include <queue&g...

2018-08-16 11:22:41 529

原创 归并排序(c/c++)

归并排序的优点是稳定,时间复杂度与NlgN成正比,缺点是所占空间与N成正比.自顶向下的归并排序对一个数组进行归并排序,可将一个数组分成两个,先使得子数组有序,然后再将两个有序的子数组合成一个有序的子数组,即将数组的排序转化为对两个有序数组的合并.对于一个无序的数组来说,先递归操作是最小的子数组有序,然后再合并子数组使其成为较大的数组,直到整个数组有序.在将两个子数组合并的时候,需要借助另一...

2018-08-16 10:34:55 461

原创 快速排序改进(来自:算法:C语言实现)

利用三者取中法改进快速排序实现取数组中第一个,中间和最后一个元素的中间元素作为划分元素(否则将这些元素排除在划分过程之外).大小为11或更小的数组在划分过程中被忽略,然后使用插入排序来完成排序.#include <cstdio>#include <cstdlib>#include <algorithm>#include <stack>...

2018-08-15 17:49:54 839

原创 快速排序(来自:算法:C语言实现)

      快速排序算法是一种分治排序算法.它将数组划分为两个部分,然后分别对两个部分进行排序.我们将看到,划分的准确位置取决于输入数组中元素的初始位置.关键在于划分过程,它重排数组,使得以下三个条件成立:(i)对于某个i,a[i]在最终位置上 (ii)a[left],...,a[i-1]中的元素都比a[i]小 (iii)a[i+1],...a[right]中的元素都比a[i]大.我们通过划分来完...

2018-08-15 15:52:59 13282

原创 基本排序方法-希尔排序(c/c++)

       希尔排序法是插入排序的扩展,它通过允许非相邻的元素进行交换来提高执行效率.该算法的思想是将文件重新排列,使文件具有这样的性质,每第h个元素(从任何地方开始)产生一个排好序的文件.这样的文件称为h-排序的.换句话说,h-排序的文件是h个独立的已排好序的文件,相互交叉在一起.对h值较大的h-排序文件,可以通过移动相距较远的元素,比较容易地使h值较小时进行h-排序.通过对直到1的h值的序列...

2018-08-14 17:56:42 390

原创 基本排序方法-插入排序及改进(来自:算法:C语言实现)

和选择排序一样,排序过程中当前索引左边的元素都是排好序的,不过它们不是处于最终的位置上,因为它们还需要进行移动为更小的数据腾出空间.不过当索引移到最右边时,数组就完全排好序了.//插入排序void Insertion(int a[], int l, int r){ int i, j; //外层循环保证i之前的元素有序,元素位置暂时稳定 for(i = l+1; i...

2018-08-14 10:48:19 262

原创 基本排序方法-选择排序和冒泡排序(来自:算法:C语言实现)

选择排序最简单的一种排序算法的工作过程如下.首先,选出数组中最小的元素,将它与数组中第一个元素进行交换.然后找出次小的元素,并将它与数组中第二个元素交换.按照这个方法一直进行下去,直到整个数组排完序.这种方法叫做选择排序,因为它是通过不断筛选出剩下元素中的最小元素来实现的.冒泡排序对于l~r-1内的i值,内部循环(j)通过从左向右遍历元素,对连续的元素进行比较-交换操作,实现将a[i]...

2018-08-14 10:31:47 420

原创 树的创建和遍历

递归树前序遍历前序遍历非递归层次遍历节点数层次数先序建树#include <cstdio>#include <cstdlib>#include <algorithm>#include <stack>#include <queue>#include <malloc.h>using names...

2018-08-13 16:48:26 218

原创 斐波拉契数 动态规划(来自:算法:C语言实现)

斐波那契数(递归实现)int F(int i){ if(i < 1) return 0; if(i == 1) return 1; return F(i-1)+F(i-2);}我们可以按从最小开始的顺序计算计算所有函数值来求任何类似函数的值在每一步使用先前已经计算出来的值来计算当前值.我们称这项技术为自底向上的动态规划.这...

2018-08-13 10:13:32 1974

原创 分治法实例(来自:算法:C语言实现)

使用分治法求最大值这个函数将数组a[l]...a[r]分成a[l],...,a[m]和a[m+1],...a[r]两部分,分别求出每一部分的最大元素(递归地),并返回较大的那一个作为整个数组的最大元素.如果数组大小是偶数,则两部分大小相等;如果是奇数,第一部分比第二部分的大小大1.#include <cstdio>#include <cstdlib>#incl...

2018-08-12 17:05:22 3428

原创 数学递归方程与简单递归程序之间的关系(来自:算法:C语言实现)

递归算法就是通过解决同一问题的一个或多个更小的实例来最终解决一个大问题的算法.为了在C语言中实现递归算法,常常使用递归函数,也就是说能调用自身的函数.C语言中的递归函数相当于数学函数的递归定义.我们研究递归就从考察直接求值数学函数的程序开始,并从它的基本机制扩展到一种通用的程序设计范型.                                                        ...

2018-08-11 12:45:40 1640

原创 链表中的头和尾节点/指针的常规用法(来自:算法:C语言实现)

下面是基本链表处理操作的5种常规用法的实现.这类代码用于内嵌链表处理代码的简单应用中循环,永远非空头插入 head->next = head;在x节点后插入t节点 t->next = x->next, x->next = t;删除x后的节点 t = x->next, x->next = t->next, free(t);遍历循环 t = h...

2018-08-10 12:33:56 3684

原创 循环链表范例(约瑟夫问题)(来自:算法:C语言实现)

我们构造一个循环链表来表示排成圆圈的人.每人的链接指向圆圈内在他左边的人.整数i表示圆圈内的第i个人.在为1号构造一个节点的循环链表之后,再把2~N号插入到1号节点之后,得到一个1~N的环,并使x指向N.然后从1号开始,跳过M-1个节点把第M-1个节点的链接指向M+1号节点继续这个过程,直到剩下一个节点为止.#include <cstdio>#include <cstdl...

2018-08-10 10:45:28 323

原创 埃拉托色尼筛法(来自:算法:C语言实现)

这个程序的功能是: 如果自然数i是素数,则设a[i]为1,否则设为0.首先把数组中的所有元素设为1,否则设为0.首先把数组中的所有元素设为1,已表明没有任何数以被证明是非素数.然后,把数组中所对应索引处已证明是非素数(已知素数的倍数)的元素设为0.如果所有更小素数的倍数都已设为0,a[i]仍为1,则可知它是素数.因为程序中所用的数组由最简单的元素类型(0-1值)组成的数组,所以直接使用由位组成...

2018-08-09 10:58:45 3990 2

原创 二叉树的定义和性质

1.二叉树的定义二叉树(Binary Tree)是另一种树形结构它的特点是每个结点至多有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任一颠倒.数据结构的递归定义表明二叉树或为空,或是由一个根结点加上两棵分别称为左子树和右子树的,互不相交的二叉树组成.由于这两棵子树也是二叉树,则由二叉树的定义,它们也可以是空树.由此,二叉树可以有5种基本形态: (a)...

2018-08-06 09:40:26 474

原创 树的定义和基本术语

数据结构时一类重要的非线性数据结构.其中以树和二叉树最为常用,直观来看,树是以分支关系定义的层次结构.树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树来形象表示.树在计算机领域中也得到广泛应用,如在编译程序中,可用树来表示源程序的语法结构.又如在数据库系统中,树形结构也是信息的重要组织形式之一. 树的定义树:是n(n>=0)个结点的有限集,它或为空树(n=0...

2018-08-02 10:00:44 239

原创 循环队列---队列的顺序存储结构

严蔚敏 数据结构(C语言) P64///循环队列---队列的顺序存储结构#include <cstdio>#include <cstdlib>#include <algorithm>#include <malloc.h>using namespace std;#define OK 1#define ERROR -1#define...

2018-08-01 11:52:06 249

原创 单链队列---队列的链式存储结构

严蔚敏 数据结构(C语言) P60///单链队列---队列的链式存储结构#include <cstdio>#include <cstdlib>#include <algorithm>#include <malloc.h>using namespace std;#define OK 1#define ERROR -1#define...

2018-08-01 10:29:57 555

原创 栈的链式表示

栈的操作是线性表操作的特例///栈的链式表示#include <cstdio>#include <cstdlib>#include <algorithm>#include <malloc.h>using namespace std;#define OK 1#define ERROR -1#define TRUE 1#defin...

2018-07-31 14:37:41 461

原创 栈的顺序存储表示

顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。通常的习惯做法以top=0表示空栈。一般来说,在初始化设空栈时不应限定栈的最大容量。一个较合理的做法:先为栈分配一个基本容量,然后在应用过程中,当栈的空间不足在进行扩展。空栈时的表示为S.top == S.base。///栈的顺序存储表示#include &...

2018-07-31 10:58:18 3575 1

原创 一元多项式的表示及相加

用单链表存储一元多项式,并实现两个多项式的相加运算///用单链表存储一元多项式,并实现两个多项式的相加运算#include <cstdio>#include <cstdlib>#include <algorithm>#include <malloc.h>using namespace std;#define OK 1#define...

2018-07-30 17:27:52 449

原创 线性表的链式表示及实现

//线性表的链式表示及实现#include <cstdio>#include <cstdlib>#include <algorithm>#include <malloc.h>using namespace std;#define OK 1#define ERROR -1#define TRUE 1#define FALSE 0#...

2018-07-30 16:11:19 2382

原创 线性表的合并 算法2.2

算法2.2已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列例如LA=(3, 5, 8, 11), LB=(2, 6, 8, 9, 11, 15, 20),则LC=(2, 3, 5, 6, 8, 8, 9, 11, 11, 15, 20)#include <cstdio>#include ...

2018-07-30 12:51:28 3071

原创 线性表的顺序表示及实现(c/c++)

//线性表的顺序表示及实现#include <cstdio>#include <cstdlib>#include <algorithm>#include <malloc.h>using namespace std;//------线性表的动态分配顺序存储结构------#define LIST_INIT_SIZE 100//线性表存储...

2018-06-18 18:15:35 545

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除