线性表---双向循环链表

双向链表

双(向)链表中有两条方向不同的链,即每个结点中除next域存放后继结点地址外,还增加一个指向其直接前趋的指针域prior。
这里写图片描述

注意:

链表由头指针head惟一确定的。
带头结点的双链表的某些运算变得方便。
将头结点和尾结点链接起来,为双(向)循环链表。

双向链表的结点结构和形式描述

结点结构(见上图)

形式描述如下:

typedef char ElemType;
struct NodeType2
{ 
    ElemType data;
    NodeType2*next,*prior;
};
NodeType2*p,*q,*s; 

双向链表的前插和删除本结点操作

由于双链表的对称性,在双链表能能方便地完成各种插入、删除操作。

1、双链表的前插操作

这里写图片描述

代码:

{ 
    s->next=p;
    s->prior=p->prior;
    p->prior->next=s;
    p->prior==s;
}

2、 双链表上删除结点*p自身的操作

这里写图片描述

代码:

{ 
    p->prior->next=p->next
    p->next->prior=p->prior;
    free(p);
}

上述两个算法的时间复杂度均为O(1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值