最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++雙向鏈表操作示例(創(chuàng)建雙向鏈、雙向鏈表中查找數(shù)據(jù)、插入數(shù)據(jù)等)

 更新時間:2014年05月07日 10:46:27   作者:  
這篇文章主要介紹了c++雙向鏈表操作示例,包括創(chuàng)建雙向鏈、刪除雙向鏈表、雙向鏈表中查找數(shù)據(jù)、插入數(shù)據(jù)等,需要的朋友可以參考下

雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結(jié)點中都有兩個指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個結(jié)點開始,都可以很方便地訪問它的前驅(qū)結(jié)點和后繼結(jié)點。一般我們都構(gòu)造雙向循環(huán)鏈表。

(1)定義雙向鏈表的基本結(jié)構(gòu)

復制代碼 代碼如下:

typedef struct _DOUBLE_LINK_NODE 

    int data; 
    struct _DOUBLE_LINK_NODE* prev; 
    struct _DOUBLE_LINK_NODE* next; 
}DOUBLE_LINK_NODE; 

(2)創(chuàng)建雙向鏈表節(jié)點

復制代碼 代碼如下:

DOUBLE_LINK_NODE* create_double_link_node(int value) 

    DOUBLE_LINK_NODE* pDLinkNode = NULL; 
    pDLinkNode = (DOUBLE_LINK_NODE*)malloc(sizeof(DOUBLE_LINK_NODE)); 
    assert(NULL != pDLinkNode); 

    memset(pDLinkNode, 0, sizeof(DOUBLE_LINK_NODE)); 
    pDLinkNode->data = value; 
    return pDLinkNode; 

(3)刪除雙向鏈表

復制代碼 代碼如下:

void delete_all_double_link_node(DOUBLE_LINK_NODE** pDLinkNode) 

    DOUBLE_LINK_NODE* pNode; 
    if(NULL == *pDLinkNode) 
        return ; 

    pNode = *pDLinkNode; 
    *pDLinkNode = pNode->next; 
    free(pNode); 
    delete_all_double_link_node(pDLinkNode); 
}

(4)在雙向鏈表中查找數(shù)據(jù)

復制代碼 代碼如下:

DOUBLE_LINK_NODE* find_data_in_double_link(const DOUBLE_LINK_NODE* pDLinkNode, int data) 

    DOUBLE_LINK_NODE* pNode = NULL; 
    if(NULL == pDLinkNode) 
        return NULL; 

    pNode = (DOUBLE_LINK_NODE*)pDLinkNode; 
    while(NULL != pNode){ 
        if(data == pNode->data) 
            return pNode; 
        pNode = pNode ->next; 
    } 

    return NULL; 

(5)雙向鏈表中插入數(shù)據(jù)

復制代碼 代碼如下:

STATUS insert_data_into_double_link(DOUBLE_LINK_NODE** ppDLinkNode, int data) 

    DOUBLE_LINK_NODE* pNode; 
    DOUBLE_LINK_NODE* pIndex; 

    if(NULL == ppDLinkNode) 
        return FALSE; 

    if(NULL == *ppDLinkNode){ 
        pNode = create_double_link_node(data); 
        assert(NULL != pNode); 
        *ppDLinkNode = pNode; 
        (*ppDLinkNode)->prev = (*ppDLinkNode)->next = NULL; 
        return TRUE; 
    } 

    if(NULL != find_data_in_double_link(*ppDLinkNode, data)) 
        return FALSE; 

    pNode = create_double_link_node(data); 
    assert(NULL != pNode); 

    pIndex = *ppDLinkNode; 
    while(NULL != pIndex->next) 
        pIndex = pIndex->next; 

    pNode->prev = pIndex; 
    pNode->next = pIndex->next; 
    pIndex->next = pNode; 
    return TRUE; 

(6)雙向鏈表中刪除數(shù)據(jù)

復制代碼 代碼如下:

STATUS delete_data_from_double_link(DOUBLE_LINK_NODE** ppDLinkNode, int data) 

    DOUBLE_LINK_NODE* pNode; 
    if(NULL == ppDLinkNode || NULL == *ppDLinkNode) 
        return FALSE; 

    pNode = find_data_in_double_link(*ppDLinkNode, data); 
    if(NULL == pNode) 
        return FALSE; 

    if(pNode == *ppDLinkNode){ 
        if(NULL == (*ppDLinkNode)->next){ 
            *ppDLinkNode = NULL; 
        }else{ 
            *ppDLinkNode = pNode->next; 
            (*ppDLinkNode)->prev = NULL; 
        } 

    }else{ 
        if(pNode->next) 
            pNode->next->prev = pNode->prev; 
        pNode->prev->next = pNode->next; 
    } 

    free(pNode); 
    return TRUE; 

(7)統(tǒng)計雙向鏈表中數(shù)據(jù)的個數(shù)

復制代碼 代碼如下:

int count_number_in_double_link(const DOUBLE_LINK_NODE* pDLinkNode) 

    int count = 0; 
    DOUBLE_LINK_NODE* pNode = (DOUBLE_LINK_NODE*)pDLinkNode; 

    while(NULL != pNode){ 
        count ++; 
        pNode = pNode->next; 
    } 
    return count; 

