C++實(shí)現(xiàn)靜態(tài)鏈表
本文實(shí)例為大家分享了C++實(shí)現(xiàn)靜態(tài)鏈表的具體代碼,供大家參考,具體內(nèi)容如下
一、動(dòng)態(tài)鏈表和靜態(tài)鏈表區(qū)別:
(1)動(dòng)態(tài)鏈表:
(2)靜態(tài)鏈表: 應(yīng)用:二叉樹(shù)
二、思路:
1.結(jié)點(diǎn)設(shè)置:T data;
int link;
2.鏈表要用一個(gè)avil來(lái)保存可分配空間的首地址;
3.初始化:引入頭結(jié)點(diǎn):elem[0];
頭結(jié)點(diǎn)先指向空NULL, 用-1表示;
avil存儲(chǔ)空分配的空間的首地址1;
然后讓其它可分配空間的結(jié)點(diǎn)的link指向坐標(biāo)大一的結(jié)點(diǎn);
三、實(shí)現(xiàn)程序:
#ifndef StaticList_h #define StaticList_h const int maxSize = 100; // 靜態(tài)鏈表大小 template <class T> struct SLinkNode { T data; // 結(jié)點(diǎn)數(shù)據(jù) int link; // 結(jié)點(diǎn)鏈接指針 }; template <class T> class StaticList { public: void InitList(); // 初始化 int Length(); // 計(jì)算靜態(tài)鏈表的長(zhǎng)度 int Search(T x); // 在靜態(tài)鏈表中查找具有給定值的結(jié)點(diǎn) int Locate(int i); // 在靜態(tài)鏈表中查找第i個(gè)結(jié)點(diǎn) bool Append(T x); // 在靜態(tài)鏈表的表尾追加一個(gè)新結(jié)點(diǎn) bool Insert(int i, T x); // 在靜態(tài)鏈表第i個(gè)結(jié)點(diǎn)后插入新結(jié)點(diǎn) bool Remove(int i); // 在靜態(tài)鏈表中釋放第i個(gè)結(jié)點(diǎn) bool isEmpty(); // 判鏈表空否? private: SLinkNode<T> elem[maxSize]; int avil; // 當(dāng)前可分配空間首地址 }; template <class T> void StaticList<T>::InitList() { // 初始化 elem[0].link = -1; avil = 1; // 當(dāng)前可分配空間從1開(kāi)始建立帶表頭結(jié)點(diǎn)的空鏈表 for(int i = 1; i < maxSize - 1; i++) elem[i].link = i + 1; // 構(gòu)成空閑鏈接表 elem[maxSize-1].link = -1; } template <class T> int StaticList<T>::Length() { // 計(jì)算靜態(tài)鏈表的長(zhǎng)度 int p = elem[0].link; int i = 0; while(p != -1) { p = elem[p].link; i++; } return i; } template <class T> int StaticList<T>::Search(T x) { // 在靜態(tài)鏈表中查找具有給定值的結(jié)點(diǎn) int p = elem[0].link; // 指針p指向鏈表第一個(gè)結(jié)點(diǎn) while(p != -1) { // 逐個(gè)結(jié)點(diǎn)檢測(cè)查找給定的值 if(elem[p].data == x) break; else p = elem[p].link; } return p; } template <class T> int StaticList<T>::Locate(int i) { // 在靜態(tài)鏈表中查找第i個(gè)結(jié)點(diǎn) if(i < 0) // 參數(shù)不合理 return -1; if(i == 0) return 0; int j = 1, p = elem[0].link; while(p != -1 && j < i) { // 循鏈查找第i號(hào)結(jié)點(diǎn) p = elem[p].link; j++; } return p; } template <class T> bool StaticList<T>::Append(T x) { // 在靜態(tài)鏈表的表尾追加一個(gè)新結(jié)點(diǎn) if(avil == -1) // 沒(méi)有分配到存儲(chǔ)空間 return false; int q = avil; // 分配結(jié)點(diǎn) avil = elem[avil].link; // 指向下一個(gè)可分配的結(jié)點(diǎn) elem[q].data = x; elem[q].link = -1; int p = 0; // 查找表尾 while(elem[p].link != -1) p = elem[p].link; elem[p].link = q; // 追加 return true; } template <class T> bool StaticList<T>::Insert(int i, T x) { // 在靜態(tài)鏈表第i個(gè)結(jié)點(diǎn)后插入新結(jié)點(diǎn) int p = Locate(i); if(p == -1) // 找不到結(jié)點(diǎn) return false; int q = avil; // 分配結(jié)點(diǎn) avil = elem[avil].link; elem[q].data = x; elem[q].link = elem[p].link; // 鏈入 elem[p].link = q; return true; } template <class T> bool StaticList<T>::Remove(int i) { // 在靜態(tài)鏈表中釋放第i個(gè)結(jié)點(diǎn) int p = Locate(i-1); if(p == -1) // 找不到結(jié)點(diǎn) return false; int q = elem[p].link; // 第i號(hào)結(jié)點(diǎn) elem[p].link = elem[q].link; elem[q].link = avil; // 釋放,讓q的link指向原可分配的結(jié)點(diǎn) avil = q; // avil指向q return true; } template <class T> bool StaticList<T>::isEmpty() { // 判鏈表空否? if(elem[0].link == -1) return true; return false; } #endif /* StaticList_h */
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
教你如何使用C++ 統(tǒng)計(jì)地鐵中站名出現(xiàn)的字的個(gè)數(shù)
通過(guò)本文教大家如何使用C++ 統(tǒng)計(jì)地鐵中站名出現(xiàn)的字的個(gè)數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-01-01C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度,文章基于c語(yǔ)言的相關(guān)資料展開(kāi)詳細(xì)介紹,具有一定的參價(jià)值,需要的小伙伴可以參考一下2022-05-05Visual Studio 2019安裝使用C語(yǔ)言程序(VS2019 C語(yǔ)言)
這篇文章主要介紹了Visual Studio 2019安裝使用C語(yǔ)言程序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03重啟后nvidia-smi命令不可執(zhí)行出現(xiàn)“Make?sure?that?the?latest?NVIDIA?
這篇文章主要介紹了重啟后nvidia-smi命令不可執(zhí)行,出現(xiàn)“Make?sure?that?the?latest?NVIDIA?driver?is?installed?and?running.”問(wèn)題,本文給大家分享最新完美解決方法,需要的朋友可以參考下2022-12-12