資料結構之線性表(C ) 鏈式描述

2021-07-23 08:47:59 字數 2617 閱讀 7134

一般分為單鏈表,雙鏈表和迴圈鍊錶(單向或雙向)。

單鏈表結構是每個節點只有乙個鏈,例如

迴圈鍊錶是單鏈表的一種變種,單鏈表是將尾節點置為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...