1. 程式人生 > >C++演算法之雙向連結串列的程式碼

C++演算法之雙向連結串列的程式碼

工作閒暇時間,把程式碼過程較好的程式碼片段收藏起來,下邊資料是關於C++演算法之雙向連結串列的程式碼,應該是對各朋友有些用處。 

typedef struct _DOUBLE_LINK_NODE  
{  
    int data;  
}DOUBLE_LINK_NODE; 複製程式碼
(2)建立雙向連結串列節點 

{  
    assert(NULL != pDLinkNode);  
  
    memset(pDLinkNode, 0, sizeof(DOUBLE_LINK_NODE));  
    pDLinkNode->data = value;  
    return pDLinkNode;  
}複製程式碼
 (3)刪除雙向連結串列 

{  
        return
; free(pNode); delete_all_double_link_node(pDLinkNode); }複製程式碼
(4)在雙向連結串列中查詢資料

                                
                        
                                


{  
    if(NULL == pDLinkNode)  
        return NULL;  
  
    while(NULL != pNode){  
        if(data == pNode->data)  
            return
pNode; pNode = pNode ->next; } return NULL; } 複製程式碼
(5)雙向連結串列中插入資料

                                
                        
                                

{  
  
    if(NULL == ppDLinkNode)  
        return FALSE;  
  
        pNode = create_double_link_node(data);  
        assert(NULL != pNode);  
        return
TRUE; } return FALSE; pNode = create_double_link_node(data); assert(NULL != pNode); while(NULL != pIndex->next) pIndex = pIndex->next; pNode->prev = pIndex; pNode->next = pIndex->next; pIndex->next = pNode; return TRUE; } 複製程式碼
(6)雙向連結串列中刪除資料 

{  
        return FALSE;  
  
    if(NULL == pNode)  
        return FALSE;  
  
        }else{  
        }  
  
    }else{  
        if(pNode->next)  
            pNode->next->prev = pNode->prev;  
        pNode->prev->next = pNode->next;  
    }  
  
    free(pNode);  
    return TRUE;  
} 複製程式碼
(7)統計雙向連結串列中資料的個數 

{  
    int count = 0;  
  
    while(NULL != pNode){  
        count ++;  
        pNode = pNode->next;  
    }  
    return count;  
} 複製程式碼
(8)列印雙向連結串列中資料

                                
                        
                                

{  
  
    while(NULL != pNode){  
        printf("%dn", pNode->data);  
        pNode = pNode ->next;  
    }  
} 複製程式碼
注意:今天我們討論的雙向連結串列是非迴圈的,大家可以考慮一下如果改成迴圈雙向連結串列,應該怎麼寫?如果是有序的迴圈雙向連結串列,又該怎麼寫?