Java語言描述順序表類,順序表類的基本操作實現


數據結構(Java版)ch2 線性表的順序存儲(順序表)

 

線性表的抽象數據Java接口描述如下:

package ch2;
/**
 * 線性表的抽象數據接口,用Java語言描述線性表的這些功能!
 * @author 房廷飛
 *
 */
public interface IList {
    public void clear();  //將線型表置成空表
    public boolean isEmpty();  //判斷是不是空表
    public int length();  //返回線性表的長度
    public Object get(int i) throws Exception;  //返回線性表中第i個數據元素
    public void insert(int i,Object x) throws Exception;  //插入x作為第i個元素
    public void remove (int i) throws Exception;  //s刪除第i個元素
    public int indexOf(Object x);  //查找並返回元素x首次出現的位序號
    public void display();  //輸出線性表中各個數據元素的值
    

}

順序表類的Java語言描述,順序表類的基本操作實現:

package ch2;
/**
 * 用Java語言描述線性表的接口指定功能
 * @author 房廷飛
 *
 */
public class SqList implements IList{  //執行IList接口
    //構造一個存儲空間為maxsize的順序表
    private Object[] listItem;  //順序表的存儲空間
    private int curLen;  //順序表當前的長度
    private int maxSize;
    
    //構造一個存儲空間為maxsize的順序表
    public SqList (int maxsize) {
        curLen=0;
        maxSize=maxsize;
        listItem=new Object[maxSize];
    }

    @Override
    public void clear() {
        // TODO Auto-generated method stub
        curLen=0;
        
    }

    @Override
    public boolean isEmpty() {
        // TODO Auto-generated method stub
        return curLen==0;
    }

    @Override
    public int length() {
        // TODO Auto-generated method stub
        return curLen;
    }

    @Override
    public Object get(int i) throws Exception {
        // TODO Auto-generated method stub
        if(i<0||i>curLen-1)
            throw new Exception("第"+i+"個元素不存在!");
        return listItem[i];
    }

    @Override
    public void insert(int i, Object x) throws Exception {
        // TODO Auto-generated method stub
        if (curLen==maxSize)
            throw new Exception("順序表已滿,不能插入!");
        if (i<0||i>curLen)
            throw new Exception("插入位置不合法!");
        for(int j=curLen;j>i;j--) {    //插入是從最后遞減重排序        //標識,可嘗試改
            listItem[j]=listItem[j-1];
        }
        listItem[i]=x;
        curLen++;
            
            
    }

    @Override
    public void remove(int i) throws  Exception{
        // TODO Auto-generated method stub
        if(i<0||i>curLen-1)
            throw new Exception("移除位置不合法!");
        for(int j=i;j<curLen-1;j++) {    //移除是從i處遞增重排序
            listItem[j]=listItem[j+1];
        }
        curLen--;
        
    }

    @Override
    public int indexOf(Object x) {
        // TODO Auto-generated method stub
        for(int i=0;i<=curLen;i++) {
            if(listItem[i].equals(x)) {
                return i;
            }
        }
        return -1;
    }

    @Override
    public void display() {
        // TODO Auto-generated method stub
        for(int i=0;i<curLen;i++) {
            System.out.println(listItem[i]);
        }
        }
    }

通過兩個小例子應用順序表:

demo1:

package ch2;

import java.util.Scanner;
/**
 *  例一:建立一個由a-z的26個英文字母組成的字母順序表,求每個字母的直接前驅和直接后繼,編程實現!
 * @author 房廷飛
 *
 */

public class Practice01 extends SqList{

    public Practice01(int maxsize) {
        super(maxsize);
        // TODO Auto-generated constructor stub
    }
    public static void main(String[] args) throws Exception {
        Practice01 p1=new Practice01(26);
        for(int i=0;i<26;i++) {
            p1.insert(i,(char)(97+i));
        }
        System.out.println("請輸入要查詢的字母位序號(0~25):");
        int i = new Scanner(System.in).nextInt();
        if(i>0&&i<25) {
            System.out.println("第"+i+"個字母的直接前驅為:"+p1.get(i-1));
            System.out.println("第"+i+"個字母的直接后驅為:"+p1.get(i+1));
        }
        else if(i==0) {
            System.out.println("第"+i+"個字母的直接前驅不存在,直接后驅為:"+p1.get(i+1));
        }
        else {
            System.out.println("第"+i+"個字母的直接后驅不存在,直接前驅為:"+p1.get(i-1));
        }
    }
}

demo2:

package ch2;
/**
 * 例二:建立一個順序表,表中數據為5個學生的成績(89,93,92,90,100),然后查找成績為90的數據元素,並輸出其在數據表中的位置。
 * @author 房廷飛
 *
 */
public class Practice02 extends SqList{

    public Practice02(int maxsize) {
        super(maxsize);
        // TODO Auto-generated constructor stub
    }
    public static void main(String[] args) throws Exception {
        Practice02 p2=new Practice02(5);
        p2.insert(0, 89);
        p2.insert(1, 93);
        p2.insert(2, 92);
        p2.insert(3, 90);
        p2.insert(4, 100);
        int a=p2.indexOf(90);
        if(a==-1) {
            System.out.println("順序表中不存在成績為90的學生!");
        }
        else {
            System.out.println("順序表中成績為90的數據元素的位置為:"+a);  //3
        }
    }
}

 

數據結構(Java版)ch2 線性表的順序存儲(順序表)

 

2019-04-06    17:51:34    房廷飛        加油!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM