ImageVerifierCode 换一换
格式:DOCX , 页数:52 ,大小:32.59KB ,
资源ID:8620929      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8620929.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一些常见算法的java实现.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

一些常见算法的java实现.docx

1、一些常见算法的java实现package About4Algorithm;import java.util.ArrayList;/解决方案1/测试一个链表是否是循环链表java实现/当一个链表的尾节点的下一个节点和头节点一样时,此链表即为循环链表/解决方案2/例如N1-N2-N3-N4-N5-N2就是一个有环的链表,/环的开始结点是N5这里有一个比较简单的解法。/设置两个指针p1,p2。每次循环p1向前走一步,p2向前走两步。/直到p2碰到NULL指针或者两个指针相等结束循环。如果两个指针相等则说明存在环。 class ListItem ListItem prevoius; ListItem

2、next ; String data; /构造器,可传入参数对链表进行初始化; public ListItem(ListItem previous , String data , ListItem next) this.prevoius = previous; this.data = data; this.next = next; public ListItem getPrevoius() return prevoius; public void setPrevoius(ListItem prevoius) this.prevoius = prevoius; public ListItem g

3、etNext() return next; public void setNext(ListItem next) this.next = next; public String getData() return data; public void setData(String data) this.data = data; public class CircularLinkedListTest public static void main(String args) /初始化List ListItem a = new ListItem(null, a, null); ListItem b =

4、new ListItem(null, b, null); ListItem c = new ListItem(null, c, null); ListItem d = new ListItem(null, d, null); a.setPrevoius(d); a.setNext(b); b.setPrevoius(a); b.setNext(c); c.setPrevoius(b); c.setNext(d); d.setPrevoius(c); d.setNext(a); /新建存放链表的数组 ArrayList list = new ArrayList(); list.add(a); l

5、ist.add(b); list.add(c); list.add(d); /判断是否为循环链表 boolean circular = false;/ ListItem start = a; ListItem current1 = a; ListItem current2 = a; for(int i = 0 ; i list.size() ; i +) /current2.next.next中为null时,表示链表不是循环的. if(current2.next.next!= null) current1 = current1.next; current2 = current2.next.ne

