双链表 | | 初始化插入删除遍历

Posted ikigai18

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双链表 | | 初始化插入删除遍历相关的知识,希望对你有一定的参考价值。

//初始化双链表
bool InitDLinkList(DLinklist &L){
    L=(Dnode*)malloc(sizeof(Dnode));
    if(L==NULL)
    return false;
    L->prior=NULL;   //  头结点的prior永远指向NULL 
    L->next=NULL;   //   头结点之后还没有结点
    return true;  
} 
void testDLinkList(){
    DLinklist L;
    InitDLinkList(L);
}
typedef struct DNode{
    int data;
    struct DNode *prior,*next;
}DNode,*DLinklist;  //DLinklist与DNode等价 

 

//在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;
} 

 

//删除p结点的后继结点
bool DeleteNextDNode(DNode *p){
    if(p==NULL)
    return false;
    DNode *p=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; 
       
} 

 

/**销毁一个双链表  
每一个都删除头结点的后继结点**/
void DestoryList(DLinklist &L){
    while(L->next!=NULL)
      DeleteNextDNode(L);
      free(L); //释放头结点 
      L=NULL;  //头指针指向null 
} 

//后向遍历
while(p!=NULL)
 p=p->next; 
//前向遍历
while(p!=NULL)
 p=p->prior;
//前向遍历(跳过头结点)
while(p->prior!=NULL)
 p=p->prior; 

 

以上是关于双链表 | | 初始化插入删除遍历的主要内容,如果未能解决你的问题,请参考以下文章

(王道408考研数据结构)第二章线性表-第三节2:双链表的定义及其操作(插入和删除)

有序的双链表的实现

基础数据结构---双链表go语言的代码实现

基础数据结构---双链表go语言的代码实现

数组实现双链表

王道其他链表