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.
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.
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; }
Apabila memasukkan elemen ke dalam senarai jujukan, elemen mesti disimpan di hadapan yang dimasukkan kedudukan
//在 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; }
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; } }
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!