基础知识:
- 线性表(linear list),是其组成元素间具有线性关系的一种线性结构。
- 线性表有
①顺序存储结构(sequential storage structure)
顺序存储结构可以简单的理解利用为 数组 的形式来进行保存数据。
②链式存储结构(chained storage structure)
链式存储结构中包括 单链表 和 双链表
注意:顺序数组必须保证逻辑关系(logical relationship)和存储关系(storage relationship)必须连续。
下面就介绍关于单链表的创建与输出方法:
package practice;
import java.util.*;
class Node //建一个链表类
{
public int data; //设置一个简单的内部元素
Node next;
//********新建链表*******
public static Node creat(int n)
{
Scanner input = new Scanner(System.in);
Node head = null, p = null, q = null; //头结点初始化
for(int i = 0; i < n; i++)
{
p = new Node(); //这一步很重要!为下一个结点申请新的空间,否则就会报空指针的错误!
p.data = input.nextInt();
if(head == null) head = p; //保证了头结点的内容不为空
else q.next = p; //向后延续
q = p;
}
q.next = null; //这一步也很重要,保证了最后一个结点的下个结点为null,以便其他方法的实现
input.close();
return head;
}
//********输出链表********
public static void put(Node head) //传入头结点
{
Node p = head;
while(p != null) //注意判断条件
{
System.out.print(p.data+" ");
p = p.next; //下一个结点
}
}
//******链表计数器*******
public static int length(Node head) //链表计数器的原理和输出链表一样
{
int l = 0;
Node p = head;
while(p != null)
{
l++;
p = p.next;
}
return l;
}
}
public class Line
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
//新建一个链表
System.out.println("请输入新建链表的长度");
int n = input.nextInt();
System.out.println("请输入链表中数据:");
Node head1 = Node.creat(n);
Node.put(head1);
System.out.println();
System.out.println("计算该链表的长度为:" + Node.length(head1));
input.close();
}
}
上述单链表的操作涉及到三个量,head,p,q
head 是作为链表的索引,一旦单链表在操作过程中head丢失,那么这个链表也就丢失了
p 通常用来执行下一个结点的相关操作(比如传入数据等)
q通常用来建立新节点与上一个结点的指向关系
具体的关系如下: