双链表的原理及其代码实现

双链表是普通链表的一种进阶表达形式,本文将详细的介绍双链表的原理,结构,以及一系列操作的c/c++代码实现

双链表的原理

双链表的一般形式是由若干个结构体通过指针相互连接,从而形成可以前后访问的数据结构。

双链表一般由表头和表身组成(部分双链表可能有表尾),表头内记录的的数据一般为表身的长度,初始时为0。

双链表的操作主要有以下几种:

1.初始化

生成一个表头,将它的数据域初始化为0,指针域初始化为null,并返回它的地址。

2.头插

将一个数据插入表头和第一段表身之间(如果链表不为空)。

3.尾插

将一个数据接入到链表的最后。

4.删除

从链表中取出元素,并将该元素的前后元素通过指针重新连接。

代码实现

结构体

typedef struct Node {
	int data;
	struct Node* next;
	struct Node* pre;
}Node;

其中data为数据域,可以为其他类型(本文中统一为int)。

pre和next指针分别为前指针和后指针。

初始化

Node* initlist()
{
	Node* listhead = (Node*)malloc(sizeof(Node));
	listhead->data = 0;
	listhead->pre = NULL;
	listhead->next = NULL;
	return listhead;
}

头插法

void headinsert(Node* list, int data)
{
	Node* node = (Node*)malloc(sizeof(Node));
	node->data = data;
	node->next = list->next;
	node->pre = list;
	list->next = node;
    if(node->next!=NULL) 
    {
        node->next->pre = node; 
    }
	list->data++;
}

尾插法

void tailinsert(Node* list, int data)
{
	Node* node = (Node*)malloc(sizeof(Node));
	node->data = data;
	Node* l = list;
	while (l->next != NULL)
	{
		l = l->next;
	}
	node->next = NULL;
	node->pre = l;
	l->next = node; 
	list->data++;
}

删除

void listdelete(Node* list, int data)
{
	Node* l = list->next;
	while (l->next != NULL)
	{
		if (l->data == data)
		{
			l->pre->next = l->next;
			l->next->pre = l->pre;
			free(l);
			break;
		}
		l = l->next;
	}
	list->data--;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值