顺序表和链表
1.顺序表存储
是什么:通过给定一定大小的连续存储空间,来存储数据.
常用的是数组.
//创建一个String数组
String[] str = new String[100];
//获得长度
int n = str.length;
//获得数据
String str0 = str[12];
有下标, 给了它一个标记, 我们可以通过下标, 比较方便的找到相对应的数据.
但是又由于长度固定, 使得我们想要再,插入或删除一个数据会比较麻烦.—这会导致数据长度发生变化, 就想一个100人的队伍,中间有一个离开,后面的人都需要向前移动一位, 这样会增加成本.
所以它便于查找数据 , 而难以修改数据.
2:队列 -----先进先出,后进后出.
3:链表----- 节点
链表长度是不固定的. 当你需要时才会分配存储空间.
如果把数据看作天上的星星的话,链表就是线, 你可以依次将它们连接, 添加,只要相应的擦到对应的线,再连接前后的线,比较方便.
链表比较适合修改数据,确不太方便查询数据
//节点类
public class Node
{
public Object data; //数据
public Node next; //指向的节点
Node()
{
}
Node(Object st)
{
this.data = st;
this.next = null;
}
}
有一个构造函数–当你需要的时候,创建一个存储了相应数据,且指向为空的节点.
//我用的是头插法
public class Node_link {
private Node root; //根节点
private Node last; //尾节点
private int size; //节点数
//添加
public void add(Object st)
{
//如果节点为空,添加一个节点这个节点即是root也是last
if(root == null)
{
root = new Node(st);
last = root;
}
//创建一个current节点,last指向current.
//第二次,因为开始last既是根节点又是root,所以root(last)->current,然后last和current为同一个节点,root - > current(last).
第三次 root ->current0 ->current1(last)
else
{
Node current = new Node(st);
last.next = current;
last = current;
}
size++;
}
//获取位数
public int getSize()
{
return size;
}
//查找
public Node get(int i)
{
if(root == null)
{
System.out.println("空");
return null;
}
else
{
Node s = root;
Node current = new Node();
if(i == 1)
{
current = root;
}
for(int j = 2; j <= i;j++)
{
//System.out.println(current.data);
current = s.next;
s = current;
}
return current;
}
}
//插入
//利用查找到插入点的, 前一个或者后一个节点, 完成插入 ,注意size++
public void insert(Object st,int i)
{
Node insert = new Node(st);
Node a = get(i-1);
Node b = get(i);
a.next = insert;
insert.next = b;
size++;
}
//改
public void change(Object st,int i)
{
Node insert = new Node(st);
Node a = get(i-1);
Node b = get(i+1);
a.next = insert;
insert.next = b;
}
//删除
public void delete(int i)
{
Node a = get(i-1);
Node b = get(i+1);
a.next = b;
size--;
}
}