首页 > 安全资讯 >

数据结构-数组

13-03-06

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

数据结构-数组
      数组是应用最广泛的数据存储结构。它被植入到编程语言中。由于数组十分易懂,所以它用来作为介绍数据结构的起步点,并展示面向对象编程和数据结构之间的相互关系。
无序数组:
创建一个数组类,通过调用数组类来操作数组。
//通过面向对象来实现增、删、查的操作
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();www.2cto.com
       if(ss.find(55) != ss.size()){
           System.out.println("找到:"+55);
       }else {
           System.out.println("没找到:"+55);
       }
       ss.delete(77);
       ss.display();
      
    }
}
相关文章
最新文章
热点推荐