C++课程总结——链表

本文介绍了链表的基本概念,通过侦探游戏的例子解释链表结构。链表包括单向列表和循环列表,其优点在于高效地进行插入和删除操作。与数组相比,链表在需要频繁变动元素位置时能显著提升效率。文章还展示了具体的删除和插入代码示例。
摘要由CSDN通过智能技术生成

链表

  • 什么是链表?

  • 举个例子,玩侦探游戏,首先给你一个线索,钥匙,这又指向下一个线索——你必须找到一个锁,找到锁以后,又指向下一个线索——锁是为了锁什么东西……最后找到出口,可以简单看成下图。

  • 在这里插入图片描述

  • 由此可见列表是由一个结构体数组组成的,有两个成员——1,value指这个节点本来存的值.2,next表示指向下一个节点的地址,这两个叫做数据域指针域,单项列表最开头为"head"指向第一个节点的value,最后一个结点的next为"NULL"——空地址,链表结束,但也有循环列表最后节点指向第一个节点。

  • 链表定义

struct node
{
	int value;//每个结点存的值
	int next;//下一个节点的地址
}a[10000];//里面是链表的长度

比如(循环列表)
在这里插入图片描述

还有(单向列表)
在这里插入图片描述

  • 这个列表表示的是”6,7,5,8.
    那就有问题,一个普通的数组也可以完成这个工作,为什么还要用更复杂的链表。

  • 那就说到链表的优点,学数组时有一道"操作数组"——完成数组的插入,删除,等工作。思路是在应插入的位置以后,数均往后移动一位,腾出位置让数进入数组,删除也一样,直接让应该删除后面的数均往前移动一位。这样的话,效率非常的慢。但链表在插入,删除,可比数组好用太多了。

  • 比如,我要删掉第二个结点,就只需要把结点1next的值变成结点2next的值。
    如图
    在这里插入图片描述

  • 没有指向结点2的指针,从头遍历一遍,第二个结点就被删除了,这个链表就变成了6,5,8,空间复杂度仅为o(1),节省大量时间;

  • 插入也是同理
    如图在这里插入图片描述

  • 删除代码

a[m-1].next=a[m].next;//删除结点m;
  • 插入代码
n++;//n为链表结点个数++是为了再开一个链表存将要插入的value和next
a[n].value=mn;//mn为要插入的数,存入新结点的value;
a[n].next=a[m].next;//在m后面插入新结点,这里让新结点的next指向了原m+1的value
a[m].next=a[n-1].next;//让m的next指向n;
  • 遍历代码
int t=1;
for(int i=1;i<=n;i++)//输出n次
	{
		cout<<a[t].value;//输出数字域
		t=a[t].next;//指针往下一个指
	}
  • 以上就是关于链表简单的几种操作,关于链表一般不要用,当题目需要插入,删除时再用,因为链表比线性表多了指针域,空间要大很多。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值