数据结构-基础算法系列——单链表

本文介绍了单链表的基本概念,包括其顺序搜索而非随机存取的特性,易于拓展空间的优势,以及存储密度较低的缺点。讨论了链表适用于数据元素数量不确定和频繁增删元素的场景。文章还提到了单链表的两种类型——带头结点和不带头结点,以及头结点在操作中的作用。最后,鼓励读者通过思考数据结构的演变来选择合适的数据结构。
摘要由CSDN通过智能技术生成

对链表在上一篇博客中也有介绍一些,链表就是在主存里是分散的,不要求连续的空间。这也就导致了链表为了能够找到下一个数据元素,就必须在每个数据元素中增加一个指针指向下一个数据元素,就好像每个人手里都要抓一只信鸽,才能找到下一个人,远隔千里,也可以用这只信鸽找到下一个人。

以上的一些描述也就使得链表拥有以下特性:
1、只能顺序搜索不能随机存取。因为那些数据元素不是放在一起的,而是很分散的,并不像我们在编程中使用的那样,要小心被迷惑。实际上只是编程语言封装好了,所以我们用起来好像链表和顺序表没什么区别一样。(缺点)
2、可以很容易的拓展空间,只要主存中有空闲空间就可以增加,而不需要像顺序表那样,需要一整块的连续空间。(优点)
3、因为指针,所以存储密度比顺序表更低。例子,每个人手里都要多抓一只鸽子,体重肯定很重。(缺点)
4、可以很轻易的增加和删除元素,只要告诉鸽子换一个人就行了。人不需要移动。(优点)

综上所述,链表的适用场所就是:
1、数据元素数量不确定。
2、经常增加和删除链表中的元素。

链表也有很多种类型,最普通的单链表,和因为各种需求而产生的双链表,循环链表,循环双链表。
其实大家通过思考一个问题可以得到一些思路,就是为什么会产生顺序表?,有了顺序表又为什么会产生链表,其他的数据结构也可以如此思考,就会更清楚什么时候应该使用什么数据结构。

单链表有两种类型:
1、带头结点
2、不带头结点
所谓头结点就是一个空数据的一个首部结点,增加了这个结点之后,在对单链表的一些操作上可以统一。
在没有这个头结点的情况下,单链表插入和删除结点的时候,对头元素的操作与中间元素的操作有所不同,我们编程的时候,也要单独为头元素写一些代码。(头结点是头结点,和头元素不同,头元素和中间元素一样,都存有数据,头结点则没有存元素)

单链表实现如下:

public class LinkList
{
   

     public class LinkNode
     {
   
         public LinkNode next = null;
         public int data;
         public LinkNode()
         {
   }
         public LinkNode(int data)
         {
   
             this.data = data;
         }
         
     }
     public static void main(String[] args)
     {
   
         //创建带头结点的链表
         LinkNode head = new LinkNode();
         LinkNode p=head;
         for(int i = 0; i < 10 ; i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

细水长流cpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值