C 實現資料結構 單鏈表

2021-10-08 22:09:58 字數 4300 閱讀 5750

2023年8月7日 周五 天氣晴 【不悲嘆過去,不荒廢現在,不懼怕未來】

用c++實現了簡單的單鏈錶類,功能包括插入、刪除、查詢相關元素,分離鍊錶等操作。**是用vs2019實現的,每個函式的功能都新增了一定注釋,完整工程放在了我的github上,有需要的也可以自取。

/**

* @license gnu general public license (gpl)

* @author march

* @email [email protected]

* @file main.cpp

* @brief 單鏈表的c++實現主檔案

* @version 1.0

* @date 2020-08-07

*/#include

"stdafx.h"

#include

"linklist.h"

intmain()

#pragma once

/** * @brief 建立乙個單鏈錶類

*/class

linklist

;

#include

"stdafx.h"

#include

"linklist.h"

// 建構函式,初始化單鏈表

linklist::

linklist()

:head_

(nullptr),

length_(0

)// 析構函式,銷毀單鏈表

linklist::

~linklist()

cout <<

this

<<

"單鏈表已被銷毀!"

<< endl;

}// 返回單鏈表的長度

int linklist::

getlength()

// 根據位置返回單鏈表的元素

bool linklist::

getelembyposition

(int pos, elemtype& val)

else

if(pos <=

0|| pos > length_)

else

cur = cur-

>next;

} cout <<

"未知原因,獲取元素失敗!"

<< endl;

return

false;}

}// 尾插法建立單鏈表

bool linklist::

createlinklistbyinsertatend

(int len)

head_ = dummy_node-

>next;

return

true;}

// 頭插法建立單鏈表

bool linklist::

createlinklistbyinsertatbeg

(int len)

head_ = cur;

return

true;}

// 在第pos個結點前插入值為val的結點

bool linklist::

insertelembeforeposition

(int pos, elemtype val)

else

if(pos <=

0|| pos > length_)

else

cur = cur-

>next;

} cout <<

"未知原因,插入元素失敗!"

<< endl;

return

false;}

}// 返回單鏈表中值為val的元素位置

bool linklist::

findelembyvalue

(int

& pos, elemtype val)

listnode* cur = head_;

int cnt =1;

while

(cur)

++cnt;

cur = cur-

>next;

} cout <<

"沒有查詢到值為 "

<< val <<

" 的元素!"

<< endl;

return

false;}

// 根據位置刪除單鏈表的元素

bool linklist::

deleteelembyposition

(int pos)

else

if(pos <=

0|| pos > length_)

else

cur = cur-

>next;

} cout <<

"未知原因,刪除元素失敗!"

<< endl;

return

false;}

}// 在乙個有序單鏈表中插入元素,並保證鍊錶還是有序的

bool linklist::

inserteleminorder

(elemtype val)

listnode* dummy_node =

newlistnode(0

);dummy_node-

>next = head_;

listnode* pre = dummy_node;

while

(pre-

>next)

else

else

pre = pre-

>next;}}

head_ = dummy_node-

>next;

++length_;

return

true;}

// 根據元素的奇偶性分離單鏈表

bool linklist::

splitlinklistbyparityofval

(linklist*

& l_odd, linklist*

& l_even)

else

} l_odd-

>head_ = dummy_node_odd-

>next;

l_even-

>head_ = dummy_node_even-

>next;

head_ =

nullptr

; length_ =0;

return

true;}

// 列印單鏈表的長度和元素

void linklist::

printlinklist()

cout <<

"nullptr"

<< endl << endl;

}

#pragma once

// stdafx.h : include file for standard system include files,

// or project specific include files that are used frequently, but

// are changed infrequently

//#if !defined(afx_stdafx_h__d36e9d40_3bcb_4a85_9d48_ac876e7a2942__included_)

#define afx_stdafx_h__d36e9d40_3bcb_4a85_9d48_ac876e7a2942__included_

#if _msc_ver > 1000

#pragma once

#endif

// _msc_ver > 1000

#include

// 萬能的標頭檔案,可能需要手動加入include資料夾中

typedef

int elemtype;

// 使鍊錶的資料型別elemtype為int

/** * @brief 定義單鏈表的結點

*/struct listnode

listnode

(int x)

:val

(x),

next

(nullptr)}

;using

namespace std;

#endif

// !defined(afx_stdafx_h__d36e9d40_3bcb_4a85_9d48_ac876e7a2942__included_)

資料結構 單鏈表C實現

什麼叫結構體?就是能夠將不同資料型別集合在一起構造乙個新的資料型別的東西,它有乙個注意點就是不能引用自身作為結構體成員,為什麼呢?因為在建立這種型別的結構體變數時計算機無法得知給結構體變數分配多大的記憶體導致編譯器報錯,提示非法操作。那麼為什麼計算機無法給結構體變數分配某個固定記憶體呢?是這樣的,如...

資料結構 單鏈表(C 實現)

單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。單鏈表基本操縱的實現 包含頭結點 include define ...

資料結構 單鏈表實現

線性表的鏈式儲存結構的特點是用一組任意的儲存單元儲存線性表的資料元素 這組儲存單元可以是連續的,也可以是不連續的 因此,為了表示每個資料元素與其直接後繼資料元素之間的邏輯關係,對資料元素來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後繼的資訊 即直接後繼的儲存位置 這兩部分資訊組成資料元素的...