赞
踩
typedef struct DNode{
ElemType data;
struct DNode *prior, *next; // 前驱和后继指针
}DNode, *DLinklist;
bool InitDLinkList(DLinklist &L){
L = (DNode *) malloc(sizeof(DNode)); // 分配一个头节点
if(L == NULL)
return false;
L -> prior = NULL;
L -> next = NULL;
return true;
}
// 在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结点的后继结点
bool DeleteNextDNode(DNode *p){
if(p == NULL)
return false;
DNode *q = p -> next; // 找到p的后继结点q
if(q == NULL)
return false; // p没有后继
p -> next = q->next;
if(q -> next != NULL) // q结点不是最后一个结点
q -> next -> prior = p;
free(q);
return true;
}
// 后向遍历
while(p != NULL)
p = p -> next;
// 前向遍历
while(p != NULL)
p = p -> prior;
// 前向遍历(跳过头节点)
while(p -> prior != NULL)
p = p -> prior;
双链表不可随机存取,按位查找、按值查找操作都只能用遍历的方式实现。时间复杂度O(n)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。