数据结构--单链表

一.单链表的设计

1.单链表的结构定义:

typedef struct Node{
int data;//数据域
struct Node* next;//后继指针
}Node,*List;

2.单链表的设计示意图:
3.注意:

单链表的最后一个节点的next域为NULL;

4.为什么要有一个头节点?

简单方便,不用传二级指针;

二.单链表的实现

cpp 复制代码
//初始化
}


//考试重点
//删除第一个val的值
bool DelVal(List plist, int val)
{
	Node* p = GetPrio(plist, val);
	if (p == NULL)
		return false;
	Node* q = p->next;
	//删除q
	p->next = q->next;//p->next=p->next->next;
	//释放q
	free(q);

	return true;
}

//返回key的前驱地址,如果不存在返回NULL;
Node* GetPrio(List plist, int key)
{
	for (Node* p = plist; p->next != NULL; p = p->next)
	{
		if (p->next->data == key)
			return p;
	}
	return NULL;
}

//返回key的后继地址,如果不存在返回NULL;
Node* GetNext(List plist, int key)
{
	assert(plist != NULL);
	if (plist == NULL)
		return NULL;

	Node* p = Search(plist, key);
	if (p == NULL)
		return NULL;

	return p->next;
}

//输出
void Show(List plist)
{
	//注意,头节点不能访问data
	for (Node* p = plist->next; p != NULL; p = p->next)
	{
		printf("%d ", p->data);
	}
	printf("\n");
}

//清空数据
void Clear(List plist)
{
	Destroy(plist);
}

void Destroy(List plist)
{
	//总是删除第一个数据节点
	Node* p;
	while (plist->next != NULL)
	{
		p = plist->next;
		plist->next = p->next;
		free(p);

		//error
		//plist->next = plist->next->next;
		//free(plist->next);
	}
}

三.单链表的总结

1.单链表的特点:

头插,头删 时间复杂度是O(1)

尾插,尾删 时间复杂度是O(n)

2.P初始化成什么?

如果我们要修改表的结构(或者说依赖于前驱,比如插入,删除):遍历:

cpp 复制代码
for(Node *p=plist;p->next!=NULL;p=p->next)

如果我们不修改表的结构(或者说不依赖于前驱, 比如求长度,打印,查找) :遍历:

cpp 复制代码
for (Node* p = plist->next; p != NULL; p = p->next)
3.注意考点:

头插,尾插,按值删除;

相关推荐
疋瓞13 小时前
python和C++对比(1)_数据类型和数据结构
数据结构·c++·python
如此这般英俊14 小时前
手搓Claude Code-第六章 subagent
数据结构·人工智能·python·语言模型·自然语言处理
Tairitsu_H16 小时前
[LC优选算法#17] 链表 | 合并 K 个升序链表 | K个⼀组翻转链表
数据结构·算法·链表
zwenqiyu18 小时前
非线性字符串数据结构串讲
数据结构·c++·学习·算法
东华万里19 小时前
第32篇 数据结构入门 单链表的增删查改实现
数据结构·链表
OOJO21 小时前
哈希表实现
数据结构·哈希算法·散列表
剑挑星河月1 天前
234. 回文链表
java·数据结构·算法·leetcode·链表
六bring个六1 天前
链表学习(常规链表)
数据结构·学习·链表
tachibana22 天前
hot100 回文链表(234)
java·网络·数据结构·leetcode·链表
aaaameliaaa2 天前
进制练习题【找出只出现一次的数字、交换两个变量(不创建临时变量)、统计二进制中1的个数、打印整数二进制的奇数位和偶数位、求两个数二进制中不同位的个数】
c语言·数据结构·笔记·算法