1)双链表的定义
typedef struct DNode{
int data;
DNode * next,* prior;
}DNode,*DLinkList;
bool InitList(DLinkList &L)
{
L=(DNode *)malloc(sizeof(DNode));
if(L==NULL)
return false;
L->next=NULL;
L->prior=NULL;
return true;
}
bool Empty(DLinkList &L)
{
return(L->next==NULL);
}2)双链表的插入
bool ListInsert(DNode * p,DNode * s)
{
if(p==NULL||s==NULL) return false;
s->next=p->next; //1
if(p->next!=NULL)
p->next->prior=s; //2
s->prior=p; //3
p->next=s; //4 1,2必须在4前
return true;
}这是指定结点的后插操作,按位序插入只需要设置尾指针,依次进行后插操作即可;前插操作只需要找到一个结点的前继结点,对其进行后插操作即可。
3)双链表的删除
bool ListDelete(DNode * p) //删除指定结点的后继节点
{
if(p==NULL) return false;
DNode * q=p->next;
if(q==NULL) return false;
p->next=q->next;
if(q->next!=NULL) q->next->prior=p;
free(q);
return true;
}销毁一个双链表
void DestroyList(DLinkList &L)
{
while(L->next!=NULL) ListDelete(L);
free(L); //释放头结点
L->next=NULL; //头指针置空
}4)双链表的遍历
//后向遍历
while(p!=NULL)
{
//...
p=p->next;
}
//前向遍历
while(p->pror!=NULL) //跳过了头结点
{
//...
p=p->prior;
}
京公网安备 11010502036488号