链表

顺序表和链表

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--;
	}	
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值