5、线性表的链式存储结构(双链表)

本文介绍了线性表的链式存储结构——双链表,它允许从前后两个方向遍历。双链表的操作包括初始化、求长度、头尾插入、删除、打印、查找和销毁等。通过示例代码展示了双链表的各种实现。
摘要由CSDN通过智能技术生成

 对于双链表中,由于每个结点既包含一个指向后继结点的指针,又包含这个指向前驱结点的指针,所有访问一个结点既可以依次向后访问每一个结点,又可以依次向前访问每一个结点。
 双链表有些运算的算法与单链表相应的算法是相同的,主要的是双链表的插入和删除操作与单链表有所区别。可以参考单链表的算法实现。
在这里插入图片描述
双链表的实现:
1.声明双链表类型

typedef int ElemType;
typedef struct DNode
{
   
	ElemType data;			//存放元素值
	struct DNode * prior;	//指向前驱结点
	struct DNode * next;	//指向后继结点
} DLinkNode;				//双链表的结点类型

2.初始化双链表

void InitInitList(DLinkNode * &L)
{
   
	L = (DLinkNode*)malloc(sizeof(DLinkNode));
	L->prior = NULL;
	L->next = NULL;
}
**判断双链表是否为空**
bool ListEmpty(DLinkNode * L)
{
   
	return (L->next == NULL);
}

3.求双链表的长度

int ListLength(DLinkNode * L)
{
   
	int n = 0;
	DLinkNode * p = L;
	while (p->next != NULL)
	{
   
		n++;
		p = p->next;
	}
	return n;
}

4.头插法创建双链表

void CreateListF(DLinkNode * &L, ElemType a[], int n)
{
   
	DLinkNode * s;
	L = (DLinkNode*)malloc(sizeof(DLinkNode));		//创建头节点
	L->prior = L->next = NULL;						//前后指针域置为NULL
	for (int i = 0; i < n; i++)						//循环建立数据结点s
	{
   
		s = (DLinkNode*)malloc(sizeof(DLinkNode));	//创建结点s
		s->data =</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值