脚本宝典收集整理的这篇文章主要介绍了数据结构之双链表(数组模拟)(Java),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
import java.util.*;
class Main {
static int[] e = new int[100010];
static int[] l = new int[100010];
static int[] r = new int[100010];
static int idx;
static Scanner in = new Scanner(System.in);
// 0:左端点 1:右端点
static void init(){
r[0] = 1;
l[1] = 0;
idx = 2;
}
// 只要实现,在第k个插入的数右边插入的函数,其他的插入就可以借用这个函数了。
static void insert(int k, int x) {
e[idx] = x;
r[idx] = r[k];
l[idx] = k;
// 以下两句顺序不能颠倒,在修改r[k]之前,使用r[k]
l[r[k]] = idx;
r[k] = idx ++ ;
}
// 删除第k个插入的数
static void delete(int k) {
// 第k个插入的数的右边的节点的左指针 -> 第k个插入的数的左边的节点
l[r[k]] = l[k];
// 第k个插入的数的左边的节点的右指针 -> 第k个插入的数的右边的节点
r[l[k]] = r[k];
}
public static void main(String[] args) {
init();
int m = in.nextInt();
while (m -- > 0) {
String str = in.next();
int k;
int x;
if (str.equals("IL")) {
k = in.nextInt();
x = in.nextInt();
insert(l[k + 1], x);// 区别于单链表 k + 1(因为idx初始为2)
} else if (str.equals("IR")) {
k = in.nextInt();
x = in.nextInt();
insert(k + 1, x);
} else if (str.equals("L")) {
x = in.nextInt();
insert(0, x);
} else if (str.equals("R")) {
x = in.nextInt();
insert(l[1], x);
} else {
k = in.nextInt();
delete(k + 1);
}
}
// 循环遍历,输出数值
for (int i = r[0]; i != 1; i = r[i]) {
System.out.print(e[i] + " ");
}
}
}
以上是脚本宝典为你收集整理的数据结构之双链表(数组模拟)(Java)全部内容,希望文章能够帮你解决数据结构之双链表(数组模拟)(Java)所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。