一般分為單鏈表,雙鏈表和迴圈鍊錶(單向或雙向)。
單鏈表結構是每個節點只有乙個鏈,例如
迴圈鍊錶是單鏈表的一種變種,單鏈表是將尾節點置為null,而迴圈鍊錶是將尾節點指向頭結點。
// 定義節點的結構
template
struct chainnode
chainnode(const t& element)
chainnode(const t& element, chainnode* next)
};
當我們定義乙個單鏈表的時候,我們考慮到要如何建立,如何新增,如何刪除等等操作,因此編寫**如下。
// 鍊錶的操作
template
class chain
// 判斷是否為空
int size() const // 返回鍊錶長度
t& get(int theindex) const; // 根據下標獲取鍊錶元素
int indexof(const t& theelement) const; // 根據元素獲取下標
void erase(int theindex); // 根據下標刪除元素
void insert(int theindex, const t& theelement); // 插入操作
void output() const; // 輸出鍊錶
private:
bool checkindex(int theindex) // 檢查下標
chainnode* firstnode;
int listsize;
};
建構函式和析構函式template
chain::chain()
template
chain::chain(const chain& thelist)
// 進行拷貝
// 中間變數
chainnode* sourcenode = thelist.firstnode;
firstnode = new chainnode(sourcenode->element);
// 因為要保證firstnode始終指向頭指正,並且能夠正常賦值,
// 採取另乙個指標來拷貝
chainnode* temp = firstnode;
sourcenode = sourcenode->next;
while(sourcenode != null)
temp->next = null;
}template
chain::~chain()
}
add() 和 insert() 操作
思路都是把上乙個節點的指標指向插入的元素,插入元素的指標指向節點的下乙個節點
**實現
template
void chain::add(int theelement)
else
p->next = new chainnode;
p->next->element = theelement;
p->next->next = null;
}listsize++;
}template
void chain::insert(int theindex, const t& theelement)
else
p = new chainnode(theelement, p->next);
}listsize++;
}
erase() 操作
例如,有n個節點的鍊錶,要刪除第三個節點,即是遍歷到第二個節點,將第二個節點的鏈域從原來指向第三個節點的指標,改為指向第四個節點,然後釋放第三個節點即可
template
void chain::erase(int theindex)
else
deletenode = p->next;
p->next = p->next->next;
}listsize--;
delete deletenode;
}
get() 和 indexof() 操作template
t& chain::get(int theindex) const
return currentnode->element;
}template
int chain::indexof(const t& theelement) const
if(currentnode == null)
return -1;
else
return index;
}
資料結構之線性表 C 陣列描述
前面我寫了幾節二叉樹,現在想想還是回過頭來吧線性表寫了 c 裡提供了強大的stl 標準模板庫 而且很多大神和相關書籍多提倡我們使用stl,切勿盲目自己寫,這樣反而效率更低。但是在使用stl的同時,能夠了解如何實現簡單的stl是很爽的。c 程式常用的資料描述方式是陣列描述和鏈式描述,而線性表可以用來說...
資料結構 線性表之鏈式儲存結構
資料結構定義 common.h ifndef hi comm h define hi comm h include include include include define list init size 100 線性表儲存空間的初始分配量 define list increment 10 線性表...
資料結構 鏈式儲存線性表
鏈式儲存結構的線性表 簡稱為鍊錶 將採用一組位址任意的儲存單元存放線性表中的資料元素,鏈式結構的線性表不會按線性的邏輯順序來儲存資料元素,它需要在每乙個資料元素裡儲存乙個引用下乙個資料元素的引用。優點 插入 刪除元素快,充分利用計算機記憶體空間 缺點 查詢元素需要整體遍歷,空間開銷大 單鏈表 cre...