双向链表

双向链表是一种链表结构,每个结点包含指向前驱和后继的指针,便于双向遍历。在双向链表中,插入操作根据位置不同分为头插法、中间插入和尾插法,涉及结点间双层逻辑关系的建立。
摘要由CSDN通过智能技术生成

双向链表

双向链表

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。下图为双向链表的结构图。
双向链表

/* 单链表的结构 */
struct List{
   
	int data;				//  数据域
	struct List *next;			//  指针域 
};

/* 双向链表的结构 */
typedef struct List{
   
	int data;			// 	数据域
	struct List *next;		//  向后的指针
	struct List *front;		//  向前的指针
};

typedef struct List* pElem;
typedef struct List eElem;

注:1.在单链表中,由于每个结点只指向下一个节点,所以我们只能通过头结点遍历链表。但是双向链表的每个结点既有指向下一个结点的指针,也有指向上一个结点的指针,所以我们要遍历双向链表可以通过其头结点,也可以通过其尾结点。
2.当我们要找的结点靠近头结点的时候,我们可以从头结点开始遍历;当我们要找的结点靠近尾结点的时候,我们可以从尾结点开始遍历。从而提高执行效率。

- 双向链表的创建(创建单链表结点类似)

pElem CreatList(){
   
	pElem head = (pElem)malloc( sizeof(eElem) );
	assert( head != NULL );		//  包含于标准库<assert.h>
	head->next = head->front = NULL;		//  初始化链表,指针置空
	return head;
}

-双向链表的插入
在单向链表的头插法中,最主要的语句自然就是tmp->next = head->next, 而在双向链表中,自然也是一样,只不过多了连接一个向前的指针而已。

void InsertElem( pElem head , int data )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值