有序线性表(存储结构数组)--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 }