笔记——双向链表

双向链表:

在单链表的每个节点里再增加一个指向其直接前驱的指针域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.

你可能感兴趣的:(笔记,#,数据结构及算法基础)