关于数据链表详解(内有注释+示例代码)
作者:互联网
关于单链表的创建,遍历,插入(头插法)
- 单链表就是结构体变量与结构体变量链接(通过结构体指针链接到一起)到一起.
- 我们先来创建一个静态链表初步了解一下链表结构:
#include<'iostream>
using namespace std;
//单链表节点组成=指针域+数据域
struct List
{
int data; //定义数据域
struct List* next; //定义指针域
};
int main()
{
//创建静态链表
struct List List1 = { 1,NULL };
struct List List2 = { 2,NULL };
struct List List3 = { 3,NULL };
//创建完成后如图1所示
//链接链表
List1.next = &List2;
List2.next = &List3;
getchar();
return 0;
}
图一(链表最初的样子,没有链接之前,可能指向空):
图二(链接以后的样子):
- 动态创建一个链表=动态内存申请+模块化设计
- 一个数据链表因该具备如下功能:
- 创建链表(创建一个表头表示整个链表)
- 创建节点
- 插入节点
- 删除节点
- 遍历链表
首先我们要知道一点,结构体指针如何转变为一个结构体变量:
结构体指针---->结构体变量=动态内存申请
看下面示例代码(结合图理解):
#include<iostream>
using namespace std;
//单链表节点组成=指针域+数据域
struct List
{
int data; //定义数据域
struct List* next; //定义指针域
};
struct List* createList()
{
//动态内存申请,结构体指针-->结构体变量,head_1成为一个结构体变量
struct List* head_1 = (struct List*)malloc(sizeof(struct List));
//初始化
head_1->next = NULL;
return head_1;
}
//创建新的节点
struct List* Node(int data)
{
struct List* newNode = (struct List*)malloc(sizeof(struct List));
//初始化(变量使用前需要初始化)
newNode->data = data;
newNode->next = NULL;
return newNode;
}
//打印单链表
void Show(struct List* head)
{
struct List* ptr = head->next; //ptr指向打印起始位置
while (ptr)
{
cout << ptr->data; //输出节点中数据
ptr=ptr->next; //打印完成指向下一个节点
}
}
//头插法,插入节点,参数:插入那个链表,插入节点的数据是多少
void InitNode(struct List* headNode, int data)
{
//创建插入节点
struct List* newNode = Node(data);
newNode->next = headNode->next; //新节点的next指向下一个节点的next
headNode->next = newNode; //原来表头的下一个指向新的节点
}
//删除节点,参数:删除那个节点,删除的数据是位置
void delNode(struct List* headNode,int delData)
{
struct List* delNode = headNode->next;
struct List* delNode_1 = headNode;
if (delNode == NULL)
{
cout << "链表为空!\n";
}
else
{
while (delNode->data != delData)//参照图理解
{
delNode_1 = delNode;
delNode = delNode_1->next;
if (delNode == NULL) //找到表尾
{
cout << "没有找到相关数据\n";
return;
}
}
delNode_1->next = delNode->next;
free(delNode);
}
}
int main()
{
struct List* list_1 = createList(); //创建一个头表示整个链表
InitNode(list_1, 1); //头插法插入数据
InitNode(list_1, 2);
InitNode(list_1, 3);
cout << "遍历链表:(delete数据之前):" << endl;
Show(list_1);
//因为是头插法,所以打印3,2,1
cout <<endl<<endl<< "删除数据之后:" << endl;
delNode(list_1, 2);
Show(list_1);
getchar();
return 0;
}
1.遍历数据图
2.插入节点辅助理解图
3.删除节点辅助理解图
注:本文参考至哔哩哔哩up主"c语言基础"教学视频,想听老师讲解的可去哔哩哔哩搜索此ID.(侵删)
声明:写该文章仅作为自己的笔记和参考,如有不对的地方还请各位大佬不吝赐教,感谢.
标签:struct,数据链,delNode,示例,List,next,链表,详解,节点 来源: https://blog.csdn.net/qq_46282869/article/details/121554730