資料結構與演算法1 單鏈表常見操作

2021-08-25 22:05:33 字數 2523 閱讀 2911

單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成:元素(資料元素的映象) + 指標(指示後繼元素儲存位置),元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。以下是筆者根據單鏈表結構實現的幾個常見功能,後續將新增常見其它功能。

01-新建鍊錶方法1

02-新建鍊錶方法2

03-追加鍊錶

04-刪除鍊錶中某個節點

05-清空鍊錶

06-銷毀鍊錶

07-鍊錶長度

08-列印鍊錶

09-輸出鍊錶中倒數第k個節點

10-反轉鍊錶

/*

該資料夾包含list的增刪查改,以及常見list演算法的實現

*/#include #include using namespace std;

typedef struct nodelistnode;

/*menu

01-新建鍊錶方法1

02-新建鍊錶方法2

03-追加鍊錶

04-刪除鍊錶中某個節點

05-清空鍊錶

06-銷毀鍊錶

07-鍊錶長度

08-列印鍊錶

09-輸出鍊錶中倒數第k個節點

10-反轉鍊錶

*/listnode* createlistbynum(int n);//01

listnode* createlistbyvector(vector&v);//02

void deletenode(listnode **phead, int val);//04

void clearlist(listnode *phead);//05

void destroylist(listnode **phead);//06

int getlength(listnode *phead);//07

void printlist(listnode *phead);//08

void printkthnodetotail(listnode *phead, int k);//09

listnode* reverselist(listnode* phead);//10

//01-新建鍊錶方法1,節點依次為 1->2->3-···->n

listnode* createlistbynum(int n)

return phead;

}void testcreatelistbynum()

//02-新建鍊錶方法2,節點依次為 v[0]->v[1]->v[2]-···->v[v.size()-1]

listnode* createlistbyvector(vector&v)

return phead;

}void testcreatelistbyvector()

; vectorv(arr,arr+10);

listnode *phead = createlistbyvector(v);

printlist(phead);

}//03-追加鍊錶,追加val到list尾部

else

cur->next = tmp; }}

//04-刪除鍊錶中某個節點

void deletenode(listnode **phead, int val)

listnode *cur = *phead;

while(cur!=null)

else if(cur->val==val && cur->next==null)//若phead為尾節點,刪除該節點,令其前乙個節點next為null

else

}}void testdeletenode()

//05-清空鍊錶,頭節點保留,其它節點全部刪除

void clearlist(listnode *phead)

}void testclearlist()

//06-銷毀鍊錶,包括頭節點在內全部刪除

void destroylist(listnode **phead)

}void testdestroylist()

return ret;

}void testgetlength() }}

void testprintlist()

//09-輸出鍊錶中倒數第k個節點

void printkthnodetotail(listnode *phead, int k)

coutreturn phead;

listnode *pre = null;//儲存當前節點的前乙個節點

listnode *cur = phead;//儲存當前節點

listnode *pheadreverse = null;//儲存反轉節點的頭節點

while(cur!=null)

return pheadreverse;

}void testreverselist()

int main(int argc, char const *argv)

當前已在mingw32(gcc 4.9.2)上測試通過。

單鏈表(演算法與資料結構)

鍊錶 單鏈表 為每個結點新增1個指標域,每個結點包括兩個域 資料域 存放元素本身資訊 指標域 存放後繼結點的儲存位置 指向鍊錶中第乙個結點的指標,稱為這個鍊錶的頭指標。最後乙個元素的指標不指向任何結點,稱為空指標,圖示中用 表示,在演算法中用 null 表示 帶頭結點的單鏈表 頭結點 可以不存資訊,...

資料結構與演算法 單鏈表

鍊錶是有序的列表,但是它在記憶體中是儲存如下 鍊錶是以節點的方式來儲存的 鍊錶的各個節點不一定是連續儲存的 鍊錶分帶頭結點的鍊錶和不帶頭結點的鍊錶 新增先建立乙個 head 頭結點,作用就是表示單鏈表的頭 後面我們每新增乙個結點,就直接加入到鍊錶的最後 遍歷 通過乙個輔助變數,幫助來遍歷整個鍊錶 第...

資料結構與演算法 單鏈表

單鏈表的建立 1.建立乙個head頭節點,作用就是表示單鏈表的頭 2.後面我們每新增乙個節點,就直接加入鍊錶的最後 定義heronode,每個heronode物件就是乙個節點 class heronode 為了顯示方法,重新tostring public string tostring 定義sing...