今天还是继续java的数据结构,对于顺序表的基本操作:增删查。
1.查找
利用for循环进行遍历查找,找的到返回到元素的位置,找不到的返回-1。
public int indexOf(int paraValue) {
int tempPosition = -1;
//先将变量设置为-1
for (int i = 0; i < length; i++) {
if (data[i] == paraValue) {
tempPosition = i;//元素位置
break;//找到元素,跳出循环
}
}
return tempPosition;//返回值
}
2.插入
要判断两种情况:(1)是否顺序表已经存满了;(2)是否待插入位置不在我们的顺序表范围内;
要做出对应的判断,增强代码的健壮性。
函数中设置了两个参数:待插入位置 和 元素值。
输入值正确的情况下,从尾向头遍历找到待插入位置,并把其后每一个元素向后移动一个单位长度;最后把长度+1。因为队首位置记为0,所以队尾处位置为length-1。
//插入
public boolean insert(int paraPosition, int paraValue) {
if (length == MAX_LENGTH) {
System.out.println("List full.");
return false;
} // 当顺序表长度达到最大长度,表示表满不能再插入
if ((paraPosition < 0) || (paraPosition > length)) {
System.out.println("The position " + paraPosition + " is out of bounds.");
return false;
} // 当输入的插入位置,大于最大长度或小于0,报错
for (int i = length; i > paraPosition; i--) {
data[i] = data[i - 1];
} // 从表尾开始遍历查找,并将所有元素依次后移一个单位长度
data[paraPosition] = paraValue;
length++;//在待插入位置插入,并将表长+1
return true;
}
3. 删除
写函数,输入参数:删除元素的位置(实际上在物理上是待删除元素后一个元素的位置)。
先判断参数是否在顺序表范围内,不在就警告。再利用for循环遍历,从待删除元素后一个元素的位置开始,依次向前覆盖。最后将表长-1。
//删
public boolean delete(int paraPosition) {
if ((paraPosition < 0) || (paraPosition >= length)) {
System.out.println("The position " + paraPosition + " is out of bounds.");
return false;
} // 不在元素范围内时,警告超出范围
// 从头到尾的遍历
for (int i = paraPosition; i < length - 1; i++) {
data[i] = data[i + 1];//从删除元素位置开始依次向前覆盖
}
length--;//将顺序表长度-1
return true;
}
下面是对上面写的函数的调用以及验证。
public static void main(String args[]) {
int[] tempArray = {2,4,6,8};
SequentialList tempFirstList = new SequentialList(tempArray);
System.out.println("Initialized, the list is: " + tempFirstList.toString());
System.out.println("Again, the list is: " + tempFirstList);
tempFirstList.reset();//调用reset方法
System.out.println("After reset, the list is: " + tempFirstList);
int tempValue = 4;
int tempPosition = tempFirstList.indexOf(tempValue);
System.out.println("The position of " + tempValue + " is " + tempPosition);
tempValue = 5;
tempPosition = tempFirstList.indexOf(tempValue);
System.out.println("The position of " + tempValue + " is " + tempPosition);
tempPosition = 2;
tempValue = 5;
tempFirstList.insert(tempPosition, tempValue);
System.out.println(
"After inserting " + tempValue + " to position " + tempPosition + ", the list is: " + tempFirstList);
tempPosition = 8;
tempValue = 10;
tempFirstList.insert(tempPosition, tempValue);
System.out.println(
"After inserting " + tempValue + " to position " + tempPosition + ", the list is: " + tempFirstList);
tempPosition = 3;
tempFirstList.delete(tempPosition);
System.out.println("After deleting data at position " + tempPosition + ", the list is: " + tempFirstList);
for (int i = 0; i < 8; i++) {
tempFirstList.insert(i, i);
System.out.println("After inserting " + i + " to position " + i + ", the list is: " + tempFirstList);
} // Of for i
tempFirstList.reset();
System.out.println("After reset, the list is: " + tempFirstList);
}// Of main
其结果为:
顺序表的基本操作告一段落。后续更新链表、堆栈、队列、图、树。