双链表

双链表用的较少,就不写出程序了,简单的说一下插入删除操作。

typedef struct DNode{
 ElemType data;
 struct DNode *prior,*next;
}DNode,*DLinkList;

关于插入操作:
例如:结点s要插入到p的后面
先链接s与p后面的一串
s->next=p->next;
s->next->prior=p;
再链接p与s之间的链
p->next=s;
s->prior=p;

上面的四个操作不能胡乱的换位置,其根本原因是在改变指针指向
的先后顺序是有要求的,如果先进行了不当的改变会导致以后找不到刚才
的指针了。
对于这种情况,建议应该先找到p的后继指针
q=p->next;//q用来保存p的原来的后继,这样在后面指针操作不管怎么链接,这个p和q始终指着必需的元素
s->next=q;
s=q->prior
p->next=s;
s->prior=p;
这样这四个操作就可以轮换了,而且思路简单一点

关于删除操作:
例如:删除p结点后面的结点,容易一点
q=p->next;
p->next=q->next;
q->next->prior=p;
free(q);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值