package chailong;
import java.util.Scanner;
class Pointt
{
int data; //数据域
int cur; //下标域
public Pointt()
{
this.data=-1;
this.cur=-1;
}
}
public class Staticlinklist{
static Pointt[] list2=new Pointt[100]; //设置静态链表的容量为100
static int m=0; //用来记录现在静态链表中的元素个数
public static void Create() //初始化静态链表
{
for(int i=0;i<list2.length;i++)
{
list2[i]=new Pointt();
if(i==list2.length-1)
{
list2[i].cur=0;
}
else
list2[i].cur=i+1;
}
}
public static void insert() //用来向静态链表中添加数据
{
Scanner in=new Scanner(System.in);
System.out.print("请输入你要插入数据的数目:");
int c=in.nextInt();
while(c>=99-m)
{
System.out.print("输入数据超过容量请重新输入:");
c=in.nextInt();
}
m+=c;
for(int i=1;i<=c;i++)
{
System.out.print("请输入你要插入的数据:");
int a=in.nextInt(); //获得用户输入的数据
list2[list2[0].cur].data=a;
list2[0].cur=list2[list2[0].cur].cur;
}
}
public static void Delete() //用来删除链表中的数据
{
System.out.println("请输入你要删除第几个元素:");
Scanner in=new Scanner(System.in);
int a=in.nextInt();
if(a>m)
{
System.out.println("你的输入超过数组元素的个数");
return;
}
else
{
list2[a-1].cur=list2[a].cur;
list2[a].cur=list2[0].cur;
list2[0].cur=a;
m--;
}
}
public static void DropTable() //删除整表操作
{
Pointt re,re2; //定义两个记录指针
re=list2[1];
while(re.cur!=0) //当指针域为空指针说明整个链表也就删除完了
{
re2=list2[re.cur];
re.cur=Integer.MAX_VALUE; //在java中堆中的一块内存若没有再被引用(即可以理解为游离的)则会被Java的垃圾回收机制给回收掉
re=re2;
m--;
}
list2[0].cur=1;
}
public static void Traverse() { //用来遍历静态链表的所有元素信息
System.out.print("静态链表的结构为:");
int k=1;
System.out.print("|"+list2[0].data+" "+list2[0].cur+" |");
for(int i=1;i<=m;i++)
{
System.out.print("|"+list2[k].data+","+list2[k].cur+" |");
k=list2[k].cur;
}
System.out.println();
}
public static void main(String[] args)
{
Staticlinklist.Create();
Staticlinklist.insert();
Staticlinklist.Traverse();
Staticlinklist.Delete();
Staticlinklist.Traverse();
Staticlinklist.DropTable();
Staticlinklist.Traverse();
}
}