线性表之顺序存储结构

package com.stucture.sqlList;  
  
/** 
 * 线性表顺序存储结构
 * 指的是用一段地址连续的存储单元一次存储线性表的数据元素 
 * @ClassName: SeqList  
 * @author 景帅
 * @date 2013-2-27 
 */  
public class SeqList<T> {
	
	private T[] data;   //数组存储数据元素  
    private int length; //线性表当前长度 
	public SeqList(){
		data = (T[]) new SeqList[MAXSIZE];
	}
	public SeqList(int maxsize){
		MAXSIZE = maxsize;
	}
    private Integer MAXSIZE = 20;  
    /** 
     * 获得元素 
     * @param i 需要获得的第i个元素 
     * @return  
     */  
    public T getElem(int i) {
    	 if(i < 0 || i >MAXSIZE) {  
             return null;  
         }  
         T t = data[i - 1];  
         return t; 
	}  
    public int getMaxSize(){
    	return MAXSIZE;
    } 
  
    /** 
     * 插入元素 
     * @param i 元素的插入位置 
     * @param t 需要插入的元素 
     * @return  是否成功插入 
     */  
    public boolean insertElem(int i, T t) {
    	if(length == MAXSIZE) { //线性表已经满了  
            System.out.println("该线性表已经满了");  
            return false;  
        }  
          
        if(i < 1 || i > MAXSIZE) {    //插入位置不在范围内  
            System.out.println("该位置不合法");  
            return false;  
        }  
          
        if(i < length) { //插入位置不在表尾  
              
            for(int j = length; j >= i; j--) {   //将要插入位置后数据元素向后移动一位  
                data[j] = data[j - 1];  
            }  
        }  
        data[i - 1] = t;    //插入新元素  
        length++;   //线性表长度增加  
        return true;  
	}  
      
    /** 
     * 删除元素 
     * @param i 需要删除元素的位置 
     * @return 
     */  
    public T deleteElem(int i) {
        if(length == 0) {   //"线性表为空"  
            System.out.println("线性表为空");  
            return null;   
        }  
  
        if(i < 1 || i > length) { //删除位置不在范围内  
            System.out.println("该位置不合法");  
            return null;  
        }  
        T t = data[i -1];  
        for(int j = (i - 1); j <= (length - 1); j++) {  
            data[j] = data[j+1];  
        }  
        length--;//线性表长度减少  
        return t; 
	}
    public T[] getData() {  
        return data;  
    }  
  
    public void setData(T[] data) {  
        this.data = data;  
    }  
  
    public int getLength() {  
        return length;  
    }  
  
    public void setLength(int length) {  
        if(length < 0 || length > MAXSIZE) {  //删除位置不在范围内  
            System.out.println("长度不合法");  
        }  
        this.length = length;  
    } 
} 

下面是调用测试

package com.stucture.sqlList;  

import java.util.Random;  

public class SeqListTest {  
    final int MAX = 25;  
    Random r = new Random();  
    SeqList<Integer> seqList;  
      
    public SeqListTest() {  
        initSeqList();  
    }  
      
    //创建一个线性表顺序存储结构  
    public void initSeqList() {  

        seqList = new SeqList<Integer>();  
//      int length = (int) Math.random();   //只能产生0.0 - 1.0之间的double随机数  
        int length = Math.abs(r.nextInt(MAX));  //使用Random随机产生一个25左右的值,使用Math.abs()函数来取绝对值    
        System.out.println("产生的数组长度为 :" + length);  
          
        if(length > seqList.getMaxSize()) {  
            System.out.println("该长度不合法");  
        }  
          
        for (int i = 1; i <= length; i++) {  //为生成的数组赋值,同时也测试了插入值的方法  
            int j =r.nextInt(MAX);  
            System.out.print(j + " ");  
              
            if(!seqList.insertElem(i, j)) {  
                System.exit(0);   
            }  
        }  
        System.out.println("\n原始数组是 :");  
        display(seqList);  
    }  
      
    //测试删除方法  
    public void deleteElem() {  
        int i = r.nextInt(MAX);  
        System.out.println("\n\n删除的位置是:" + i);  
        Integer deleteNumber = seqList.deleteElem(i);  
          
        if( deleteNumber == null) {  
            System.exit(0);  
        } else {  
            System.out.println("删除的元素是 : " + deleteNumber);  
            System.out.println("删除元素后数组是 :");  
            display(seqList);  
        }  
    }  
      
    //测试随机插入方法  
    public void insertByRandom() {  
        int i = r.nextInt(MAX);  
        System.out.println("\n\n随机插入位置是 :" + i);  
        int elem = r.nextInt(MAX);  
        System.out.println("随机插入数据是 :" + elem);  
        seqList.insertElem(i, elem);  
        System.out.println("随机插入数据后数组是 :");  
        display(seqList);  
    }  
      
    //数据展示  
    public  void display(SeqList seqList) {  
        for (int i = 1; i < seqList.getData().length; i++) {  
              
            if(seqList.getElem(i) != null) {  
                System.out.print(seqList.getElem(i) + " ");  
            }  
              
        }  
        System.out.println("数组的长度为 :" + seqList.getLength());  
    }  
      
    //获取元素  
    public void getElem() {  
        int i = r.nextInt(MAX);  
        System.out.println("\n获取位置为 :" + i);  
        System.out.println("获取到的元素为 : " + seqList.getElem(i));  
          
          
    }  
      
    public static void main(String[] args) {  
        SeqListTest s = new SeqListTest();  
        s.insertByRandom();  
        s.deleteElem();  
        s.getElem();  
    }  
}  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值