c++雙向鏈表操作示例(創(chuàng)建雙向鏈、雙向鏈表中查找數(shù)據(jù)、插入數(shù)據(jù)等)
雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個(gè)結(jié)點(diǎn)開(kāi)始,都可以很方便地訪問(wèn)它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。一般我們都構(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é)點(diǎn)
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)計(jì)雙向鏈表中數(shù)據(jù)的個(gè)數(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)雙向鏈表,應(yīng)該怎么寫(xiě)?如果是有序的循環(huán)雙向鏈表,又該怎么寫(xiě)?
- C++ 構(gòu)造雙向鏈表的實(shí)現(xiàn)代碼
- C++ 模版雙向鏈表的實(shí)現(xiàn)詳解
- 關(guān)于雙向鏈表的增刪改查和排序的C++實(shí)現(xiàn)
- C++ STL入門(mén)教程(2) list雙向鏈表使用方法(附程序代碼)
- C++ 實(shí)現(xiàn)雙向鏈表的實(shí)例
- C++將二叉樹(shù)轉(zhuǎn)為雙向鏈表及判斷兩個(gè)鏈表是否相交
- 深入解析C++的循環(huán)鏈表與雙向鏈表設(shè)計(jì)的API實(shí)現(xiàn)
- C++雙向鏈表實(shí)現(xiàn)簡(jiǎn)單通訊錄
- C++實(shí)現(xiàn)雙向鏈表
- C++數(shù)據(jù)結(jié)構(gòu)之雙向鏈表
相關(guān)文章
c++基礎(chǔ)算法動(dòng)態(tài)DP解決CoinChange問(wèn)題
這篇文章主要為大家介紹了c++基礎(chǔ)算法如何利用動(dòng)態(tài)DP來(lái)解決Coin Change的問(wèn)題示例過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
C++ 組合 (Composition)的介紹與實(shí)例
這篇文章主要給大家介紹了關(guān)于C++ 組合(Composition)的相關(guān)資料,組合就是將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。需要的朋友可以參考下2021-05-05
C++多重繼承引發(fā)的重復(fù)調(diào)用問(wèn)題與解決方法
這篇文章主要介紹了C++多重繼承引發(fā)的重復(fù)調(diào)用問(wèn)題與解決方法,結(jié)合具體實(shí)例形式分析了C++多重調(diào)用中的重復(fù)調(diào)用問(wèn)題及相應(yīng)的解決方法,需要的朋友可以參考下2018-05-05
C++中智能指針最常用的shared_ptr和unique_ptr
C++中的智能指針最常用的是shared_ptr和unique_ptr,C++新手最常問(wèn)的問(wèn)題是我從一個(gè)函數(shù)中拿到unique_ptr,但要轉(zhuǎn)成shared_ptr才能使用,要怎么轉(zhuǎn)換?同理是否能將shared_ptr轉(zhuǎn)換成unique_ptr,面對(duì)這些問(wèn)題,跟隨小編一起看看吧2022-08-08
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)主題感知功能
在現(xiàn)代桌面應(yīng)用程序開(kāi)發(fā)中,系統(tǒng)主題感知是一項(xiàng)重要的功能,它使得應(yīng)用程序能夠根據(jù)用戶的系統(tǒng)主題設(shè)置(如深色模式或淺色模式)自動(dòng)調(diào)整其外觀,Qt 作為一個(gè)跨平臺(tái)的C++圖形用戶界面應(yīng)用程序開(kāi)發(fā)框架,提供了豐富的工具和類來(lái)實(shí)現(xiàn)這一功能,需要的朋友可以參考下2024-12-12

