数据结构-数组

数据结构-数组

      数组是应用最广泛的数据存储结构。它被植入到编程语言中。由于数组十分易懂,所以它用来作为介绍数据结构的起步点,并展示面向对象编程和数据结构之间的相互关系。

无序数组:

创建一个数组类,通过调用数组类来操作数组。

//通过面向对象来实现增、删、查的操作

publicclass HighArray {

    privatelong[] a;

    privateintnElem;

    public HighArray(int size){

       a = newlong[size];

       nElem = 0;

    }

    //向数组内插入数据

    publicvoid setA(long value) {

       a[nElem]=value;     

       nElem++;

    }

    //按条件查找数据

    publicboolean Seachkey(long value){

       boolean s=false;

       for(int i=0;i<nElem;i++){

           if(a[i]==value){

              s=true;

              break;

           }else{

              s=false;

           }

       }

       return s;

    }

    //删除指定数据

    publicboolean delete(long value){

       boolean ss=false;

       for (int i=0; i<nElem;i++){

           if(a[i]==value){

              for(int k=i;k<nElem;k++){

                  a[k]=a[k+1];

              }

              ss=true;

              break;

           }

       }

       nElem--;

       return ss;

    }

    //输出全部数据

    publicvoid display(){

       for (int i = 0; i < nElem; i++) {

           System.out.print(a[i]+" ");

       }

    }

}

publicclass HigArrayApp {

    publicstaticvoid main(String args[]){

       int maxSize =100;

       HighArray hh;//引用HighArray

       hh = new HighArray(maxSize);//创建HighArray对象

       hh.setA(99);

       hh.setA(77);

       hh.setA(88);

       hh.setA(66);

       hh.setA(55);

       hh.setA(44);

       hh.setA(33);

       hh.setA(22);

       hh.setA(11);

       hh.setA(26);

       //输出数组

       hh.display();

       //查找特定数据

       hh.Seachkey(66);

       if(hh.Seachkey(66)){

           System.out.println("查到:"+66);

       }else {

           System.out.println("没查到:"+66);

       }

       //删除特定数据

       hh.delete(26);

       hh.display();

    }

}

 

有序数组:

二分查找法

      当使用二分查找法时就会提现出有序数组的好处。

   例:猜数游戏

   假如你才一个100(或n)只内的数字,你当先从50(或n/2)开始猜,假如猜的数大于50在,从51-100之间的中间处开始猜,以此类推最终可以猜到这个数字,而其猜的次数会减少很多。这就是二分查找法。

例:

publicclass OrdHigh {

        privatelong[] d;           //引用数组a

    privateintnElems;             //记录数据的中个数

    public OrdHigh(int max){

       d=newlong[max];         //创建数组

       nElems = 0;

    }

    publicint size(){       //返回nElems的值

       returnnElems;

    }

    /* 用二分查询法查询特定的数据*/

    publicint find(long seachkey){

       int lowerBound = 0;      //存放最小值的下标

       int upperBound = nElems-1;  //存放最大值的下标

       int curIn; //存放中间值下标

       while (true) {

           curIn = (lowerBound+upperBound)/2;//获取中间值的下标

           if(d[curIn]==seachkey){//判断中间值与特定的数据是否相等

              return curIn;

           }elseif(lowerBound>upperBound){

              returnnElems;    //没找到的时候

           }

           else{

              if(d[curIn]>seachkey){

                  upperBound = curIn -1; //将中间值的下标-1当做最大值的下标

              }else{

                  lowerBound = curIn +1;//将中间值的下标+1当做最小值的下标

              }

           }

       }

    }

    /*向有序数组中存放值*/

    publicvoid insert(long value){

       //将数组按顺序存储

       for(int j=0;j<nElems;j++){

           //如果存入的值比原有的值小就返回,若是大就将其向比它小的值前面移

           if(d[j] > value){

              break;

           }else{

           for (int i = nElems; i>j; i--) {

                  d[i] = d[i-1];

              }

           d[j] = value;

           }

       }

       nElems++;

    }

    //删除指定的数据

    publicboolean delete(long value){

       int j=find(value);

       if(j==nElems){

           returnfalse; //没有查到指定值

       }else{

           for (int i = j; i < nElems; i++) {

              d[i] = d[i+1];

           }

           nElems--;

           returntrue;

       }

    }

    //查询所有数据

    publicvoid display(){

       for(int j=0;j<nElems;j++){

           System.out.print(d[j]+" ");

       }

    }

}

publicclass OrdHighApp {

 

    publicstaticvoid main(String args[]){

       int maxSize=100;

       OrdHigh ss;

       ss = new OrdHigh(maxSize);

       ss.insert(77);

       ss.insert(88);

       ss.insert(99);

       ss.insert(44);

       ss.insert(55);

       ss.insert(33);

       ss.insert(66);

       ss.insert(22);

       ss.insert(11);

       ss.display();

       if(ss.find(55) != ss.size()){

           System.out.println("找到:"+55);

       }else {

           System.out.println("没找到:"+55);

       }

       ss.delete(77);

       ss.display();

      

    }

}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值