(8)打印雙向鏈表中數(shù)據(jù)

復制代碼 代碼如下:

void print_double_link_node(const DOUBLE_LINK_NODE* pDLinkNode) 

    DOUBLE_LINK_NODE* pNode = (DOUBLE_LINK_NODE*)pDLinkNode; 

    while(NULL != pNode){ 
        printf("%d\n", pNode->data); 
        pNode = pNode ->next; 
    } 

今天我們討論的雙向鏈表是非循環(huán)的,大家可以考慮一下如果改成循環(huán)雙向鏈表,應該怎么寫?如果是有序的循環(huán)雙向鏈表,又該怎么寫?

相關(guān)文章

  • C++內(nèi)存管理面經(jīng)

    C++內(nèi)存管理面經(jīng)

    這篇文章主要介紹了C++的內(nèi)存分配方式以及介紹了下棧和堆的區(qū)別,感興趣的小伙伴可以參考閱讀本文
    2023-03-03
  • c語言處理函數(shù)調(diào)用的方法

    c語言處理函數(shù)調(diào)用的方法

    函數(shù)就是一段封裝好的,可以重復使用的代碼,它使得我們的程序更加模塊化,不需要編寫大量重復的代碼。這篇文章主要介紹了c語言是如何處理函數(shù)調(diào)用的?需要的朋友可以參考下
    2021-11-11
  • C++之string類對象的容量操作詳解

    C++之string類對象的容量操作詳解

    通過在網(wǎng)站上的資料搜集,得到了很多關(guān)于string類對象的容量操作,通過對這些資料的整理和加入一些自己的代碼,希望能夠給你帶來幫助
    2021-08-08
  • c++基礎(chǔ)算法動態(tài)DP解決CoinChange問題

    c++基礎(chǔ)算法動態(tài)DP解決CoinChange問題

    這篇文章主要為大家介紹了c++基礎(chǔ)算法如何利用動態(tài)DP來解決Coin Change的問題示例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • C++ 組合 (Composition)的介紹與實例

    C++ 組合 (Composition)的介紹與實例

    這篇文章主要給大家介紹了關(guān)于C++ 組合(Composition)的相關(guān)資料,組合就是將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),使得用戶對單個對象和組合對象的使用具有一致性。需要的朋友可以參考下
    2021-05-05
  • Windows的鉤子機制詳解

    Windows的鉤子機制詳解

    這篇文章主要介紹了Windows的鉤子機制,對于初學者進一步了解windows程序設計中鉤子的原理及運用有很大的幫助,需要的朋友可以參考下
    2014-07-07
  • C++多重繼承引發(fā)的重復調(diào)用問題與解決方法

    C++多重繼承引發(fā)的重復調(diào)用問題與解決方法

    這篇文章主要介紹了C++多重繼承引發(fā)的重復調(diào)用問題與解決方法,結(jié)合具體實例形式分析了C++多重調(diào)用中的重復調(diào)用問題及相應的解決方法,需要的朋友可以參考下
    2018-05-05
  • C++中智能指針最常用的shared_ptr和unique_ptr

    C++中智能指針最常用的shared_ptr和unique_ptr

    C++中的智能指針最常用的是shared_ptr和unique_ptr,C++新手最常問的問題是我從一個函數(shù)中拿到unique_ptr,但要轉(zhuǎn)成shared_ptr才能使用,要怎么轉(zhuǎn)換?同理是否能將shared_ptr轉(zhuǎn)換成unique_ptr,面對這些問題,跟隨小編一起看看吧
    2022-08-08
  • C語言實現(xiàn)簡單計算器

    C語言實現(xiàn)簡單計算器

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 基于Qt實現(xiàn)系統(tǒng)主題感知功能

    基于Qt實現(xiàn)系統(tǒng)主題感知功能

    在現(xiàn)代桌面應用程序開發(fā)中,系統(tǒng)主題感知是一項重要的功能,它使得應用程序能夠根據(jù)用戶的系統(tǒng)主題設置(如深色模式或淺色模式)自動調(diào)整其外觀,Qt 作為一個跨平臺的C++圖形用戶界面應用程序開發(fā)框架,提供了豐富的工具和類來實現(xiàn)這一功能,需要的朋友可以參考下
    2024-12-12

最新評論

子洲县| 闽清县| 沈阳市| 晋中市| 晴隆县| 句容市| 武鸣县| 久治县| 长乐市| 金平| 黔西县| 陇南市| 沁水县| 桐柏县| 玉溪市| 广宗县| 无为县| 即墨市| 资兴市| 万盛区| 南岸区| 潞西市| 平罗县| 黑山县| 清河县| 新河县| 疏附县| 沐川县| 天峻县| 聂荣县| 蒙阴县| 固镇县| 兴隆县| 华宁县| 枝江市| 抚顺市| 洛隆县| 衢州市| 葵青区| 三台县| 宁国市|