iStart=iIndex;
}elseif(arr[iIndex]>searchWord){
iEnd=iIndex;
}else{
break;
}
}
returnsearchCount;
}
3.写出一个双向链表类代码
package
publicclassNode
{
privateEelement;//结点数据
privateNodenext;//上结点
privateNodeprevious;//下结点
privatestaticintsize=0;//链表长
//默认关结点nextprevious都是空,
publicNode()
{
this.element=null;
this.next=null;
this.previous=null;
}
privateNode(Eelement,Nodenext,Nodeprevious)
{
this.element=element;
this.next=next;
this.previous=previous;
}
/**
*尾部添加元素e
*@parame
*/
publicvoidaddAfter(Ee)
{
//定义新结点,next-->头结点;previous-->头结点.previous(尾结点)
NodenewNode=newNode(e,this,this.previous==nullthis:
this.previous);
//头结点next为空则让它指向newNode
if(this.next==null)
{
this.next=newNode;
}
//头结点previous为空则让它指向newNode
if(this.previous==null)
{
this.previous=newNode;
}
this.previous.next=newNode;
this.previous=newNode;
size++;
}
/**
*头部添加元素e
*@parame
*/
publicvoidaddBefor(Ee)
{
NodenewNode=newNode(e,this.next==nullthis:
this.next,this);
if(this.next==null)
{
this.next=newNode;
}
if(this.previous==null)
{
this.previous=newNode;
}
this.next.previous=newNode;
this.next=newNode;
size++;
}
/**
*在index处添加元素e
*@parame
*@paramindex
*/
publicvoidadd(Ee,intindex)
{
//索引越界
if(index>=size||index<0)
{
thrownewIndexOutOfBoundsException("Node.get():
"+index);
}
else
{
//index>size/2,反向遍历
if(index>size>>1)
{
Nodetemp=this;
for(inti=size;i>index;i--)
{
temp=temp.previous;
}
NodenewNode=newNode(e,temp,temp.previous);
temp.previous.next=newNode;
temp.previous=newNode;
}
else
{
Nodetemp=this;
for(inti=0;i<=index;i++)
{
temp=temp.next;
}
NodenewNode=newNode(e,temp,temp.previous);
temp.previous.next=newNode;
temp.previous=newNode;
}
size++;
}
}
/**
*删除第index个元素
*@paramindex
*/
publicvoidremove(intindex)
{
//索引越界
if(index>=size||index<0)
{
thrownewIndexOutOfBoundsException("Node.get():
"+index);
}
else
{
//index>size/2,反向遍历
if(index>size>>1)
{
Nodetemp=this;
for(inti=size;i>index;i--)
{
temp=temp.previous;
}
temp.previous.next=temp.next;
temp.next.previous=temp.previous;
}
else
{
Nodetemp=this;
for(inti=0;i<=index;i++)
{
temp=temp.next;
}
temp.previous.next=temp.next;
temp.next.previous=temp.previous;
}
size--;
}
}
/**
*取得第index个元素
*@paramindex
*@return
*/
publicEget(intindex)
{
//索引越界
if(index>=size||index<0)
{
thrownewIndexOutOfBoundsException("Node.get():
"+index);
}
else
{
//index>size/2,反向遍历
if(index>size>>1)
{
Nodetemp=this;
for(inti=size;i>index;i--)
{
temp=temp.previous;
}
returntemp.element;
}
else
{
Nodetemp=this;
for(inti=0;i<=index;i++)
{
temp=temp.next;
}
returntemp.element;
}
}
}
publicintsize()
{
returnsize;
}
publicstaticvoidmain(Stringa[])
{
Nodenode=newNode();
node.addAfter("1");
node.addAfter("2");
node.addAfter("3");
node.addBefor("0");
node.add("7",0);
System.out.println(node.get(0));
System.out.println(node.get
(1));
System.out.println(node.get
(2));
System.out.println(node.get(3));
System.out.println(node.get(4));
}
}
4.写出一个二叉树代码
classTreeNode{
privateStringdata;
privateTreeNodeleftNode;
privateTreeNoderightNode;
publicTreeNode(Stringdata,TreeNodeleftNode,TreeNoderightNode){
this.data=data;
this.leftNode=leftNode;
this.rightNode=rightNode;
}
publicStringgetData(){
returndata;
}
publicvoidsetData(Stringdata){
this.data=data;
}
publicTreeNodegetLeftNode(){
returnleftNode;
}
publicvoidsetLeftNode(TreeNodeleftNode){
this.leftNode=leftNode;
}
publicTreeNodegetRightNode(){
returnrightNode;
}
publicvoidsetRightNode(TreeNoderightNode){
this.rightNode=rightNode;
}
}
5.编写一个生产者和消费者的程序
publicclassTestProduce{
publicstaticvoidmain(String[]args){
SyncStacksStack=newSyncStack();
Shengchansc=newShengchan(sStack);
Xiaofeixf=newXiaofei(sStack);
sc.start();
xf.start();
}
}
classMantou{
intid;
Mantou(intid){
this.id=id;
}
}
classSyncStack{
intindex=0;
Mantou[]ms=newMantou[10];
publicsynchronizedvoidpush(Mantoum){
while(index==ms.length){
try{
this.wait();
//wait后,线程会将持有的锁释放。
sleep是即使睡着也持有互斥锁。
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
this.notify();//唤醒在当前对象等待池中等待的一个线程(随意的)。
notifyAll叫醒所有在当前对象等待池中等待的所有线程。
//如果不唤醒的话。
以后这两个线程都会进入等待线程,没有人唤醒。
ms[index]=m;
index++;
}
publicsynchronizedMantoupop(){
while(index==0){
try{
this.wait();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
this.notify();
index--;
returnms[index];
}
}
classShengchanextendsThread{
SyncStackss=null;
publicShengchan(SyncStackss){
//TODOAuto-generatedconstructorstub
this.ss=ss;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
for(inti=0;i<20;i++){
造馒头:
"+i);
Mantoum=newMantou(i);
ss.push(m);
}
}
}
classXiaofeiextendsThread{
SyncStackss=null;
publicXiaofei(SyncStackss){
//TODOAuto-generatedconstructorstub
this.ss=ss;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
for(inti=0;i<20;i++){
Mantoum=ss.pop();
吃馒头:
"+i);
}
}
}
6.定义一个多线程类,并写出如何终止线程的执行,并启动他。
publicclassTestThreadCiycleimplementsRunnable{
Stringname;
booleanlive=true;
publicTestThreadCiycle(Stringname){
super();
this.name=name;
}
publicvoidrun(){
inti=0;
while(live){
System.out.println(name+(i++));
}
}
publicvoidterminate(){
live=false;
}
publicstaticvoidmain(String[]args){
TestThreadCiyclettc=newTestThreadCiycle("线程A:
");
Threadt1=newThread(ttc);//新生状态
t1.start();//就绪状态
for(inti=0;i<1000;i++){
System.out.println(i);
}
ttc.terminate();
System.out.println("ttcstop!
");
}
}
7.写出一个文件复制的程序
voidcopyFile(Stringsrc,Stringdec){
FileInputStreamfis=null;
FileOu