6、xt; if(current1.equals(current2) circular = true; if(circular) System.out.println(是循环链表); else System.out.println(不是循环链表); package About4Algorithm;import java.util.ArrayList;/找出单链表的中间节点/这道题和解判断链表是否存在环,我用的是非常类似的方法,只不过结束循环的条件和函数返回值不一样罢了。/设置两个指针p1,p2。每次循环p1向前走一步,p2向前走两步。当p2到达链表的末尾时,p1指向的时链表的中间。 /创建一个链表

7、的类class Link private Link next; private String data; Link(Link next, String data) this.next = next; this.data = data; public Link getNext() return next; public void setNext(Link next) this.next = next; public String getData() return data; public void setData(String data) this.data = data; public cla

8、ss FindMidNodeOfLinkedList public static void main(String args) / 对链表进行初始化 Link l1 = new Link(null, a); Link l2 = new Link(null, b); Link l3 = new Link(null, c); Link l4 = new Link(null, d); Link l5 = new Link(null, e); Link l6 = new Link(null, f); l1.setNext(l2); l2.setNext(l3); l3.setNext(l4); l4.

9、setNext(l5); l5.setNext(l6); l6.setNext(null); / 将链表 保存在ArrayList中 ArrayList list = new ArrayList(); list.add(l1); list.add(l2); list.add(l3); list.add(l4); list.add(l5); list.add(l6); Link current1 = null; current1 = l1; Link current2 = l1; / 每次循环p1向前走一步,p2向前走两步。当p2到达链表的末尾时,p1指向的时链表的中间。 for (int i

10、= 0; i list.size(); i+) if (current2.getNext().getNext() != null) current1 = current1.getNext(); current2 = current2.getNext().getNext(); System.out.println(current1.getData(); package About4Algorithm;/求解约瑟环问题/15个教徒和15个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免遇难/30个人围成一个圆圈,从第一个人开始一次报数,每数到第九个人,就将他扔入大海/如此循环,直到仅余

11、15人为止/方案1/使用一个boolean数组,一开始,全部位置为true/每数到9时,就将其设为false,则此位置为非教徒的位置/如果该位置已经为false ,则设置下一个true位置为false/如果已经循环到底,则从第一个开始public class JosephRing public static void main(String args) /有一个boolean数组记录当前的30个人,扔下还的人为false,还留下的人为true boolean flag = new boolean30;/ try for(int i = 0 ; i 15) /计数器+1 countNum+; /

12、当计数器数到9时,进入 if( countNum = 9 ) /如果当前的数已经为false了,证明这个人已经被扔进了大海 /那么就找其下一个为true的人扔进大海 while(flagindex != true) countNum +; index+; /计数器清零,把当前人设为false,leftPeople-1 countNum = 0 ; flagindex = false; leftPeople-; /指针向下移动,当index和数组大小一致时,从头开始 index+; if(index = flag.length) index = 0 ; int count = 0 ; for(i

13、nt i = 0 ; i 2-3-4-5 通过反转后成为5-4-3-2-1。/最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,/然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历class LinkItem1 LinkItem1 next; String data; public LinkItem1() / TODO Auto-generated constructor stub public LinkItem1 getNext() return next; public void setNext(LinkItem1 next) this.

14、next = next; public String getData() return data; public void setData(String data) this.data = data; public class LinkedListReverse public static void reverse() /初始化链表 LinkItem1 a = new LinkItem1(); LinkItem1 b = new LinkItem1(); LinkItem1 c = new LinkItem1(); LinkItem1 d = new LinkItem1(); LinkItem

15、1 e = new LinkItem1(); LinkItem1 f = new LinkItem1(); a.setData(a); a.setNext(b); b.setData(b); b.setNext(c); c.setData(c); c.setNext(d); d.setData(d); d.setNext(e); e.setData(e); e.setNext(f); f.setData(f); f.setNext(null); /新建存放链表的数组 ArrayList list = new ArrayList(); list.add(a); list.add(b); list

16、.add(c); list.add(d); list.add(e); list.add(f); /定义链表的前驱为previous; LinkItem1 previous = a; /定义链表的当前节点为current; LinkItem1 current = previous.next; /定义链表的后继节点为next; LinkItem1 next ; for(int i = 0 ; i list.size(); i +) if(current.next != null) /当前节点的后继传给next next = current.next; /将前驱的节点传给当前的后继 current.

17、next = previous; /将 previous = current; current = next; / a.next = null;/ a = previous;/ System.out.println(previous.next.getData();/ for(int j = 0 ; j list.size() ; j+)/ System.out.println(previous.getData();/ previous = previous.next;/ public static void main(String args) reverse(); package About4

18、Algorithm;/单例模式public class Singleton private static Singleton instance = null; /私有构造函数,不允许在外部被实例化 private Singleton() /静态公有函数,只会实例化一次 public static Singleton getInstance () if(instance = null) instance = new Singleton(); return instance ; public static void main(String args) Singleton s1 = Singleto

19、n.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.println(s1=s2); System.out.println(s1); System.out.println(s2); package About4Algorithm;/java实现折半查找问题public class BinarySearch /实现二分查找函数 public static boolean binarySearch(int a, int x ) int min = 0 ; int mid = 0; int max = 0 ; max

20、= a.length - 1; while(min = max) mid = (min + max)/2; if(amid x) max = mid - 1; else return true; return false; /给出的a数列必须是有序的.如果想算法更加完美可以对a先进行排序再查找 public static void main(String args) int a = -5,-4,-2,11,13; int x = 11; boolean result = binarySearch(a, x); System.out.println(result ); package About

21、4Algorithm;/最大子序列和问题public class Test1 /联机算法复杂度求解最大自序列和问题函数 public static int maxSubSum(int a) int maxSum = 0 ; int thisSum = 0 ; for(int j = 0 ; j maxSum) maxSum = thisSum ; else if (thisSum 0 ) thisSum = 0; return maxSum; public static void main(String args) int a = -2,11,-4,13,-5,-2; int result =

22、 maxSubSum(a); System.out.println(Result = + result); package About4Algorithm;/计算最大公因数public class Test3 public static int gcb(int m , int n ) while(n != 0) int temp = m % n ; m = n ; n = temp; return m; public static void main(String args) int result = gcb(200,57); System.out.println(result); packa

23、ge About4Algorithm;import java.util.ArrayList;/对文件进行遍历class Folder private ArrayList list = new ArrayList(); /当发现是文件夹是,遍历文件夹里的所有内容 public void scan() System.out.println(遍历文件夹.); for( Folder f : list ) (Folder)f).scan(); public void add(Folder e) list.add(e); class File extends Folder public void sca

24、n() System.out.println(遍历文件.); public class Test4 public static void main(String args) Folder folder1,folder2,folder3; folder1 = new Folder(); folder2 = new Folder(); folder3 = new Folder(); File f1,f2,f3; f1 = new File(); f2 = new File(); f3 = new File(); folder1.add(f1); folder2.add(folder1); folder3.add(f2); folder3.add(f3); folder3.add(f2); folder3.add(folder2); folder3.scan(); package About4Algorithm;/判断两个数组中是否有相同的数字/方案1/给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?/这个问题首先想到的是一个O(nlogn)的算法。/就是任意挑选一个数组,遍历这个数组的所有元素,/遍历过程中,在另一个数组中对第一个数组中的每个元素进行binary search。public

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1