顺序表是基于数组的线性表。在java中基本的数组问题:数组的长度是固定的,声明后只能存放固定的长度的数值,而顺序表是动态数组可以根据数据的大小来调整数组的大小。
import java.util.Arrays;
public class MyArray {
private int[]data;
private int size;
public MyArray(){
data=new int[10];
}
public MyArray(int cap){
data=new int[cap];
}
//判断是否已满
private void full(){
if (size==data.length){
System.err.println("full");
}
}
//扩容
private void grow(){
int[] newdata= Arrays.copyOf(this.data,data.length<<1);
this.data=newdata;
}
//中间插入
public void addIndex(int index,int val){
if (size==data.length){
grow();
}
if (index<0||index>size){
System.err.println("err");
return;
}else {
for (int i = size - 1; i >= index; i--) {
data[i+1] = data[i];
}
}
data[index]=val;
size++;
}
public void addFist(int val){
addIndex(0,val);
}
public void addlast(int val){
addIndex(size,val);
}
public String toString(){
String ret="[";
for (int i = 0; i <size; i++) {
ret+=data[i];
if (i!=size-1){
ret+=",";
}
}
ret+="]";
return ret;
}
public int getByvalue(int value){
for (int i = 0; i <size ; i++) {
if (data[i]==value){
return i;
}
}
return -1;
}
//删除
public void removeIndex(int index){
if (index<0||index>size){
System.err.println("err");
return;
}
for (int i = index; i <size ; i++) {
data[i]=data[i+1];
}
size--;
data[size]=0;
}
public void removeValueOnce(int value){
for (int i = 0; i < size; i++) {
if (data[i]==value){
removeIndex(i);
return;
}
}
}
public void removeAllValue(int value){
for (int i = 0; i <size ; i++) {
while(i!=size&&data[i]==value){
removeIndex(i);
}
}
}
public void removeFist(){
removeIndex(0);
}
public void removeLast(){
removeIndex(size-1);
}
}
public class test {
public static void main(String[] args) {
MyArray myArray=new MyArray(3);
myArray.addlast(1);
myArray.addlast(2);
myArray.addlast(3);
System.out.println(myArray);
myArray.addIndex(2,4);
System.out.println(myArray);
myArray.removeIndex(2);
System.out.println(myArray);
}
}