线性表
- 线性表需要相同的数据类型
- 线性表的处理方式都是先取代,后目的。比如删除链式线性表的某个节点的流程,先取代
delete point
使它的前驱节点指向它的后继节点,这样就完成了取代。然后再free()
掉这个节点,这样就达到了目的。再比如加入某个节点,先使add point
指向add index
要加入处的后继节点,这即取代。然后再使add index
的前驱节点指向add point
。
解题步骤:
- 先考虑特殊情况,边缘值
- 进入退出循环时需要找准条件,考虑清楚退出循环时所需要的变量的终值是多少,方便使用
- 审视全局,带正确的值判断是否AC
线性表的操作
线性表
public class ArrayList_ {
/**
* 线性表最大容量
*/
private static final int MAX_SIZE = 100;
/**
* 线性表value容器
*/
public int[] arraylist = new int[MAX_SIZE];
/**
* 线性表当前长度
*/
public int arrayListLength;
}
获取链表中的第index个元素
/**
* 获取链表中的第index个元素
*
* @param arrayList_
* @param index
* @return
*/
public static int get(ArrayList_ arrayList_, int index) {
if (arrayList_.arrayListLength == 0 || index > MAX_SIZE || index < 1) {
return 0;
}
return arrayList_.arraylist[index - 1];
}
在第index的位置插入元素value
/**
* 在第index的位置插入元素value
*
* @param arrayList_
* @param index
* @param value
* @return
*/
public static int insert(ArrayList_ arrayList_, int index, int value) {
if (arrayList_.arrayListLength >= MAX_SIZE || index > arrayList_.arrayListLength || index < 1) {
return 0;
}
if (index <= arrayList_.arrayListLength) {
// 插入到表已有元素中
// 从线性表的最后一个元素到当前插入挤出的元素,依次向后移一位
for (int i = arrayList_.arrayListLength - 1; i >= index - 1; i--) {
arrayList_.arraylist[i + 1] = arrayList_.arraylist[i];
}
}
arrayList_.arraylist[index - 1] = value;
arrayList_.arrayListLength++;
return 1;
}
删除单链表第index个的元素
/**
* 删除单链表第index个的元素
*
* @param arrayList_
* @param index
* @return 返回删除的元素的value
*/
public static int remove(ArrayList_ arrayList_, int index) {
if (index > arrayList_.arrayListLength || index < 1 || arrayList_.arrayListLength == 0) {
return 0;
}
// 删除的元素不在线性表尾
if (index < arrayList_.arrayListLength) {
// 后续的值往前顶
for (int i = index - 1; i < arrayList_.arrayListLength - 1; i++) {
arrayList_.arraylist[i] = arrayList_.arraylist[i + 1];
}
}
arrayList_.arrayListLength--;
return 1;
}
很基础,没什么难度,全程闭着眼写,嘿嘿