線性表

RonChen發表於2024-08-05
import java.util.Arrays;

public class MyArraylist {
   int[] element;//陣列
   int size;//線性表實際大小
    public MyArraylist() {
        this.size=0;
        this.element=new int[4];
    }

    public MyArraylist(int capacity) {
        this.size=0;
        this.element=new int[capacity];
    }

    // 列印順序表
    public void display() {
        for (int i=0;i<this.size;i++){
            System.out.print(this.element[i]+" ");
        }
        System.out.println();
    }
    //線性表是否滿
    public boolean isFull() {
        if (this.size==this.element.length){
            return true;
        }
        return false;
    }
    //擴容
    public void resize( ) {
       this.element= Arrays.copyOf(this.element,2*this.element.length);
    }

    //在 pos 位置新增元素
    public void addPos(int pos, int data) {
       if (pos<0||pos>this.element.length-1){
           System.out.println("插入位置不合法");
           return;
       }
       if (isFull()){
           //System.out.println("線性表已滿");
           resize();
       }
       //pos位置後面的所有元素後移
        for (int i=this.size-1;i>=pos;i--){
            this.element[i+1]=this.element[i];
        }
        //插入元素
        this.element[pos]=data;
        this.size++;

    }
    //預設插入到陣列的最後
    public void addTail(int data) {
        if (isFull()){
            resize();
        }
        this.element[this.size]=data;
        this.size++;
    }

    // 判定是否包含某個元素
    public boolean contains(int toFind) {
        for (int i=0;i<this.size;i++){
            if (this.element[i]==toFind){
                return true;
            }
        }
        return false;
    }
    // 查詢某個元素對應的位置
    public int search(int toFind) {
        for (int i=0;i<this.size;i++) {
            if (this.element[i] == toFind) {
                return i;
            }
        }
        return -1;
    }

    // 獲取順序表長度
    public int size() {
       return this.size;
    }

    // 獲取 pos 位置的元素
    public int getPos(int pos) {
       if (pos<0||pos>this.size-1){
           System.out.println("查詢位置不合法");
       }
       return this.element[pos];
    }

    // 給 pos 位置的元素修改為 value
    public void setPos(int pos, int value) {
        if (pos<0||pos>this.size-1){
            System.out.println("修改位置不合法");
        }
        this.element[pos]=value;
    }

    //刪除第一次出現的關鍵字key
    public void remove(int key) {
            int index=search(key);
            for (int i=index;i<this.size;i++){
                this.element[i]=this.element[i+1];
            }
            this.size--;
    }
    // 清空順序表
    public void clear() {
        this.size=0;
    }
    public static void main(String[] args) {
        MyArraylist myArraylist=new MyArraylist(4);
        //指定位置插入元素
        myArraylist.addPos(0,10);
        myArraylist.addPos(1,20);
        myArraylist.addPos(2,30);
        //列印
        myArraylist.display();
        //尾插法
        myArraylist.addTail(40);
        myArraylist.display();
        myArraylist.addTail(50);
        myArraylist.display();
        myArraylist.addPos(2,60);
        myArraylist.display();
        //查詢元素
        int index=myArraylist.search(60);
        System.out.println("查詢元素的位置:"+index);
        //元素是否存在
        boolean bool=myArraylist.contains(60);
        System.out.println("查詢元素是否存在:"+bool);
        //獲取指定位置元素
        int val=myArraylist.getPos(2);
        System.out.println("獲取指定位置元素:"+val);
        //修改指定位置元素
        myArraylist.setPos(2,70);
        myArraylist.display();
        //線性表大小
        int size=myArraylist.size();
        System.out.println("線性表的大小:"+size);
        //刪除元素
        myArraylist.remove(70);
        myArraylist.display();
        //清空線性表
        myArraylist.clear();
        size=myArraylist.size();
        System.out.println("清空線性表後的大小:"+size);
        myArraylist.display();

    }

}
  • 測試用例
    在這裡插入圖片描述

相關文章