一.带头结点的非循环双向链表L。
非空表。
空表:
空表条件:
L->priorL->next=NULL;
.带头结点的双向循环链表L。
非空表:
空表:
空表条件:
L->nextL->prior=L.
双向链表的结点描述:
```typedef struct DuLNode{
ElemType data;//数据域
struct DuLNode*prior;//前驱指针域。
struct DuLNode*next;//后继指针域。
}DuLNode,*DuLinkList //DuLNode结点类型名,DuLinkList 指向结点的指针类型名。
*结点构造。
三个域的访问形式:
p->prior;
p->data;
p->next;
二.不带头结点的非循环双向链表。
非空表。
空表.
条件:LNULL;
三.不带头结点的双向循环链表L
非空表.
空表.
条件:LNULL.
四.双向链表的操作。
1.插入操作。
主要操作步骤。
- 查询插入位置的前驱结点。
- 产生新结点。
- 修改链。
- s->>next=p->next;
- p->next=s;
- s->next->prior=s;
- s->prior=p;
删除操作
主要步骤
1 查询被删结点的前驱结点ai-1;
2. 修改链
3.释放被删结点空间。
s=p->next;//记录被删结点
p->next=s->next;
s->next->prior=p;
free(s);//释放结点空间。
五.循环单链表。
1.带头结点的循环单链表L
空表
空表条件:
L->nextNUll;
**2.不带头结点的循环单链表L。
**
空表条件:LNULL。