线性表的链式表示——双链表

定义

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表(解决了单链表只能从头结点依次访问顺序向后遍历的问题)
双链表中结点的类型表述如下:

typedef struct DNode{				//定义双链表结点类型
	EleType data;					//数据域
	struct DNode *prior,*next;		//前驱和后继指针
}DNode,*DLlinklist;

双链表的逻辑结构图:
在这里插入图片描述

双链表上基本操作

1、插入操作
在双链表中p所指结点之前插入结点*s,其指针变化如下图:
在这里插入图片描述
插入操作的代码片段如下:

s->next = p->next;			//将结点*s插入到结点*p之后
p->next->prior = s;
s->prior = p;
p->next = s;

【注】上述代码的语句顺序不唯一,但也不是任意的;如第一,二句必须在第四句之前。
2、删除操作
删除双链表中结点*p,其指针的变化过程如下图:
在这里插入图片描述
删除操作的片段代码如下:

p->next = q;
q->next =->prior = p;
free(q);						//释放结点空间

【注】a为p结点,b为q结点

发布了10 篇原创文章 · 获赞 10 · 访问量 4000

猜你喜欢

转载自blog.csdn.net/weixin_44480968/article/details/104436326