静态链表和动态链表的简单创建

静态链表和动态链表的简单创建,第1张

1.静态链表的创建

-节点的定义
使用结构体定义一个节点,数据成员有数据域,指针域

  • 数据域 - 用于维护当前节点的数据
  • 指针域 - 用于指向下一个节点的地址
struct LinkNode
{
	int data;//数据域
	struct LinkNode *next;//
};

-节点的创建

初始化并在栈区为节点分配空间

struct LinkNode node1 = {1,NULL};
struct LinkNode node2 = {2,NULL};
struct LinkNode node3 = {3,NULL};
struct LinkNode node4 = {4,NULL};

-节点之间建立关系,形成链表

node1.next = &node2;//node1节点指向node2节点
node2.next = &node3;//node2节点指向node3节点
node3.next = &node4;//node3节点指向node4节点

-链表的遍历

为了更好遍历链表中的所有节点,这里再定义一个新的节点用于指向第一个节点

struct LinkNode *pCurrent = &node1;//定义一个pCurrent指针指向链表的第一个节点
while(pCurrent != NULL)
{
	printf("%d\n",pCurrent->data);//输出当前节点的数据域
	pCurrent = PCurrent->next;//指向下一个节点
}
2.动态链表的创建

-节点的定义

使用结构体定义一个节点,数据成员有数据域,指针域

  • 数据域 - 用于维护当前节点的数据
  • 指针域 - 用于指向下一个节点的地址
struct LinkNode
{
	int data;//数据域,用于维护当前节点的数据
	struct LinkNode *next;//指针域,指向下一个节点
};

-节点的创建

使用malloc函数在堆区上为节点分配内存空间

struct LinkNode *node1 = malloc(sizeof(struct LinkNode));
struct LinkNode *node2 = malloc(sizeof(struct LinkNode));
struct LinkNode *node3 = malloc(sizeof(struct LinkNode));
struct LinkNode *node4 = malloc(sizeof(struct LinkNode));

给节点的数据域赋值

node1->data = 1;
node2->data = 2;
node3->data = 3;
node4->data = 4;

-节点之间建立关系,形成链表

node4为最后一个节点,指向NULL

node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = NULL;

-链表的遍历

为了更好遍历链表中的所有节点,这里再定义一个新的节点用于指向第一个节点

struct LinkNode *pCurrent = node1;//定义一个pCurrent指针指向链表的第一个节点
while(pCurrent != NULL)
{
	printf("%d\n",pCurrent->data);//输出当前节点的数据域
	pCurrent = PCurrent->next;//指向下一个节点
}

-链表的删除

由于该链表的节点是在堆区上分配内存,因此需使用free函数将链表中所有节点的内存空间释放掉才能完成对链表的删除。


free(node1);
free(node2);
free(node3);
free(node4);

为了避免野指针的出现,这里对节点进行赋值NULL

node1 = NULL;
node2 = NULL;
node3 = NULL;
node4 = NULL;

此外,链表的创建可分为带头节点和不带头节点两种,可参考这篇笔记带头节点的链表初始化及遍历

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/562774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存