<pre name="code" class="java"><span style="font-size:24px;">package chao;
public class staticTest {
StaticNode[] link = null;
int MAX = 100;
int length = 0;// 链表长度
public static void main(String[] args) {
staticTest test = new staticTest();
test.initLink();
test.addInLast("100");
test.addInLast("99");
test.addInLast("100");
test.addInLast("99");
test.printLink();
test.addInLast("end");
test.printLink();
test.insertInPosition(1, "2");
test.printLink();
test.addInLast("end");
test.printLink();
test.insertInPosition(1, "222");
test.printLink();
System.out.println(test.deleteFirst());
test.printLink();
System.out.println(test.deleteLast());
test.printLink();
System.out.println(test.deleteInPosition(3));
test.printLink();
System.out.println(test.getNodeDataInPosition(1));
}
public void addInFirst(String str) {// 添加节点作为链表头结点
if (length >= MAX - 2)
return;
int index = link[0].cur;
link[index].data = str;
link[0].cur = link[index].cur;
link[index].cur = link[MAX - 1].cur;
link[MAX - 1].cur = index;
length++;
}
/**
*
* @param string
*/
public void addInLast(String string) {// 顺序从前到后添加元素,即在最后位置添加节点
if (length >= MAX - 2)
return;
int index = link[0].cur;
link[index].data = string;
link[0].cur = link[index].cur;
link[index].cur = 0;
if (length == 0) {
link[MAX - 1].cur = index;
} else {
link[getNodeIndexInPosition(length)].cur = index;
}
length++;
}
private void initLink() {// 初始化静态链表
link = new StaticNode[MAX];
for (int i = 0; i < MAX; i++) {
link[i] = new StaticNode();
link[i].cur = i + 1;
}
}
private void printLink() {// 打印链表
int now = link[MAX - 1].cur;
for (int i = 0; i < length; i++) {
System.out.print(link[now].data + " ");
now = link[now].cur;
}
System.out.println();
}
private void insertInPosition(int position, String str) {// 在position位置插入元素str
if (length >= MAX - 2)
return;
if (position < 1 || position > length + 1)
return;
if (position == length + 1) {// 在末尾插入元素
addInLast(str);
return;
}
if (position == 1) {// 在头插入元素
addInFirst(str);
return;
}
int pos = link[MAX - 1].cur;// 在中间位置入元素
for (int i = 1; i < position - 1; i++)
pos = link[pos].cur;
int index = link[0].cur;
link[0].cur = link[index].cur;
link[index].data = str;
link[index].cur = link[pos].cur;
link[pos].cur = index;
length++;
}
private String deleteInPosition(int position) {// 任意删除元素
if (position < 1 || position > length + 1)
return "error";
if (position == length + 1) {
return deleteLast();
}
if (position == 1) {
return deleteFirst();
}
int zhe = getNodeIndexInPosition(position);
int qian = getNodeIndexInPosition(position - 1);
link[qian].cur = link[zhe].cur;
link[zhe].cur = link[0].cur;
link[0].cur = zhe;
length--;
return link[zhe].data;
}
public int getNodeIndexInPosition(int position) {// 得到在position位置的下标
if (position < 1 || position > length)
return -1;
int now = link[MAX - 1].cur;
for (int i = 0; i < position - 1; i++) {
now = link[now].cur;
}
return now;
}
public String getNodeDataInPosition(int position) {// 得到在position位置的数据data
if (position < 1 || position > length)
return "error";
int now = link[MAX - 1].cur;
for (int i = 0; i < position - 1; i++) {
now = link[now].cur;
}
return link[now].data;
}
public String deleteFirst() {// 删除头结点
int index = link[MAX - 1].cur;
link[MAX - 1].cur = link[index].cur;
link[index].cur = link[0].cur;
link[0].cur = index;
length--;
return link[index].data;
}
public String deleteLast() {// 删除尾节点
int index = getNodeIndexInPosition(length - 1);
int last = getNodeIndexInPosition(length);
link[index].cur = 0;
link[last].cur = link[0].cur;
link[0].cur = last;
length--;
return link[last].data;
}
}</span>