笔记——双向链表

双向链表:

在单链表的每个节点里再增加一个指向其直接前驱的指针域prior,形成双向的链表。

定义:

typedef struct DuLNode{
Elemtype   data;
struct DuLNode  *prior,*next;
}DuLNode,*DuLinkList;

双向循环链表:

头结点的前驱节点指向链表的最后一个节点;
最后一个结点的后继指针指向头节点。
双向链表的对称性:
p->prior->next=p=p->next->prior

双向链表的插入:
void ListInsert_DuL(DuLinkList &L,Int i,Elemtype e){
//在带头结点的双向循环链表L中第i个位置之前插入元素e
   if(!(p=GetElemP_DuL(L,i)))//如果p不是指向第i个位置 return ERR;
   s=new DuLNode; s->data=e;
s->prior=p->prior;  p->prior->next=s;
s->next=p;  p->prior=s;
   return OK;
}//ListInsert_DuL
双向链表的删除
void ListDelete_DuL(DuLink &L,Int i,ElemType &e){
//删除带头结点的双向循环链表L的第i个元素,并用e返回
   if(!(p=GetElemP_DuL(L,i)))//如果p不是指向第i个位置 return ERR;
   e=p->data;
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
return OK;
}//ListDelete_DuL

存储密度=节点数据本身占用的空间/节点占用的空间总量
顺序表的存储密度为1;链表的存储密度<1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值