Rumah  >  Artikel  >  Java  >  Bagaimana untuk melaksanakan struktur data jadual berjujukan menggunakan Java?

Bagaimana untuk melaksanakan struktur data jadual berjujukan menggunakan Java?

WBOY
WBOYke hadapan
2023-04-21 14:31:081709semak imbas

    Prakata

    Senarai linear ialah urutan terhingga bagi n elemen data dengan ciri yang sama. Jadual linear ialah struktur data yang digunakan secara meluas dalam amalan Jadual linear biasa ialah: senarai berjujukan, senarai terpaut, tindanan, baris gilir, rentetan... Senarai linear secara logiknya ialah struktur linear, iaitu garis lurus berterusan. Walau bagaimanapun, struktur fizikal tidak semestinya berterusan Apabila jadual linear disimpan secara fizikal, ia biasanya disimpan dalam bentuk tatasusunan dan struktur terpaut.

    Bagaimana untuk melaksanakan struktur data jadual berjujukan menggunakan Java?

    1. Jadual jujukan

    1.1 Apakah itu jadual jujukan

    Jadual jujukan menyimpan data secara berjujukan menggunakan unit storan dengan berterusan alamat fizikal Struktur linear elemen biasanya disimpan dalam tatasusunan. Lengkapkan penambahan, pemadaman, penyemakan dan pengubahsuaian data pada tatasusunan.

    sebenarnya ialah tatasusunan. Kemudian mengapa anda perlu menulis jadual jujukan, bukankah lebih baik menggunakan tatasusunan sahaja? Perbezaannya ialah menulisnya dalam kelas boleh berorientasikan objek.

    Jadual jujukan secara amnya boleh dibahagikan kepada:

    • Jadual jujukan statik: Gunakan tatasusunan panjang tetap untuk menyimpan

    • Dinamik jadual jujukan: Gunakan storan tatasusunan yang dibuka secara dinamik

    Jadual jujukan statik sesuai untuk senario yang anda tahu berapa banyak data yang perlu disimpan.

    Susun atur panjang tetap bagi jadual jujukan statik menyebabkan N menjadi tetap besar, membuka terlalu banyak ruang adalah satu pembaziran, membuka terlalu sedikit tidak mencukupi.

    Sebaliknya, jadual jujukan dinamik lebih fleksibel, memperuntukkan saiz ruang secara dinamik mengikut keperluan.

    2. Pelaksanaan ringkas jadual jujukan

    2.1 Buat jadual jujukan

    public class MyArrayList {
       public int[] elem;//数组
       public int usedSize;//数据的有效个数
     
       public MyArrayList(){
           this.elem = new int[10];
       }
    }

    Bagaimana untuk melaksanakan struktur data jadual berjujukan menggunakan Java?

    2.2 Cetak jadual jujukan

    //打印顺序表
    public void display(){
            for (int i = 0; i < this.usedSize; i++) {
                System.out.print(this.elem[i] + " ");
            }
            System.out.println();
        }

    2.3 Dapatkan panjang jadual jujukan

    //获取顺序表长度
        public int size(){
            return this.usedSize;
       }

    2.4 Tambah elemen pada kedudukan pos

    Apabila memasukkan elemen ke dalam senarai jujukan, elemen mesti disimpan di hadapan yang dimasukkan kedudukan

    Bagaimana untuk melaksanakan struktur data jadual berjujukan menggunakan Java?

    //在 pos 位置新填元素
        public void add(int pos,int data){
            if(pos < 0 || pos >usedSize){
                System.out.println("pos 位置不合法!");
                return;
            }
            if(isfull()) {
                Arrays.copyOf(this.elem,2*this.elem.length);
            }
            for (int i = this.usedSize - 1; i >= pos; i--) {
                this.elem[i + 1] = this.elem[i];
            }
            this.elem[pos] = data;
            this.usedSize++;
        }
        //判断是否满
        public boolean isfull(){
            return this.usedSize == this.elem.length;
        }

    2.5 Tentukan sama ada elemen tertentu dimasukkan

    //判断是否包含某个元素
    public boolean contains(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return true;
                }
            }
            return false;
        }

    2.6 Cari kedudukan yang sepadan dengan elemen

    //查找某个元素的对应位置,找不到返回-1
        public int search(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return i;
                }
            }
            return -1;
        }

    2.7 Dapatkan elemen pada kedudukan pos

    //获取pos位置的值
        public int getPos(int pos){
            if(pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return -1;//这里说明一下,业务上的处理,不考虑
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return -1;
            }
            return this.elem[pos];
        }
        public boolean isEmpty(){
            return this.usedSize == 0;
        }

    2.8 Tetapkan elemen pada kedudukan pos kepada nilai

     //给pos位置元素更新value
        public void setPos(int pos,int value){
            if (pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return;
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            this.elem[pos] = value;
        }

    2.9 Padamkan elemen yang ingin anda padamkan

    //删除第一次出现的关键字key
        public void remove(int toRmove){
            if (isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            int index = search(toRmove);
            if(index == -1){
                System.out.println("没有你要删除的数字!");
                return;
            }
            for (int i = index; i < this.usedSize - 1; i++) {
                this.elem[i] = this.elem[i+1];
            }
            this.usedSize--;
            //this.elem[useSize] = null;如果数组当中是引用数据类型
        }

    2.10 Kosongkan jadual jujukan

    //清空顺序表
        public void clear(){
            this.usedSize = 0;
        }

    3. MyArrayList.java

    import java.util.Arrays;
    
    public class MyArrayList {
    
        public int[] elem;
        public int usedSize;
    
        public MyArrayList(){
            this.elem = new int[10];
        }
        //打印顺序表
        public void display(){
            for (int i = 0; i < this.usedSize; i++) {
                System.out.print(this.elem[i] + " ");
            }
            System.out.println();
        }
        //获取顺序表长度
        public int size(){
            return this.usedSize;
        }
        //在 pos 位置新填元素
        public void add(int pos,int data){
            if(pos < 0 || pos >usedSize){
                System.out.println("pos 位置不合法!");
                return;
            }
            if(isfull()) {
                Arrays.copyOf(this.elem,2*this.elem.length);
            }
            for (int i = this.usedSize - 1; i >= pos; i--) {
                this.elem[i + 1] = this.elem[i];
            }
            this.elem[pos] = data;
            this.usedSize++;
        }
        //判断是否满
        public boolean isfull(){
            return this.usedSize == this.elem.length;
        }
    
        //判断是否包含某个元素
        public boolean contains(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return true;
                }
            }
            return false;
        }
        //查找某个元素的对应位置,找不到返回-1
        public int search(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return i;
                }
            }
            return -1;
        }
    
        //获取pos位置的值
        public int getPos(int pos){
            if(pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return -1;//这里说明一下,业务上的处理,不考虑
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return -1;
            }
            return this.elem[pos];
        }
        public boolean isEmpty(){
            return this.usedSize == 0;
        }
        //给pos位置元素更新value
        public void setPos(int pos,int value){
            if (pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return;
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            this.elem[pos] = value;
        }
    
        //删除第一次出现的关键字key
        public void remove(int toRmove){
            if (isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            int index = search(toRmove);
            if(index == -1){
                System.out.println("没有你要删除的数字!");
                return;
            }
            for (int i = index; i < this.usedSize - 1; i++) {
                this.elem[i] = this.elem[i+1];
            }
            this.usedSize--;
            //this.elem[useSize] = null;如果数组当中是引用数据类型
        }
        //清空顺序表
        public void clear(){
            this.usedSize = 0;
        }
    }

    Uji.java

    public class Test {
        public static void main(String[] args) {
            MyArrayList myArrayList = new MyArrayList();
            myArrayList.add(0,1);
            myArrayList.add(1,2);
            myArrayList.add(2,3);
            myArrayList.add(3,4);
            myArrayList.add(4,5);
            myArrayList.display();
            System.out.println(myArrayList.contains(3));
            System.out.println(myArrayList.getPos(3));
            myArrayList.setPos(0,99);
            myArrayList.display();
        }
    }

    Atas ialah kandungan terperinci Bagaimana untuk melaksanakan struktur data jadual berjujukan menggunakan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam