資料結構與演算法 線性表鏈式儲存(單鏈表)

2021-07-02 06:22:55 字數 1985 閱讀 5400

今天總結單鏈表的實現.

什麼是鍊錶?

就是採去鏈式儲存結構的線性表,所謂鏈式儲存就好比火車的車廂一樣,一節一節的連線起來,成為乙個線性表。這種方式採用動態儲存分配方式,即程式在執行時根據實際需要申請記憶體空間,不需要時將記憶體空間釋放掉。

鍊錶用一組任意的儲存單元存放線性表中的各個元素,這組儲存單元可以是連續的,也可以是不連續的。

什麼是單鏈表?

單鏈表簡單理解就是單向的,就像火車一樣。如果將火車頭與火車為連線在一塊,就構成了迴圈鍊錶。

鍊錶的結構:鍊錶採用節點結構,這個節點分為兩部分,一部分儲存資料,一部分用來儲存下一節點的位址,通過此位址就可以將各節點連線在一塊。就好比火車車廂之間的連線,車廂用來儲存貨物,而車廂尾部有個掛鉤之類的裝置,用來連線兩節車廂。

看一張形象的圖,幫助理解.

具體實現:

//鍊錶節點

struct node ;

//鍊錶類

template class linklist

linklist(t a,int n); //使用含有n個元素的陣列a初始化鍊錶

~linklist(); //析構函式

void printlinklist(); //遍歷鍊錶中的元素

int getlength(); //獲取鍊錶長度

void insert(int i,t x); //插入

node*get(int i); //獲取第i個元素的位址

t delete(int i); //刪除 並返回刪除的元素

int locate(t x); //值為x的元素所在的位置

};//採用頭插法 初始化鍊錶

template linklist::linklist(t a,int n)

}

//析構函式 釋放結點

template linklist::~linklist()

}

//獲取鍊錶的長度

template int linklist::getlength()

return count;

}//迴圈遍歷鍊錶中的元素

template void linklist::printlinklist()

cout<

/* 返回指定位置的節點位址

思路:1.獲取工作指標p和計數器j,p指向第乙個結點,j-1

2.迴圈遍歷,直到p為空或j==i

3.返回p

*/template node* linklist::get(int i)

return p;

}

/**插入某元素到指定位置

思路:1.初始化工作指標p,使其指向插入位置的前乙個結點

2.新建乙個結點,儲存待插元素

3.將前一節點指向新建節點,並且將新建節點指向後續節點

*/template void linklist::insert(int i,t x) else

}

//刪除指定位置的元素 與插入類似

template t linklist::delete(int i)

return 0;

}template int linklist::locate(t x)

return -1; //未找到

}int main()

; linklistlist(a,6);

cout<

結果:

資料結構和演算法 線性表(鏈式儲存)

線性表是最常見和常用的adt。假設線性表的元素為整數,請基於單鏈式儲存結構實現線性表adt。基本功能包括 1 建立線性表 輸入有兩行 第一行乙個整數,是輸入元素的結束標誌,例如0,則在輸入結束時輸入0,就表示輸入結束了。第二行是線性表的各個元素,最後乙個是結束標誌。2 插入 輸入兩個整數,即元素插入...

資料結構 線性表鏈式儲存

對於線性鍊錶,有兩種表示方法,一種是包含頭節點的情況,如下圖 一種是不包含頭節點的情況,如下圖 本文中對線性鍊錶的表示,利用的是帶頭節點的定義方式。使用c 實現了線性鍊錶建立,初始化,刪除,插入,清空,遍歷,有序鍊錶合併等操作。煉表頭 頭指標 頭結點 煉表頭 指的是線性表第乙個元素所在結點 頭指標 ...

資料結構 線性表(鏈式儲存)

1 順序表 需要一片連續的記憶體空間,成員可以隨機訪問,訪問效率高 插入刪除資料存在資料搬移的現象,效率低 儲存密度高 鍊錶的特點 不需要連續的記憶體空間,不能隨機訪問元素,訪問效率低 插入刪除資料不存在資料搬移的現象,效率高 儲存密度比較低 2 無頭鍊錶 第乙個節點為資料節點,加入刪除第乙個節點,...