《重生到现代之从零开始的数据结构生活》——单链表

单链表

和顺序表不同,单链表是物理结构上非连续,非顺序的储存结构,但是在逻辑上是连续的。通过指针来实现

他的结构是怎么样的呢?为什么说它是物理结构上非连续呢

c 复制代码
struct slist{
   int val;//储存的数值
   struct slist *next;//下一个结点的指针
};

那么结点是什么呢

和顺序表不一样,单链表里面的空间都是独立申请下来的,我们称这一个个独立的空间叫结点

所以就是说,单链表中有两个组成部分:单链表中储存的值,还有指向下一个结点的指针

所以大家应该知道为什么单链表是逻辑上是连续的,但是物理结构上不连续

头插

一个单链表会有怎么头插

头插就是在链表的头上插一个数据

但是单链表的数据在物理结构上不连续,那么我们怎么实现呢

我们写一个粗糙的模拟代码(没有考虑NULL)

c 复制代码
#include<stdio.h>
#include<stdlib.h>
typedef struct list list;
struct list {
	int val;
	struct list* next;
}; //定义一个结构体

list* buymem(int x)
{
	list* a = (list*)malloc(sizeof(list));
	a->val = x;
	a->next = NULL;
	return a;

}//创建内存


void listprint(list* a)
{
	while (a->next)
	{
		printf("%d->", a->val);
		a = a->next;
	}

	printf("NULL\n");
}//打印单链表

list* headinsert(list** pphead,int x)//因为要更改实参,所以用双重指针
{ 
	list*b=buymem(x);
	b->next = *pphead;
	list* newhead = b;
	return newhead;


}//!!!!!!头插
int main() {

	list * list1 = (list*)malloc(sizeof(list));
	list * list2 = (list*)malloc(sizeof(list));
	list * list3 = (list*)malloc(sizeof(list));
	list * list4 = (list*)malloc(sizeof(list));

	list1->val = 1;
	list2->val = 2;
	list3->val = 3;
	list4->val = 4;

	list1->next = list2;
	list2->next = list3;
	list3->next = list4;
	list4->next = NULL;

	listprint(list1);
	list * head=headinsert(&list1,3);
	listprint(head);
	

	return 0;

思路就是创造一个新节点,让他的next指针指向原来的头节点,这样就能联系到一起啦

尾删

就是删除末尾的一个结点

我们要做的有:将倒数第二个结点的next指针指向NULL,然后将最后一个动态空间返还

所以我们来

c 复制代码
void * lastdel(list ** pphead) {
	assert(pphead && *pphead);
	if ((*pphead)->next==NULL)
	{
		free(*pphead);
		*pphead = NULL;
	}
	list* pcur = NULL;
	list* ptail = *pphead;
	while (ptail->next)
	{
		pcur = ptail;
		ptail = ptail->next;
	}
	free(ptail);
	
	ptail = pcur;
	ptail->next = NULL;
	
}//尾删

今天的知识讲解完啦,如果觉得有用可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有问题欢迎指出,我们一起进步!!!
祝看到这里的人天天开心哦(笔芯)

相关推荐
H_z___20 分钟前
Codeforces Round 1070 (Div. 2) A~D F
数据结构·算法
网易独家音乐人Mike Zhou39 分钟前
【嵌入式模块芯片开发】LP87524电源PMIC芯片配置流程,给雷达供电的延时上电时序及API函数
c语言·stm32·单片机·51单片机·嵌入式·电源·毫米波雷达
小立爱学习1 小时前
ARM64 指令 --- CASP / CASPA / CASPL / CASPAL
linux·c语言
武汉唯众智创1 小时前
职业院校C语言程序设计(AIGC版)课程教学解决方案
c语言·开发语言·aigc·程序设计·c语言程序设计·c语言程序设计实训室
qq_401700412 小时前
C语言void*
c语言·开发语言
程芯带你刷C语言简单算法题2 小时前
Day28~实现strlen、strcpy、strncpy、strcat、strncat
c语言·c++·算法·c
如竟没有火炬2 小时前
四数相加贰——哈希表
数据结构·python·算法·leetcode·散列表
仰泳的熊猫3 小时前
1148 Werewolf - Simple Version
数据结构·c++·算法·pat考试
不穿格子的程序员3 小时前
从零开始学算法——链表篇3:合并两个有序链表 + 两数相加
数据结构·算法·链表·dummy
子一!!3 小时前
数据结构==LRU Cache ==
数据结构