typedef struct DNode{
Element data;
struct DNode *prior, *next;
}DNode, *DLinkList;
//初始化
bool InitDLinkList(DLinkList &L){
L = (DNode *)malloc(sizeof(DNode));
if(L==null)
return false;
L->prioor = null;//头结点的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;//如果p是最后一个结点,就不需要null有一个prior结点
s->prior = p;
p->next = s;
return true;
}
//删除p结点的后继结点q
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;
}
//销毁双链表
void DestoryList(DLinkList &L){
while(L->next != null)
DeleteNextDNode(L);
free(L);//释放头结点
L=null;//头指针置空
}
//遍历
void PrintLinkList(DLinkList L){
while(p!=null){//后向
打印;
p = p->next;
}
while(p!=null){//前向
打印;
p = p->prior;
}
while(p->prior != null){//跳过头结点的前向
打印;
p = p->next;
}
}
//按位查找
LNode * GetElem(LinkList L, int i){
if(i<0)
return null;
LNode *p;
int j = 0;
p = L;
while(p!=null && j<i){
p = p->next;
j++;
}
return p;
}
//按值查找
LNode * LocateElem(LinkList L, ElemType e){
LNode *p = L->next;
while(p!=null && p->data != e)
p = p->next;
return p;
}
//求表长
int length(LinkList L){
int len = 0;
LNode *p = L;
while(p->next != null){
p = p->next;
len++;
}
return len;
}
2021-09-28双链表
最新推荐文章于 2023-07-31 16:48:13 发布