链表带有头结点。
0.定义结点
typedef struct DNode{
ElemType data;
struct DNode *prior, *next;
}DNode, *DLinkList;
1.初始化
bool InitDLinkList(DLinkList &L){
L = (DNode *)malloc(sizeof(DNode));\
//内存不足,分配失败
if( L == NULL)
return false;
L -> prior = NULL;
L -> next = NULL;
return true;
}
2.判空
bool Empty(DLinkList L){
if(L -> next == NULL)
return true;
else
return false;
}
3.插入
在结点p后插入结点s
bool InsertNextDNode(DNode *p, DNode *s){
if(p == NULL || s == NULL)
return false;
s -> next = p -> next;//①
if(p -> next != NULL)
p -> next -> prior = s;//②
s -> prior = p;//③
p -> next = s;//④
return true;
//语句顺序不唯一,但①和②必须在④之前,否则p结点的next指针会丢失
}
4.删除
删除p结点的后继节点
bool DeleteNextDNode(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;
}
5.销毁
void DestoryList(DLinkList &L){
while( L -> next != NULL)
DeleteNextDNode(L);
free(L);
L = NULL;
}