双向链表的C语言实现与基本操作(二)

本文详细介绍了如何使用C语言实现双向链表,并讲解了链表结点的添加、删除、更改和查询这四个基本操作。通过全局id管理结点,确保唯一性,提供相应操作的函数实现及测试代码。
摘要由CSDN通过智能技术生成

本文的主要内容目录:

一、链表结点元素的添加

二、链表结点元素的删除

三、链表结点元素的更改

四、链表结点元素的查询


在上一篇博文中已经对双向链表的实现做了比较详细地阐述,在一篇文章来说一说双向链表的四个基本操作:增、删、改、查。在讲基本操作之前,再来看看链表结点元素的结构体的实现,它是整个数据结构的核心。

/* 定义一个表示链表的结构体指针 */
struct list {
	int id;			/* 标识这个元素方便查找 */
	char data[20];		/* 链表中包含的元素 */
	struct list *next;	/* 指向下一个结点的指针 */
	struct list *prev;	/* 指向前一个结点的指针 */
};

一、链表结点元素的添加

本文所实现的链表结点元素的添加是在链表尾部来添加结点元素的,当然读者也可以根据对我实现的这个函数进行修改,使其可以在任何指定的位置添加元素。

算法的具体实现函数如下:

/**	将指定元素插入到聊表尾部
  * 	head	: 表示要插入元素的链表的头部的地址
  *	list    : 表示要插入到链表中的元素
  */
static void list_add(struct list **head, struct list *list)
{
	struct list *temp;

	/* 判断链表是否为空 */
	if(NULL == *head)
	{
		/* 为空 */
		*head = list;
		(*head)->next = NULL;
		(*head)->prev = NULL;
	}
	else
	{
		/* 不为空 */
		temp = *head;
		while(temp)
		{
			/* 将新结点插入到链表尾部 */
			if(NULL == temp->next)
			{
				temp->next = list;
				list->next = NULL;
				list->prev = temp;
				return;
			}
			temp = temp->next;
		}
	}
}
先判断链表是否为空,如果为空直接返回NULL,否者对链表进行遍历找到链表的尾部,然后将要插入的结点元素插入到链表尾部,具体实现参考上面这个函数。

进行结点元素的添加测试,在main函数中添加如下代码:

/* 定义一个临时的链表结点元素 */
	struct list temp_list;

/* 对临时定义的结点元素进行赋值并加入到链表当中 */
temp_list.id = list_id++;
sprintf(temp_list.data, "temp_list node!");
list_add(&list_head, &temp_list);

/* 从头部遍历链表,把链表中每个元素的信息都打印出来 */
list_print_head(&list_head);
编译运行结果如下:



二、链表结点元素的删除

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值