线性表之--顺序表

  1 package cn.njupt.mdj;
  2 
  3 class linerTable<E>{
  4     private Object[] data = null;
  5     private int capacity;
  6     private int current;
  7     
  8     //默认大小
  9     public linerTable(){
 10         this(10);
 11     }
 12     
 13     //初始化大小 开辟空间
 14     public linerTable(int size){
 15         if(size >= 0){
 16             this.capacity = size;
 17             this.data = new Object[this.capacity];
 18             this.current = 0;
 19         }else{
 20             throw new RuntimeException("初始化大小需要大于0 :"+ size);
 21         }
 22     }
 23     
 24     //添加元素,由于是顺序表,元素依次向后填加
 25     public boolean add(E object){
 26         //注意这里不是 this.current == this.capacity-1,原因,添加元素后,this.current++了,使得比较的时候直接索引加了1位
 27         if(this.current == this.capacity){  
 28             //扩充容量
 29             this.capacity *= 2;
 30             //将原有的元素拷贝
 31             Object[] newdata = new Object[this.capacity];
 32             for(int i=0;i<this.current;i++){
 33                 newdata[i] = data[i];
 34             }
 35             this.data = newdata;
 36         }
 37         //容量扩充后,或则本来空间就够,则向末尾添加元素
 38         this.data[current] = object;
 39         this.current++;
 40         return true;
 41     }
 42     
 43     //有增加当然就有删除元素,删除,则肯定是删除指定位置的某个元素
 44     public boolean delete(int index){
 45         //首先删除之前,肯定是要判断index是否合理的
 46         if(index < 0 || index > current){
 47             throw new RuntimeException("无效的下标:" + index); //越界
 48         }
 49         //下标既然合理,开始删除指定的元素,删除,即把该位置元素去掉
 50         if(index == this.current-1){//末尾元素
 51             this.data[current-1] = null; //直接删除
 52         }
 53         //不是末尾元素,则所有元素向前补洞。
 54         for(int i = index ;i<this.current-1;i++){
 55             this.data[i] = this.data[i+1];
 56         }
 57         --this.current;
 58         return true;
 59     }
 60     
 61     //有添加 删除 当然有插入 和查找
 62     //插入元素,像指定位置插入 指定的元素
 63     public boolean insert(int index,E object){
 64         //插入元素,首先要保证插入的index是合理的数组范围内
 65         if(index < 0 || index > current){
 66             throw new RuntimeException("无效的下标:" + index); //越界
 67         }
 68         //但同时要保证元素有空间可以给要插入的元素
 69         if(this.current == this.capacity){
 70             //扩充容量
 71             this.capacity *= 2;
 72             //将原有的元素拷贝
 73             Object[] newdata = new Object[this.capacity];
 74             for(int i=0;i<this.current;i++){
 75                 newdata[i] = data[i];
 76             }
 77             this.data = newdata;
 78         }
 79         
 80         //有了容量,开始插入,当然如果是向末尾插入,那就是添加元素了,但如果不是末尾,则就是整体元素后移了,所以获取当前元素位置
 81         //System.out.println(current);
 82         for(int i= current; i > index ; i--){
 83             this.data[i] = this.data[i-1];
 84         }
 85         //空出的位置即是待插入的位置,若current<= index ,那么就是向末尾添加元素了
 86         this.data[index] = object;
 87         this.current++;
 88         return true;
 89     }
 90     
 91     //查找元素,直接给定下标,返回要的元素
 92     public E get(int index){
 93         if(index < 0 || index > current){
 94             throw new RuntimeException("无效的下标:" + index); //越界
 95         }
 96         return (E)this.data[index];
 97     }
 98     
 99     //获取当前元素的个数
100     public int size() {  
101         return current;  
102     }  
103     
104     public void display(){
105         if(data == null || data.length == 0){
106             System.out.println("没有数据");
107         }
108         
109         for(int i=0;i < current;i++){
110             System.out.print(data[i].toString() + "、");
111         }
112     }
113     
114 }
115 
116 
117 public class ArrayList {
118     
119     /**
120      * @param args
121      */
122     public static void main(String[] args) {
123         // TODO Auto-generated method stub
124         linerTable l = new linerTable(20);
125         
126         //add
127         l.add(1);
128         l.add(2);
129         l.add(3);
130         l.add(5);
131         l.add(6);
132         l.add(7);
133         l.add(9);
134         
135         l.display();
136         
137         System.out.println("");
138         
139         //insert
140         l.insert(6,8);
141         
142         l.display();
143         System.out.println("");
144         //delete
145         l.delete(6);
146         l.display();
147         System.out.println("");
148         //get
149         System.out.println(l.get(2));
150     }
151 
152 }

posted on 2012-08-11 16:55  pony1223  阅读(188)  评论(0编辑  收藏  举报

导航