数据结构之单链表(二)

单链表的结构操作

1遍历链表并打印

/*********************************************************
********
函数名:headLinkList_print
功 能:遍历链表,并打印每个节点的数据域
参 数:无
返回值:操作的成功或失败
**********************************************************
*******/
BOOL headLinkList_print(headLinkList* h)
{
if (h == NULL)
{
printf("[Line %d] %s 传入地址为NULL!\n", __LINE__,
__FUNCTION__);
return FALSE;
}
//让p指向首个数据节点,然后重复:打印当前节点,再访问到下一个节
点
for (struct node* p = h->next; p != NULL; p = p->next)
{
printf("%d, ", p->data);
}
printf("\n");
return TRUE;
}

插入节点

1**. 头插法**
新节点插入到头节点的后面
在这里插入图片描述

/*********************************************************
********
函数名:headLinkList_insertHead
功 能:在链表的头部插入数据节点(新节点位于头节点的后面)
参 数:headLinkList* h 链表的头指针(指向头节点)
elemType data 新节点的数据域
返回值:操作的成功或失败
**********************************************************
*******/
BOOL headLinkList_insertHead(headLinkList* h, elemType
data)
{
struct node* p; //指向新插入的节点
if (h == NULL)
{
printf("[Line %d] %s 传入地址为NULL!\n", __LINE__,
__FUNCTION__);
return FALSE;
}
//为新节点申请堆区空间
p = malloc(sizeof(struct node));
if (p == NULL)
{
printf("[Line %d] %s 内存不足!\n", __LINE__,
__FUNCTION__);
return FALSE;
}
//立刻对新节点空间赋值
p->data = data;
p->next = NULL;
//处理新节点的插入
p->next = h->next; //让新插入的节点能够访问头节点原来存储的
下一个节点的地址
h->next = p; //让头节点能够访问新插入的节点
h->length += 1; //记录节点数量+1
return TRUE;
}

2. 尾插法
在这里插入图片描述

/*********************************************************
********
函数名:headLinkList_insertTail
功 能:在链表的尾部插入数据节点
参 数:无
返回值:链表结构的地址
时 间:2023-12-14
**********************************************************
*******/
BOOL headLinkList_insertTail(headLinkList* h, elemType
data)
{
struct node* p = NULL; //指向新插入的节点
struct node* q = NULL;
if (h == NULL)
{
printf("[Line %d] %s 传入地址为NULL!\n", __LINE__,
__FUNCTION__);
return FALSE;
}
//为新节点申请堆区空间
p = malloc(sizeof(struct node));
if (p == NULL)
{
printf("[Line %d] %s 内存不足!\n", __LINE__,
__FUNCTION__);
return FALSE;
}
//立刻对新节点空间赋值
p->data = data;
p->next = NULL;
//定位到插入前原链表的最后节点
q = h;
for (; q->next != NULL; q = q->next);
//实现两个节点的链式关系
p->next = q->next; //可省
q->next = p;
//数据节点个数+1
h->length += 1;
return TRUE;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值