亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++實(shí)現(xiàn)靜態(tài)鏈表

 更新時(shí)間:2020年07月27日 11:50:32   作者:ChanJose  
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)靜態(tài)鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(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ù)

    教你如何使用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-01
  • C++學(xué)習(xí)之線程詳解

    C++學(xué)習(xí)之線程詳解

    多線程是開(kāi)發(fā)中必不可少的,往往我們需要多個(gè)任務(wù)并行,就需要多線程開(kāi)發(fā)。本文將帶大家深入學(xué)習(xí)一下C++中的常用的一些知識(shí)點(diǎn),感興趣的同學(xué)可以了解一下
    2021-12-12
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度

    C語(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-05
  • Visual Studio 2019安裝使用C語(yǔ)言程序(VS2019 C語(yǔ)言)

    Visual 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
  • c++判斷文件是否存在的方法匯總

    c++判斷文件是否存在的方法匯總

    這篇文章主要介紹了c++判斷文件是否存在的方法匯總,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++重載輸入和輸出運(yùn)算符詳解

    C++重載輸入和輸出運(yùn)算符詳解

    在C++中,標(biāo)準(zhǔn)庫(kù)本身已經(jīng)對(duì)左移運(yùn)算符<<和右移運(yùn)算符>>分別進(jìn)行了重載,使其能夠用于不同數(shù)據(jù)的輸入輸出,本節(jié)以前面的?complex?類(lèi)為例來(lái)演示輸入輸出運(yùn)算符的重載,需要的朋友可以參考下
    2023-09-09
  • C++ STL庫(kù)應(yīng)用匯總

    C++ STL庫(kù)應(yīng)用匯總

    在本篇文章里小編給大家整理的是關(guān)于C++ STL庫(kù)應(yīng)用集合,有需要的朋友們可以參考下。
    2020-03-03
  • 詳解C語(yǔ)言中二分查找的運(yùn)用技巧

    詳解C語(yǔ)言中二分查找的運(yùn)用技巧

    本文主要介紹了二分查找在實(shí)際中的應(yīng)用,通過(guò)分析幾個(gè)應(yīng)用二分查找的實(shí)例,總結(jié)下能使用二分查找算法的一些共同點(diǎn),感興趣的可以了解一下
    2022-03-03
  • 重啟后nvidia-smi命令不可執(zhí)行出現(xiàn)“Make?sure?that?the?latest?NVIDIA?driver?is?installed?and?running.”的問(wèn)題解決

    重啟后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
  • 一篇文章教你3分鐘如何發(fā)布Qt程序

    一篇文章教你3分鐘如何發(fā)布Qt程序

    這篇文章主要給大家介紹了關(guān)于教你3分鐘如何發(fā)布Qt程序的相關(guān)資料,文中通過(guò)實(shí)例代碼結(jié)束的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論