有序线性表(存储结构数组)--Java实现

 1 /*有序数组:主要是为了提高查找的效率
 2  *查找:无序数组--顺序查找,有序数组--折半查找
 3  *其中插入比无序数组慢
 4  * */
 5 public class MyOrderedArray {
 6     private long[] arr;
 7     private int items;
 8     
 9     public MyOrderedArray(int max) {
10         arr = new long[max];
11         items = 0;
12     }
13     
14     //数组中元素的个数
15     public int size(){
16         return items;
17     }
18     
19     //折半查找
20     public int find(long key){
21         int low = 0;
22         int high = items - 1;
23         int mid;//变化的
24         while(low <= high){
25             mid = (low + high) / 2;
26             if(key == arr[mid]){
27                 return mid;
28             }
29             else if(key > arr[mid]){
30                 low =  mid + 1;
31             }
32             else if(key < arr[mid]){
33                 high = mid - 1;
34             }
35         }
36         return -1;
37     }
38     
39     //插入元素
40     public void insert(long key){
41         int i;
42         
43         for( i = 0; i < items; i++){ //先找到位置
44             if(key < arr[i]){
45                 break;
46             }
47         }
48         
49         for(int k = items;k>i; k--){   //移动元素
50             arr[k] = arr[k -1];
51         }
52         
53         arr[i] = key;//插入元素到找到的位置
54         items++;
55     }
56     
57     //删除元素--先判断找的位置合法--在判断
58     public boolean delete(long key){
59         int i = find(key);
60         if(i == items){
61             return false;
62         }
63         else{
64             for(int k = i; k < items; k++){
65                 arr[k] = arr[k + 1];
66             }
67             items--;
68             return true;
69         }
70     }
71     
72     public void displayArray(){
73         for(int i = 0;i < items;i++){
74             System.out.print(arr[i] + " ");
75         }
76         System.out.println();
77     }
78     
79 }

 

posted @ 2017-10-17 11:08  sun1993  阅读(619)  评论(0编辑  收藏  举报