双向链表(数据结构C语言)

本文详细解析了双链表的数据结构及其操作实现,包括插入、删除等关键函数,对比了NextElem与PriorElem的时间复杂度,同时展示了双链表如何通过两个指针域实现前后节点的快速访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在双链表中,NextElem 的函数执行时间为O(1),而 PriorElem 的执行时间为O(n) 所以定义了双链表的概念

双链表的存储结构为的代码实现

//2020.7.26 飞飞飞  双向链表的存储结构
typedef struct DuLNode{
	ElemType data ;
	struct DuLNode *prior ;
	struct DuLNode *next ;
}DuLNode, * DuLinkList;

双向链表中有两个指针域,分别为直接前驱和直接后继

我们可以用一段代码来简单表示一下特性

d -> next -> prior = d -> prior -> next = d ;

双向链表中的在第i个结点前插入元素 和 删除第i个结点的代可以表示为

//2020.7.26 飞飞飞 双向链表的第i 个结点的插入和删除函数实现
Status LinkInsert_DuL(DuLinkList &L , int i , ElemType &e){
	if(! (p = GetElemP_DuL(L , i)) return ERROR ;
	if(!(s = (DuLinkList)malloc (sizeof(DuLNode)))) return ERROR ;
	s -> data = e ;
	s -> prior = p -> prior ;
	s -> next = p ;
	p -> prior -> next = s ;
	p -> prior = s ;
	return OK ; 
	} 
	
Status LinkDelete_DuL(DulinkList &L , int i , ElemType e){
    if(! (p = GetElemP_DuL(L , i)) return ERROR ;
    e = p -> data ;
    p -> prior -> next = p -> next ;
	p -> next -> prior = p -> prior ;
	frer (p);
	return OK ;
}

补充一下单链表的组合(运用较多的函数)

 //2020.7.26 飞飞飞 两个递增单链表的组合成一个递增单链表
 Status MergeList_L(LinkList &LA , LinkList& LB ,LnkList &LC , int (* compare)(ElemType ElemType)){
    if(! InitList LC) return ERROR ;
    //首先用指针指向两个单链表的头节点
	ha = GetHead (LA); hb = GetHead (LB) ;
	//定义用于比较两个元素大小的指针 
	pa = NextPos (LA, ha) ;
	pb = NextPos (LB , hb) ;
	while(pa && pb){
		a = GetCurElem (pa) ;
		b = GetCurElem (pb) ;
		if(* compare(a ,b) < 0){
			//a < b 
			DelFirst (ha , p) ; //删除hb头结点的第一个结点,并以p 返回
			Append (LC , p) ;   //放到LC链表中 
			pa = NextPos (LA ,ha) ; //pa指针指向新的第一个结点 
		}
		else
		{
			//a >= b
			DelFirst (hb p) ;
			Append (LC , p) ;
			pb = NextPos (LB , hb) ;
		}
	}
	if(pa) Append(LC ,pa) ;
	else Append (LC ,pb) ;
	FreeNode(ha) ;
	FreeNode(hb) ;
	return OK ; 
 } 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值