线性表的链式存储实现
线性表链式存储特点:不要求逻辑上相邻的两个元素物理上也相邻;通过“链”建立起来数据元素之间的逻辑关系。
- 插入、删除等操作不需要移动数据元素 ,只需要修改“链”。
线性表的链式存储实现:
线性表:
//工具指针是用来指向操作的节点或者帮助完成操作。
public class Link_1 {
int length;//记录长度
Node head;
public Link_1(Node n) {
this.length=1;
this.head=n;
}//构造函数,建立一个表
public boolean decide(int n){
return (n>0)&&(n<=this.length+1);
}//判断操作的位置是否过界
public void Insert(int n,int data) {
if(!this.decide(n)) {
System.out.println("超出边界I");
return ;
}//判断是否过界
Node node=new Node(data);
Node linshi=new Node(0);
Node flag_2=this.head;
Node flag_1 = null;
//创建指针,作为工具
if(n==1) {
linshi=node;
node=this.head;
this.head=linshi;
this.head.next=node;
}//如果操作位置为第一个节点
else {
for(int i=1;i<n;i++) {
flag_1=flag_2;
flag_2=flag_2.next;
}
flag_1.next=node;
node.next=flag_2;
}//操作位置不是第一个节点
this.length++;//记录长度加1
}//插入操作
public void delete(int n) {
if(!this.decide(n)) {
System.out.println("超出边界d");
return ;
}//判断是否越界
Node linshi=new Node(0);
Node flag_2=this.head;
Node flag_1=null;
//建立工具指针
if(n==1) {
this.head=this.head.next;
}//如果操作位置是1
else {
for(int i=1;i<n;i++) {
flag_1=flag_2;
flag_2=flag_2.next;
}
flag_1.next=flag_2;
}//操作位置不是1
this.length--;//删除操作结束后,记录的长度减1
}//删除操作
public void Print() {
Node flag=this.head;
while(!(flag.next==null)) {
System.out.println("打印结果:"+flag.data);
flag=flag.next;
}//打印操作
}
}
节点:
public class Node {
int data;
Node next;
public Node(int Data) {
this.data=Data;
this.next=null;
}
}