顺序表:是用一段物理地址连续的存储单元依次存储数据元素的线性结构。它的空间是连续的。
下面以数组存储的形式实现顺序表(增删查改)数组
private int[] data = new int[10]; private int size = 0; // size 表示当前数组中有多少个有效元素 public void display() { //打印顺序表 System.out.print("["); //以数组的形式输出 for (int i = 0; i < size; i++) { System.out.print(data[i]); if(i != size - 1) { System.out.print(","); } } System.out.println("]"); }
public void add(int pos, int elem) { //elem表示插入的元素 if(pos > data.length || pos < 0) { return; } if(size > data.length) { //超出范围 realloc(); //须要扩容 } if(pos == size) { data[pos] = elem; size++; } else { for(int i = size; i > pos; i--) { data[i] = data[i - 1]; } data[pos] = elem; size++; } }
附扩容的方法:ide
public void realloc( ) { //对数组扩容 int[] newData = new int[this.data.length * 2]; for(int i = 0; i < this.data.length; i++) { newData[i] = this.data[i]; } this.data = newData; }
public boolean contains(int toFind) { for(int i = 0; i < this.size; i++) { if(this.data[i] == toFind) { return true; } } return false; }
public int search(int toFind) { for(int i = 0; i < this.size; i++) { if(this.data[i] == toFind) { return i; } } return -1; }
public int getPos(int pos) { return this.data[pos]; }
public void setPos(int pos, int value) { this.data[pos] = value; }
public void remove(int toRemove) { int pos = search(toRemove);//对关键字进行查找 if(pos == -1){ return; } if(pos == this.size - 1) { this.size--; return; } for (int i = pos; i < this.size; i++) { this.data[i - 1] = this.data[i]; } this.size--; }
public int size() { return this.size; }
public void clear() { this.size = 0; this.data = new int[10]; }