双链表
单链表与双链表对比
- 单链表只有一个指向后继结点的指针,所以如果给定结点p想要找到他的前趋结点很麻烦,无法逆向检索
- 双链表在单链表的基础上,增加了一个指针域,指向其前趋结点。可进可退,存储密度更低
typedef struct DNode{
//定义双链表结点数据类型
ElemType data; //数据域
struct DNode *prior,*next; //前趋和后继指针
}DNode,*DLinkList;
带头节点双链表的初始化
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; //头节点永远指向NULL
L->next=NULL;
return true;
}
void testDLinkList(){
//初始化双链表
DLinkList L;
InitDLinkList(L);
//后续代码
}
}
//判断双链表是否为空
bool Empty(DLinkList L){
if(L->next==NULL)
return true;
else
return false;
}
双链表的插入
1.在p结点之后插入s结点
bool InsertNextDNode(DNode