鍊錶是一種特殊的陣列,它的每個元素稱為節點,每個節點包括兩個部分:
其結構如下圖所示
鍊錶比陣列多了指標域,因為鍊錶結構是通過上乙個節點的指標域去找下乙個資料,比如有乙個鍊錶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...
單向動態鍊錶
什麼是鍊錶 鍊錶是一種物理儲存單元上非連續 非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點 鍊錶中每乙個元素稱為結點 組成,結點可以在執行時動態生成。每個結點包括兩個部分 乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。相比於線性表順序結構,操...