1.双链表
1.1定义
双链表有两条链,一条由前趋指向后继,一条由后继指向前趋。多了一个指针域prior,其指向该结点的前趋结点。
typedef struct DNode{
//定义双链表结点类型
ElemType data; //数据域
struct DNode *prior,*next;//前趋和后继指针
}DNode, *DLinklist;
初始化双链表(带头结点):
此处的DLinklist和DNode是等价的,使用DLinklist是为了强调定义的是一个链表,使用DNode是为了强调定义的是一个结点。
bool InitDLinkList(DLinklist &L){
L = (DNode *) malloc(sizeof(DNode));//分配一个头结点,让L指向头结点
if (L==NULL) //内存不足就会分配失败
return false;
L->prior = NULL;//头结点的prior永远指向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.2双链表的插入
//在p结点之后插入s结点
bool InsertNextDNode(DNode *p, DNode *s){
if (p==NULL || s==NULL) //输入值非法时
return false;
s->next=p->next; //将结点*s插入到结点*p之后
if