
数据结构算法
chenjin_zhong
工程师
展开
-
排序
查找是计算机的一项重要的操作,为了便于查找,通常希望计算机中的关键码是有序的,如有序表的折半查找,效率非常高。排序与查找一样,是一项重要的数据功能。下面了解数据结构中排序的基本概念:(1)排序码排序码又称之为关键码,如果数据结构中的关键码互不相同,此关键码称为主关键码!若关键码是主关键码,那么得到排序的结果是唯一的。(2)排序算法的稳定性稳定性可理解为两个相同的关键码,排序后的次序应该与排序前的次序是一致的,则称该算法是稳定的,否则不稳定的。(3)内排序与外排序所谓内排序是把待排序序列完全放在内存中进行排序原创 2010-11-29 21:07:00 · 444 阅读 · 0 评论 -
图的存储方式的JAVA实现
1.概述在日常生活中,对象与对象之间的关系可以用示意图来表示。图在各个领域的应用广泛,在计算机的应用领域如开关理论,逻辑设计,人工智能,形式语言,操作系统以及编译程序及信息检索内,图都起着重要的作用。下面看一下图的几个概念:有向图:有向图是连线带有箭头的,具有方向性。在有向图中,属于边E的集合,未必有属于E。无向图:无向图是不带有箭头的,无方向性。在无向图中,(Vi,Vj)属于边E的集合,必须有属于边E.、邻结点:在无向图中,(Vi,Vj)属于E,则称Vi与Vj为端点,并称它们互为邻结点。在有向图中,属于E原创 2010-12-03 16:30:00 · 3269 阅读 · 0 评论 -
快速排序的JAVA实现
<br />快速排序:<br />快速排序也属于交换排序,它是对冒泡排序的改进。它的基本思想:<br />(1)从当前序列中选择一个元素作为分界元素,称为支点。定义两个指针i,j,让j指针从后往前找,找到第一个比支点小的元素和支点交换。让i指针从前往后找,找到第一个比支点大的元素与支点交换。这样,最终找到支点的位置k.<br />(2)以支点的位置为中心,把序列分为左右两个部分,分别对左右两个部分进行上述过程。直到子序列的长度为1,从而整个序列有序。<br /> <br />快速排序算法的JAVA实现:<b原创 2010-11-30 21:25:00 · 1316 阅读 · 0 评论 -
双向循环链表的实现
<br />对于单链表来说,每个结点都有一个引用域,即next域,用来指向下一个结点,即该结点的后继结点,因此链表中的最后一个节点的引用域必定为空,单链表的这种存储方式决定了它的访问方式,只能从单链表的表头进行遍历。而双向循环链表是由双向链表和循环链表组合而成的,双向链中的数据结构中有三个域,前驱指针域,数据域,后继指针域。而循环链表的尾指针指向头指针。双向循环链表具有以下特点:<br />(1) 判空条件:head.next==head为空。<br />(2)双向循环链表的head指针的prior指向最后原创 2010-11-28 20:55:00 · 1722 阅读 · 0 评论 -
单链表的链式存储和实现
<br />由于顺序表的存储特点是物理上的相邻来实现逻辑上的相邻,它要求用连续的存储单元来存储元素。因此,对于顺序表来说,插入与删除就显得很不方便,需要移动元素,效率较低。而链式存储的方式,是通过“链”来建立数据之间的逻辑关系,因此,对元素的插入与删除非常的方便。本文主要介绍一下单链表的实现。<br />单链表包含一个表头指针head,它的next域用于指向单链表中的第一个节点。单链表中节点的数据结构可以定义为(数据域,指针域)。<br />单链表的实现包含两个部分,第一部分是单链表节点类的实现,第二部分是原创 2010-11-28 20:15:00 · 1262 阅读 · 0 评论 -
堆排序的JAVA实现
堆排序堆排序是另一种选择排序方法,它是树型选择排序的改进,它使用的辅助空间较少,仅需要一个元素用于空间交换。堆:根结点的关键码值或者大于左右子树或者都小于左右子树,而且左右子树也是堆。如果每个结点的值都大于左右子树关键码值,称之为大顶堆。每个结点的值都小于左右子树的关键码值,称之为小顶堆。首先,堆是一个完全二叉树。堆排序包含两个过程:(1)初建堆(2)调整堆调整堆:对于第二个过程,描述如下,第一次,取出堆顶元素与R[n]进行交换,然后从根结点开始调整堆,根结点与左右孩子中较大者交换,这样,左右子树的堆会被破原创 2010-11-30 16:57:00 · 9815 阅读 · 3 评论 -
归并排序的JAVA实现
<br />归并排序<br />归并排序是另一类不同的排序方法,所谓归并,就是把两个或者两个以上的有序表合并成一个新的有序表的过程。<br />归并排序的基本思想:<br />将一个含有n个序列的有序表看成是n个长度为1的有序表,然后两两归并,得到[n/2]个长度为2的有序表,然后再两两归并,直到得到一个长度为n的有序表为止。<br /> <br />下面是归并排序的一个简单的例子:<br />初始值 【49】 【38】 【65】 【97】 【76】 【13】 【27】 <br /><br />看成由长度为原创 2010-11-30 15:48:00 · 8775 阅读 · 3 评论 -
几种简单排序算法JAVA实现2
1.Shell 排序当n很大时,直接插入排序的效率很低,Shell排序是对直接插入排序的改进,又称之为缩小增量排序。基本思想:先选取一个小于n个整数di,把n个记录分为di个组,从第一个记录开始,间隔di个为同一组,在各个组内实现直接插入排序。一趟之后,间隔di的记录有序列,然后逐渐缩小间隔di,直到di=1.使得间隔为1的记录有序。这样,整个序列也就有序了。当间隔为1时,为直接插入排序。下面给出Shell排序的例子:初始序列: 39 80 76 41 13 29 50 78 30 11 100 7 41原创 2010-11-30 10:51:00 · 565 阅读 · 0 评论 -
几种简单排序算法JAVA实现1
1.直接插入排序算法思想:直接插入排序把序列分为有序区与无序区,刚开始时,只有第一个元素处于有序区,后面的元素都位于无序区。然后对于第i+1个元素,依次与前面的i个元素相比较,如果小于第i个元素,则把第i个元素后移,再与第i-1的元素比较,如果小于,再后移...如果大于第i个元素,就把此元素插入到第i+1的位置。下面是直接插入排序的实例: i=1 [46] 58 15 45 90 18 10 62 ↓ i=2 [46 58] 15 45 90 18 10 62 ┌——┘ ↓ i=原创 2010-11-29 23:11:00 · 422 阅读 · 0 评论 -
图的遍历
<br />图的遍历是指从图中的任一顶点出发,对图中的所有顶点访问一次且访问一次。图的搜索分为深度优先搜索和广度优先搜索。<br />1.图的深度优先搜索算法如下:<br />(1)从图中选取一顶点v,标记顶点v并访问该顶点。<br />(2)选取顶点v的一个邻结顶点w进行访问,从w开始深度优先搜索。<br />(3)若从w出发能够访问所有的顶点,则返回到顶点v.<br />(4)若仍有邻结于v且没有被访问的的顶点,则从该顶点出发搜索其它的路径。否则由顶点v出发的一次搜索过程结束。<br />从图的深度优先原创 2010-12-05 15:05:00 · 772 阅读 · 0 评论