鍊錶(linked list)是一種基礎資料結構,是一種線性表,在每乙個節點裡存到下乙個節點的指標(pointer)。即每乙個節點都儲存著指向下乙個節點的資訊。
(1). 初始化乙個空鍊錶。
(2). 在鍊錶末端新增乙個新節點。
(3). 統計鍊錶的節點數。
(4). 在鍊錶指定位置插入。
(5). 刪除指定節點。
(6). 清空鍊錶
list.h
#ifndef list_h
#define list_h
#include using namespace std;
typedef struct dataitem;
typedef struct nodenode;
typedef node* listnode;
void initlist(listnode *plist);
unsigned int listnodecnt(const listnode *plist);
void addlistnode(item item, listnode *plist);
void deletelistnode(item item, listnode *plist);
void showlistnode(const listnode *plist);
void clearlist(listnode *plist);
#endif // list_h
list.cpp
#include "list.h"
void initlist(listnode *plist)
unsigned int listnodecnt(const listnode *plist)
while (plistnode != nullptr)
return nodecnt;
}void addlistnode(item item, listnode *plist)
else
//在鍊錶末端插入新元素
plistnode->m_pnext = pnew;
}}void deletelistnode(item item, listnode *plist)
listnode pdeletelistnode = nullptr;
//檢查刪除的節點是不是存在,若存在檢查是不是頭節點
if((*plist)->m_value.value == item.value)else
if((plistnode->m_pnext != nullptr) && plistnode->m_pnext->m_value.value == item.value)
}if(pdeletelistnode != nullptr)
}void showlistnode(const listnode *plist)
while (plistnode != nullptr)
}void clearlist(listnode *plist)
while ((*plist) != nullptr)
}
main.cpp
#include "list.h"
//測試case
int main()
/****************測試case: 輸出節點**********====*/
showlistnode(&list);
/****************測試case: 統計節點個數**********====*/
C 資料結構 鍊錶(鍊錶節點建立)
本文是為了以下建立鍊錶更加方便,而編寫的c 標頭檔案,作用是建立乙個節點類,此處不採用class,而用struct。struct和class的區別在於 二者的訪問許可權不同!前者 訪問許可權是public 後者 訪問許可權是private 節點類的標頭檔案 如下 ifndef listnode hh...
鍊錶的中間節點和判斷鍊錶是否為環形鍊錶
基本思想 設定兩個指標,都指向鍊錶的頭節點。兩個指標同時從鍊錶的頭節點出發,乙個指標每次走一步,另乙個指標每次走兩步。1.走得快的指標走到鍊錶末尾時,走得慢的指標剛好指向鍊錶的中間節點。2.走得快的指標如果追的上走得慢的指標,則鍊錶為環形鍊錶,反之不是。如下 include include usin...
資料結構 鍊錶 雙向鍊錶
注意typedef的定義結構,以及dinklist的資料型別 typedef struct dnode dnode,dinklist 注意插入第乙個結點時,prior指標的空指向問題 if l next null 若l後繼結點為空 則省略該步驟 l next prior p 基本 頭插法建立雙向鍊錶...