一些常见算法的java实现Word格式文档下载.docx
- 文档编号:21757129
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:52
- 大小:32.59KB
一些常见算法的java实现Word格式文档下载.docx
《一些常见算法的java实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《一些常见算法的java实现Word格式文档下载.docx(52页珍藏版)》请在冰豆网上搜索。
returndata;
publicvoidsetData(Stringdata){
}
publicclassCircularLinkedListTest{
publicstaticvoidmain(String[]args){
//初始化List
ListItema=newListItem(null,"
a"
null);
ListItemb=newListItem(null,"
b"
ListItemc=newListItem(null,"
c"
ListItemd=newListItem(null,"
d"
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<
ListItem>
list=newArrayList<
();
list.add(a);
list.add(b);
list.add(c);
list.add(d);
//判断是否为循环链表
booleancircular=false;
//ListItemstart=a;
ListItemcurrent1=a;
ListItemcurrent2=a;
for(inti=0;
i<
list.size();
i++){
//current2.next.next中为null时,表示链表不是循环的.
if(current2.next.next!
=null){
current1=current1.next;
current2=current2.next.next;
if(current1.equals(current2)){
circular=true;
}
}
}
if(circular){
System.out.println("
是循环链表"
);
}
else{
不是循环链表"
//找出单链表的中间节点
//这道题和解判断链表是否存在环,我用的是非常类似的方法,只不过结束循环的条件和函数返回值不一样罢了。
当p2到达链表的末尾时,p1指向的时链表的中间。
//创建一个链表的类
classLink{
privateLinknext;
privateStringdata;
Link(Linknext,Stringdata){
publicLinkgetNext(){
publicvoidsetNext(Linknext){
publicclassFindMidNodeOfLinkedList{
publicstaticvoidmain(String[]args){
//对链表进行初始化
Linkl1=newLink(null,"
Linkl2=newLink(null,"
Linkl3=newLink(null,"
Linkl4=newLink(null,"
Linkl5=newLink(null,"
e"
Linkl6=newLink(null,"
f"
l1.setNext(l2);
l2.setNext(l3);
l3.setNext(l4);
l4.setNext(l5);
l5.setNext(l6);
l6.setNext(null);
//将链表保存在ArrayList中
Link>
list.add(l1);
list.add(l2);
list.add(l3);
list.add(l4);
list.add(l5);
list.add(l6);
Linkcurrent1=null;
current1=l1;
Linkcurrent2=l1;
//每次循环p1向前走一步,p2向前走两步。
for(inti=0;
list.size();
i++){
if(current2.getNext().getNext()!
=null){
current1=current1.getNext();
current2=current2.getNext().getNext();
System.out.println(current1.getData());
//求解约瑟环问题
//15个教徒和15个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免遇难
//30个人围成一个圆圈,从第一个人开始一次报数,每数到第九个人,就将他扔入大海
//如此循环,直到仅余15人为止
//方案1
//使用一个boolean数组,一开始,全部位置为true
//每数到9时,就将其设为false,则此位置为非教徒的位置
//如果该位置已经为false,则设置下一个true位置为false
//如果已经循环到底,则从第一个开始
publicclassJosephRing{
//有一个boolean数组记录当前的30个人,扔下还的人为false,还留下的人为true
boolean[]flag=newboolean[30];
//try{
for(inti=0;
flag.length;
i++){
flag[i]=true;
}
//}catch(ArrayIndexOutOfBoundsExceptione){
////System.out.println("
异常!
"
//e.printStackTrace();
//e.getStackTrace();
//}
//记录当前还剩下的人
intleftPeople=flag.length;
//记录每数到9的时候,这个人就该被扔下海
intcountNum=0;
//记录当前指向的人
intindex=0;
while(leftPeople>
15){
//计数器+1
countNum++;
//当计数器数到9时,进入
if(countNum==9){
//如果当前的数已经为false了,证明这个人已经被扔进了大海
//那么就找其下一个为true的人扔进大海
while(flag[index]!
=true){
countNum++;
index++;
}
//计数器清零,把当前人设为false,leftPeople-1
countNum=0;
flag[index]=false;
leftPeople--;
//指针向下移动,当index和数组大小一致时,从头开始
index++;
if(index==flag.length){
index=0;
intcount=0;
i++){
count++;
System.out.print(flag[i]+"
"
if(count%5==0){
System.out.println();
//单链表反转问题
//单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。
//比如一个链表是这样的:
1->
2->
3->
4->
5通过反转后成为5->
1。
//最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,
//然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历
classLinkItem1{
LinkItem1next;
publicLinkItem1(){
//TODOAuto-generatedconstructorstub
publicLinkItem1getNext(){
publicvoidsetNext(LinkItem1next){
publicclassLinkedListReverse{
publicstaticvoidreverse(){
//初始化链表
LinkItem1a=newLinkItem1();
LinkItem1b=newLinkItem1();
LinkItem1c=newLinkItem1();
LinkItem1d=newLinkItem1();
LinkItem1e=newLinkItem1();
LinkItem1f=newLinkItem1();
a.setData("
b.setData("
c.setData("
d.setData("
d.setNext(e);
e.setData("
e.setNext(f);
f.setData("
f.setNext(null);
LinkItem1>
list.add(e);
list.add(f);
//定义链表的前驱为previous;
LinkItem1previous=a;
//定义链表的当前节点为current;
LinkItem1current=previous.next;
//定义链表的后继节点为next;
LinkItem1next;
if(current.next!
//当前节点的后继传给next
next=current.next;
//将前驱的节点传给当前的后继
current.next=previous;
//将
previous=current;
current=next;
//a.next=null;
//a=previous;
//System.out.println(previous.next.getData());
//for(intj=0;
j<
j++){
//System.out.println(previous.getData());
//previous=previous.next;
publicstaticvoidmain(String[]args){
reverse();
//单例模式
publicclassSingleton{
privatestaticSingletoninstance=null;
//私有构造函数,不允许在外部被实例化
privateSingleton(){
//静态公有函数,只会实例化一次
publicstaticSingletongetInstance(){
if(instance==null){
instance=newSingleton();
returninstance;
Singletons1=Singleton.getInstance();
Singletons2=Singleton.getInstance();
System.out.println(s1==s2);
System.out.println(s1);
System.out.println(s2);
//java实现折半查找问题
publicclassBinarySearch{
//实现二分查找函数
publicstaticbooleanbinarySearch(int[]a,intx){
intmin=0;
intmid=0;
intmax=0;
max=a.length-1;
while(min<
=max){
mid=(min+max)/2;
if(a[mid]<
x){
min=mid+1;
elseif(a[mid]>
max=mid-1;
else{
returntrue;
returnfalse;
//给出的a数列必须是有序的..如果想算法更加完美可以对a先进行排序再查找
int[]a={-5,-4,-2,11,13};
intx=11;
booleanresult=binarySearch(a,x);
System.out.println(result);
//最大子序列和问题
publicclassTest1{
//联机算法复杂度求解最大自序列和问题函数
publicstaticintmaxSubSum(int[]a){
intmaxSum=0;
intthisSum=0;
for(intj=0;
a.length;
j++){
thisSum+=a[j];
if(thisSum>
maxSum){
maxSum=thisSum;
}elseif(thisSum<
0){
thisSum=0;
returnmaxSum;
int[]a={-2,11,-4,13,-5,-2};
intresult=maxSubSum(a);
System.out.println("
Result="
+result);
//计算最大公因数
publicclassTest3{
publicstaticintgcb(intm,intn){
while(n!
=0){
inttemp=m%n;
m=n;
n=temp;
returnm;
intresult=gcb(200,57);
System.out.println(result);
//对文件进行遍历
classFolder{
privateArrayList<
Folder>
//当发现是文件夹是,遍历文件夹里的所有内容
publicvoidscan(){
遍历文件夹..."
for(Folderf:
list){
((Folder)f).scan();
publicvoidadd(Foldere){
classFileextendsFolder{
遍历文件..."
publicclassTest4{
Folderfolder1,folder2,folder3;
folder1=newFolder();
folder2=newFolder();
folder3=newFolder();
Filef1,f2,f3;
f1=newFile();
f2=newFile();
f3=newFile();
folder1.add(f1);
folder2.add(folder1);
folder3.add(f2);
folder3.add(f3);
folder3.add(folder2);
folder3.scan();
//判断两个数组中是否有相同的数字
//给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?
//这个问题首先想到的是一个O(nlogn)的算法。
//就是任意挑选一个数组,遍历这个数组的所有元素,
//遍历过程中,在另一个数组中对第一个数组中的每个元素进行binarysearch。
public
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一些 常见 算法 java 实现