单向链表Single-List(SList)

理解

链表,顾名思义就是像链子一样的结构,这种结构就像自行车的车链子一样,一环扣一环,觉得短了,随便找个地方拆开,新加一个环进去,这就延长了,哪一个地方需要被修改找到之后直接换掉,非常方便

链表是针对数组的缺点所创造出来的,数组中间插个数,要么全部后移,要么前移,反正数组不好从中间新长个空间,数组的头上插个数也不方便

。。。

链表可以完美的解决以上的问题

在数据结构中数组也叫顺序表一篇文章搞懂顺序表SL(SeqList)-CSDN博客

概念:

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。

请添加图片描述

对,这是单链表,也就是单向链表

单链表的每个节点,有俩元素:也就是上面的大框,大框里面有俩小框

  • 一个是存值的

  • 一个是指针,是指向下一个节点的

单链表的实现

也就是节点的定义(SListNode)

typedef int SListDataType;

typedef struct SListNode
{
   
	SListDataType x;
	SListNode* next;
}SListNode;

申请一个新的节点

SListNode* BuySListNode(SListDataType x)
{
   
	SListNode* newNode = (SListNode*)malloc(sizeof(SListNode));
	if (newNode == NULL)
	{
   
		perror("BuySListNode");
		exit(-1);
	}
	newNode->x = x;
	newNode->next = NULL;
	return newNode;
}

这个函数的作用就是,给它一个值,它会将值放进去放到它申请的空间newNode的x里面去,再把newNode指向的空间置为NULL

尾插

void SListPushBack(SListNode**pphead,SListDataType x)
{
   
	if (*pphead == NULL)
	{
   
		*pphead = BuySListNode(x);
		return;
	}
	else
	{
   
		SListNode* tail = *pphead;
		while (tail->next != NULL)
		{
   
			tail = tail->next;
		}
		tail->next = BuySListNode(x);
		return;
	}
}

尾插的两种情况:

  • 无节点 直接新建就行
  • 有节点 找结尾去

分这俩情况就是因为tail->next会不会越界访问

打印单链表

void SListPrint(SListNode** pphead)
{
   
	SListNode* tail = *pphead;
	
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值