ACM中使用java.docx
- 文档编号:3325324
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:34
- 大小:48.43KB
ACM中使用java.docx
《ACM中使用java.docx》由会员分享,可在线阅读,更多相关《ACM中使用java.docx(34页珍藏版)》请在冰豆网上搜索。
ACM中使用java
目录
java输出重定向.......................................................................................2
java输入重定向.....................................................................................2
java中使用控制台输入.............................................................................2
java输入输出重定向...............................................................................3
Java中输入多组数据时的技巧...................................................................3
Java中对象无重复排序..............................................................................4
单链表......................................................................................................7
循环链表...................................................................................................9
栈..............................................................................................................11
队列..........................................................................................................13
二叉排序树................................................................................................15
最小生成树(普里姆算法).........................................................................18
深度优先搜索和广度优先搜索.....................................................................21
最短路径求解—Dijkstra算法.......................................................................26
1、java输出重定向
importjava.io.FileOutputStream;
importjava.io.PrintStream;
publicclassMain{
publicstaticvoidmain(Stringargs[])throwsException{
PrintStreamout=newPrintStream(newFileOutputStream("pc2.estdout"));
System.setOut(out);
System.out.println("HelloWorld!
");
out.close();
}
}
2、java输入重定向
importjava.io.BufferedInputStream;
importjava.io.FileInputStream;
importjava.util.Scanner;
publicclassTest08{
publicstaticvoidmain(String[]args)throwsException{
//输入重定向
BufferedInputStreamin=newBufferedInputStream(newFileInputStream("std.in"));
System.setIn(in);
Scannerstdin=newScanner(System.in);
inta=stdin.nextInt();
intb=stdin.nextInt();
System.out.print(a+b);
}
}
3、java中使用控制台输入
importjava.util.Scanner;
publicclassMain{
publicstaticvoidmain(String[]args){
Scannerinput=newScanner(System.in);
Stringstr1=input.nextLine();
System.out.println(str1);
}
}
4、java输入输出重定向
importjava.io.BufferedInputStream;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.PrintStream;
importjava.util.Scanner;
publicclassMain{
publicstaticvoidmain(String[]args)throwsException{
//输入重定向
BufferedInputStreamin=newBufferedInputStream(newFileInputStream("std.in"));
System.setIn(in);
Scannerstdin=newScanner(System.in);
inta=stdin.nextInt();
intb=stdin.nextInt();
//输出重定向
PrintStreamout=newPrintStream(newFileOutputStream("estdout.pc2"));
System.setOut(out);
System.out.print(a+b);
out.close();//关闭重定向
}
}
Java中输入多组数据时的技巧
publicclassMain{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
intm=sc.nextInt();//表示有m组数据
Activity[]act=null;
Activity[][]t=newActivity[m][];
for(inti=0;i intn=sc.nextInt();//表示有n个活动 act=newActivity[n]; for(intk=0;k act[k]=newActivity(); } for(intj=0;j act[j].setTime(sc.nextInt(),sc.nextInt()); } t[i]=act; } for(inti=0;i sort(t[i]); delete(t[i]); System.out.println(count(t[i])); } } Java中对象无重复排序 importjava.util.ArrayList; importjava.util.Arrays; importjava.util.Comparator; importjava.util.HashSet; importjava.util.Scanner; publicclassPer{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); intm=sc.nextInt();//代表m组测试数据 for(inti=0;i intn=sc.nextInt();//代表n个长方形 Rect[]s=newRect[n]; for(intj=0;j inta=sc.nextInt(); intb=sc.nextInt(); intc=sc.nextInt(); intheight=b>c? b: c; intwidth=b b: c; s[j]=newRect(a,height,width); } HashSetset=newHashSet(); ArrayListlist=newArrayList(); for(intj=0;j if(set.add(s[j])) list.add(s[j]); } Object[]arr=list.toArray(); Arrays.sort(arr,newMyComparator()); for(Objectj: arr) System.out.println(j); } } publicstaticclassMyComparatorimplementsComparator{ @Override publicintcompare(Objecto1,Objecto2){ Rectrc1=(Rect)o1; Rectrc2=(Rect)o2; if(rc1.id>rc2.id){ return1; }elseif(rc1.id return-1; }else{ if(rc1.height>rc2.height){ return1; }elseif(rc1.height return-1; }else{ if(rc1.width>rc2.width){ return1; }elseif(rc1.width return-1; }else return0; } } } } publicstaticclassRect{ intheight; intid; intwidth; publicRect(inti,inthei,intwid){ height=hei; id=i; width=wid; } publicStringtoString(){ returnid+""+height+""+width; } publicbooleanequals(Objecto){ Rectt=(Rect)o; returnt.height==height&&t.id==id&&t.width==width; } publicinthashCode(){ return3*height+4*id+5*width; } } } Java中的常用数据结构 1.单链表 publicclassMain{ publicstaticvoidmain(String[]args){ LinkListl=newLinkList(); l.add("A"); l.add("B"); l.add("C"); l.add("D"); l.add("E"); printList(l.head); System.out.println(); LinkNodet=l.search("E"); System.out.println(t.data); l.delete("E"); LinkNodet1=l.search("E"); System.out.println(t1.data); } publicstaticvoidprintList(LinkNodetmp){ System.out.print(tmp.data+""); if(tmp.next! =null){ printList(tmp.next); } } } //定义节点类 classLinkNode{ Objectdata=null;//保存节点内容 LinkNodenext=null;//保存节点的下一个节点 publicLinkNode(Objectdata){ this(data,null); } publicLinkNode(Objectdata,LinkNodetmp){ this.data=data; this.next=tmp; } } //定义链表类,对节点进行封装 classLinkList{ LinkNodehead=null;//定义头结点 LinkNodep=null;//p节点用来保存节点移动后的当前位置 //向链表中增加成员 publicvoidadd(Objectdata){ LinkNodetmp=newLinkNode(data); if(head==null){ head=tmp; p=tmp; p.next=null; }else{ p.next=tmp; p=tmp; p.next=null; } } //查找链表中的某节点 publicLinkNodesearch(Objectdata){ p=head; booleani=false;//用于判断节点是否找到 while(p! =null){ if(p.data==data){ i=true; break; } p=p.next; } if(i==false){ return(newLinkNode("不存在")); }else{ returnp; } } //删除链表中某节点 publicvoiddelete(Objectdata){ if(search(data).data=="不存在"){ System.out.println("找不到该节点,删除失败! "); }else{ LinkNodetmp; tmp=search(data);//找到要删除的节点tmp if(tmp.next! =null){ LinkNodech;//通过将要删除的节点(即tmp)的下一个节点的内容传给tmp, ch=tmp.next;//然后再将tmp的下一个节点从链表中移走达到删除tmp的目的 tmp.data=ch.data; tmp.next=ch.next; }else{//如果要删除的是最后一个结点,则将节点的内容修改, search(data).data="不存在";//相当于删除了该节点 } } } } 2.循环链表 publicclassMain{ publicstaticvoidmain(String[]args){ LinkListl=newLinkList(); l.setLen(30); l.createLink(); l.setK (1); l.setM(9); l.play(); } } classNode{ intdata; Nodenext; publicNode(intdata){ this.data=data; } } classLinkList{ Nodehead=null;//定义头节点 Nodep=null;//定义p保存当前节点的位置 intlen=0;//保存链表的长度 intk=0;//保存从第几人开始报数 intm=0;//保存报到第几个数 publicvoidsetLen(intlen){ this.len=len;//设置链表长度 } publicvoidsetK(intk){ this.k=k;//设置从第几人开始报数 } publicvoidsetM(intm){ this.m=m;//设置报到第几个数 } publicvoidcreateLink(){ for(inti=1;i<=len;i++){ Nodech=newNode(i);//生成一个新节点 if(i==1){ head=ch;//将第一个新节点设为头节点 p=ch;//p保存移动后的当前位置的节点 }elseif(i==len){ p.next=ch; p=ch; p.next=head;//将最后一个节点的下一个节点设为头节点,形成循环链表 }else{ p.next=ch; p=ch; } } } publicvoidshow(Nodenode){ System.out.print(node.data+""); } publicvoidplay(){ char[]a=newchar[30]; for(inti=0;i a[i]='@'; } p=head; //找到第k个人 for(inti=1;i p=p.next; } while(this.len! =15){ for(inti=1;i p=p.next; } //show(p);//打印读到m的人 a[p.data-1]='+'; //删除第m个人 Nodetmp=p.next; p.data=tmp.data; p.next=tmp.next; this.len--; }; for(inti=0;i System.out.print(a[i]); } } } 3.栈 publicclassMain{ publicstaticvoidmain(String[]args){ StackLisl=newStackLi(); sl.push("A"); sl.push("B"); sl.push("C"); sl.push("D"); sl.push("E"); print(sl.getTopStack());//从栈顶开始向下输出元素 sl.pop(); sl.pop(); sl.pop(); sl.pop(); print(sl.getTopStack()); print(sl.getTopStack());//输出栈顶元素 } publicstaticvoidprint(ListNodenode){ if(node==null){ System.out.println("桟是空的,没有元素可以输出! "); }else{ System.out.print(node.element+""); if(node.next! =null){ print(node.next); }else{ System.out.println();//桟中全部元素输出后换行 } } } } //定义异常类 classUnderflowextendsThrowable{ privateStringinfo; publicUnderflow(){ System.out.println("桟已空,无法出桟! "); } } //定义链表节点类 classListNode{ Objectelement; ListNodenext; publicListNode(Objectc){ this(c,null); } publicListNode(Objectc,ListNodenode){ this.element=c; this.next=node; } } //定义桟类 classStackLi{ privateListNodetopOffStack; publicStackLi(){ topOffStack=null; } //取得栈顶 publicListNodegetTopStack(){ returntopOffStack; } //判断是否桟满 publicbooleanisFull(){ returnfalse; } //判断是否桟空 publicbooleanisEmpty(){ returntopOffStack==null; } //清空桟 publicvoidmakeEmpty(){ topOffStack=nul
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACM 使用 java