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

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

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

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

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

復(fù)制代碼 代碼如下:

typedef struct _DOUBLE_LINK_NODE 

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

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

復(fù)制代碼 代碼如下:

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)刪除雙向鏈表

復(fù)制代碼 代碼如下:

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ù)

復(fù)制代碼 代碼如下:

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ù)

復(fù)制代碼 代碼如下:

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ù)

復(fù)制代碼 代碼如下:

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)計(jì)雙向鏈表中數(shù)據(jù)的個(gè)數(shù)

復(fù)制代碼 代碼如下:

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ù)

復(fù)制代碼 代碼如下:

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)雙向鏈表,應(yīng)該怎么寫?如果是有序的循環(huán)雙向鏈表,又該怎么寫?

相關(guān)文章

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

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

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

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

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

    C++之string類對(duì)象的容量操作詳解

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

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

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

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

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

    Windows的鉤子機(jī)制詳解

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

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

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

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

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

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

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

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

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

最新評(píng)論

江阴市| 汨罗市| 阳信县| 襄城县| 龙岩市| 西乡县| 南雄市| 通榆县| 镇江市| 偏关县| 宁安市| 罗平县| 邵阳县| 城口县| 大足县| 明水县| 丰城市| 鄂伦春自治旗| 华容县| 志丹县| 永福县| 宝清县| 清远市| 宜良县| 祁连县| 剑河县| 恩平市| 海南省| 石家庄市| 马关县| 阿拉善右旗| 寿光市| 青海省| 墨竹工卡县| 靖江市| 长丰县| 漾濞| 乌拉特中旗| 定陶县| 闸北区| 肇庆市|