数据结构——单链表

1. 传作灵感

在学习数据结构的时候,如果不动手写代码,始终学不会,所以通过几个简单的函数,熟悉单链表,提升自己的代码能力。

2. 单链表的定义

cpp 复制代码
#include <iostream>
#include <string>
#include<stdlib.h>
#include<stdio.h>

using namespace std;  // 全局引入std命名空间

#define OK 1
#define ERR 0

//链表的定义
typedef struct Node
{
	char name[50];
	struct Node* next;
}node;

typedef node* Linklist;
typedef int Status;

3.读取链表中的元素

cpp 复制代码
//读取链表中的元素
Status GetElem(Linklist L, int i, char* e)
{
	int j;
	Linklist p;
	p = L->next;
	j = 1;
	while (p && j < i)
	{
		p = p->next;
		++j;
	}
	if (!p)
		return ERR;

	strcpy_s(e,50, p->name);

	return OK;
}

3. 插入一个节点

注意这里的参数,Linklist 本身已经是指向结构体的指针,这里使用的是Linklist * L,它是是一个二重指针。一维指针可以指向具体的变量,而在需要改变指针的指向的时候,则需要用二维指针。

cpp 复制代码
//插入一个节点
Status LinkInsertNode(Linklist * L, int i, const char* e)
{
	int j;
	Linklist p, s;
	p = *L;
	j = 1;
	while (p && j < i)
	{
		p = p->next;
		++j;

	}
	if (!p)
		return ERR;
	s = (Linklist)malloc(sizeof(node));

	strcpy_s(s->name, e);

	s ->next = p->next;
	p->next = s;
	return OK;


}

4. 删除一个节点

cpp 复制代码
//删除链表中的一个节点
Status LinkDeleteNode(Linklist* L, int i, char *e)
{
	int j = 1;
	Linklist p,q;
	p = *L;
	while (p && j < i)
	{
		p = p->next;
		++j;
	}
	if (!p)
		return ERR;

	q = p->next;
	p->next = q->next;

	strcpy_s(e, 50, q->name);
	free(q);

	return OK;



}

5. 清空链表

这里只是清空链表中的数据,但是保留了链表头

cpp 复制代码
//清空整个链表
Status ClearList(Linklist* L)
{
	Linklist p, q;
	p = (*L)->next;
	while (p)
	{
		q = p->next;
		free(p);
		p = q;
	}
	(*L)->next = NULL;
	return OK;
}

6. 调用实例

通过使用这几个函数,就可以熟悉链表的基本用法

cpp 复制代码
int main()
{
	Status Insertstatus;

	Linklist LL = (Linklist)malloc(sizeof(node));
	LL->next = NULL;

	// 插入3个节点
	LinkInsertNode(&LL, 1, "ZhangSan");
	LinkInsertNode(&LL, 2, "LiSi");
	LinkInsertNode(&LL, 3, "WangWu");
	LinkInsertNode(&LL, 4, "ZhaoLiu");

	// 读取第2个节点
	char buf[50];
	char buf1[50];
	if (GetElem(LL, 3, buf) == OK) {
		printf("第3个节点:%s\n", buf);  // 输出:LiSi
	}
	printf("删除节点之后!\n");

	LinkDeleteNode(&LL, 3, buf1);
	if (GetElem(LL, 3, buf) == OK) {
		printf("第3个节点:%s\n", buf);  // 输出:LiSi
	}


	return 0;
}
相关推荐
Irissgwe19 分钟前
数据结构-栈和队列
数据结构·c++·c·栈和队列
两片空白29 分钟前
数据容器集合set/frozenset
数据结构
代码中介商1 小时前
跳表:高效查找的链表黑科技
数据结构
SHARK_pssm3 小时前
【数据结构——树与堆】
c语言·数据结构·经验分享·笔记
RH2312114 小时前
2026.6.10 数据结构 二叉树
数据结构
CHHH_HHH5 小时前
【C++】哈希表原理与实战:从冲突解决到性能优化
开发语言·数据结构·c++·学习·算法·哈希算法·散列表
Irissgwe5 小时前
数据结构-排序
数据结构·算法·排序算法
青山木5 小时前
Hot 100 --- 滑动窗口最大值
java·数据结构·算法·leetcode·动态规划
青山木5 小时前
Hot 100 --- 除自身以外数组的乘积
java·数据结构·算法
彼岸星光ぐ>5 小时前
排序算法对比
数据结构·算法·排序算法