動態單向鍊錶的C 實現

2021-08-16 19:55:10 字數 2732 閱讀 6618

鍊錶是一種特殊的陣列,它的每個元素稱為節點,每個節點包括兩個部分:

其結構如下圖所示

鍊錶比陣列多了指標域,因為鍊錶結構是通過上乙個節點的指標域去找下乙個資料,比如有乙個鍊錶abcd四個節點,其中a節點是鍊錶的第乙個節點,如果要訪問d節點裡邊的資料。操作如下:

先通過a節點的指標域找到b節點

再通過b節點的指標域找到c節點

再通過c節點的指標域找到d節點

獲取d節點資料域的資料

當遍歷鍊錶中的資料時,這種方法相比陣列一般更加耗時,但是他的好處在於當插入和刪除資料時非常方便,陣列的插入和刪除需要調整之後的每個資料,而鍊錶則只需要調整結點的指標即可,如下圖所示,刪除同理

頭指標用來唯一確定單鏈表的身份,頭指標指向鍊錶的第乙個結點,若第乙個結點不存放資料,則為頭結點。鍊錶可以沒有頭結點,但必須有頭指標,沒有頭指標的話鍊錶也就不存在了。頭結點的資料域可以不存放任何資訊,也可以存放鍊錶的長度等資訊。

總結:頭指標:

頭指標具有標識作用,常用頭指標冠以鍊錶的名字。

無論鍊錶是否為空,頭指標均不為空。頭指標是鍊錶的必要元素。

頭結點:

宣告: linklist.h

//

// created by 開機燙手 on 2018/3/11.

//#ifndef linearlist_linklist_h

#define linearlist_linklist_h

namespace xq node;

class linklist ;

}#endif //linearlist_linklist_h

類實現:linklist.cpp

//

// created by 開機燙手 on 2018/3/11.

//#include #include "linklist.h"

using namespace xq;

using namespace std;

linklist::linklist()

linklist::~linklist()

}bool linklist::clearlist()

len = 0;

head->next = nullptr;

return true;

}bool linklist::isempty()

int linklist::length()

void linklist::getelem(int i, int *e)

int j = 1;

node *p = head->next;

while (j < i && p)

*e = p->data;

}int linklist::locateelem(int e)

return -1;

}bool linklist::insert(int i, int e)

node *s = new node;

s->data = e;

s->next = p->next;

p->next = s;

len++;

return true;

}void linklist::print()

node *p = head->next;

while (p)

cout << endl;

}bool linklist::delete_(int i, int *e)

*e = p->data;

q->next = p->next;

len--;

delete p;

return true;

}bool linklist::push_back(int e)

node *s = new node;

s->data = e;

p->next = s;

s->next = nullptr;

len++;

return true;

}void linklist::sort()

p = p->next;

q = q->next;}}

}

**測試:main.cpp

#include #include "linklist.h"

using namespace std;

using namespace xq;

int main()

程式輸出為:

----------list test programe!----------

is empty 1

is empty 0

is empty 1

1 2 3 5 6

1 2 3 4 5 6

1 2 3 4 6

location is 3

num2 = 4

1 2 3 4 6 10 5 7 2

sort 1 2 2 3 4 5 6 7 10

Python 實現單向動態鍊錶

鍊錶顧名思義就是 鏈 鍊錶是一種動態資料結構,他的特點是用一組任意的儲存單元存放資料元素。鍊錶中每乙個元素成為 結點 每乙個結點都是由資料域和指標域組成的。跟陣列不同鍊錶不用預先定義大小,而且硬體支援的話可以無限擴充套件。陣列需要預先定義大小,無法適應資料動態地增減,資料小於定義的長度會浪費記憶體,...

c實現單向鍊錶

實現乙個單向鍊錶的 建立 插入 刪除 排序 冒泡 逆向 搜尋中間節點 include include include using namespace std typedef struct student node 建立鍊錶 node create else 4.釋放頭節點 p next null p...

單向動態鍊錶

什麼是鍊錶 鍊錶是一種物理儲存單元上非連續 非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點 鍊錶中每乙個元素稱為結點 組成,結點可以在執行時動態生成。每個結點包括兩個部分 乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。相比於線性表順序結構,操...