C 類模版 帶表頭鍊錶的實現

2021-08-05 20:14:34 字數 1963 閱讀 5444

鍊錶是常用的基本資料結構之一,屬於線性表。同屬於線性表的還有順序表,我們常說的陣列就是順序表。

鍊錶的實現有帶表頭和不帶表頭兩種方式。最原始的方式,也就是不帶表頭的實現方式,是用乙個指向頭結點的指標變數來記錄鍊錶的起始位置,當我們要進行插入或刪除結點的操作時,必須要針對第乙個結點和其它結點做出不同判斷,然後用不同的**來分別處理這兩種情況。

所謂帶表頭的實現方式,就是用乙個空的結點來作為頭結點,其data域不放資料,其next指標指向第乙個存有資料的結點。這樣的好處是:每乙個資料結點都有相同型別的前驅結點,不管在哪個位置實現操作,都能用統一的形式來表述,即可以用同樣的**來實現,而無需判斷是在鍊錶的起始位置、中間位置或者尾部位置。

我們將實現鍊錶類的幾個基本方法:

鍊錶類linklist的定義部分

template

elemtype>

class

linklist ;

node

(elemtype

data, node* next = nullptr):

data(data), next(next){};

};node

head;

public:

linklist

() {};

~linklist

();data);

void insert(elemtype

data, int

pos = 0);

bool del(int

pos);

int search(elemtype

data);

int getlength();

elemtype getdata(int

pos);

void sort(int(*compare)

(elemtype& a, elemtype& b));

};

linklist的實現部分
template linklist::~linklist() 

} node *ptr = &head;

while(ptr->next != nullptr)

ptr->next = new node(data);

}/* 當插入位置大於鍊錶長度時,將元素插到鍊錶末尾 */

template void linklist::insert(elemtype data, int

pos)

ptr->next = new node(data, ptr->next);

}template bool linklist::del(int

pos)

if(p == pos) else

}/* 成功找到元素則返回索引,否則返回-1

*/template int linklist::search(elemtype data)

p++;

ptr = ptr->next;

}return -1;

}template int linklist::getlength()

return p;

}template elemtype linklist::getdata(int

pos)

return ptr->next->data;

}/* 排序函式需要乙個返回值為int型的比較函式作為引數

* 公升序排列:當a>b時,令compare(a, b)的返回值大於0

* 降序排列:當a0

* 注意:當a=b時,compare(a, b)的返回值必須小於或等於0。

*/template void linklist::sort(int(*compare)(elemtype& a, elemtype& b))

ptr = t;

t = t->next;}}

}

帶表頭的單向鍊錶

帶表頭的單向鍊錶 include include struct node typedef struct node node typedef struct node link void all malloc ok link new node link creat new node link new n...

帶表頭的單迴圈鍊錶的實現

通常在迴圈鍊錶的第乙個節點前附加乙個特殊的節點來作為標記,這個節點稱為迴圈鍊錶的頭結點,頭結點的資料域為空域,或者按照需要設定。在這裡,我們將a1節點的位址設為first,頭結點僅當作特殊標記。如果不想增加頭結點,也可以實現單迴圈鍊錶。本篇的單迴圈鍊錶是根據上篇 單鏈表的實現 上稍作修改而來,有什麼...

帶表頭鍊錶插入方法

include include include 定義鍊錶節點型別 struct node header void create node hlink new node 分配節點記憶體空間函式 void create link hlink head 建立新的帶表頭鍊錶的函式 帶表頭煉表頭插函式 voi...