最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)容如下

一、動態(tài)鏈表和靜態(tài)鏈表區(qū)別:

(1)動態(tài)鏈表:

(2)靜態(tài)鏈表:       應(yīng)用:二叉樹

二、思路:

1.結(jié)點(diǎn)設(shè)置:T data;

                     int link;

2.鏈表要用一個(gè)avil來保存可分配空間的首地址;

3.初始化:引入頭結(jié)點(diǎn):elem[0];

                  頭結(jié)點(diǎn)先指向空NULL, 用-1表示;

                  avil存儲空分配的空間的首地址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)鏈表的長度
 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開始建立帶表頭結(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)鏈表的長度
 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)檢測查找給定的值
 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號結(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) // 沒有分配到存儲空間
 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號結(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 */

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ 強(qiáng)制類型轉(zhuǎn)換詳解

    C++ 強(qiáng)制類型轉(zhuǎn)換詳解

    這篇文章主要介紹的是C++ 強(qiáng)制類型轉(zhuǎn)換詳解,C語言中的強(qiáng)制轉(zhuǎn)換主要用于普通數(shù)據(jù)類型、指針的強(qiáng)制轉(zhuǎn)換,沒有類型檢查,轉(zhuǎn)換不安全,下面我們來看看其具體語法及詳細(xì)內(nèi)容
    2021-11-11
  • C語言中的指針 初階

    C語言中的指針 初階

    這篇文章主要介紹的是關(guān)于初級階段學(xué)習(xí)C語言中指針的一些內(nèi)容,那就是指針是什么?簡單的說,就是通過它能找到以它為地址的內(nèi)存單元。下面文章我們就來詳細(xì)介紹該內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • C語言中輸入函數(shù)(scanf()、fgets()和gets())的區(qū)別詳解

    C語言中輸入函數(shù)(scanf()、fgets()和gets())的區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于C語言中三種輸入函數(shù)(scanf()、fgets()和gets())區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • C++中關(guān)于this指針的入門介紹

    C++中關(guān)于this指針的入門介紹

    this?指針在C++類和對象中是個(gè)很方便實(shí)用的關(guān)鍵字,可以簡化對象成員屬性的調(diào)用,使代碼表達(dá)的含義更加準(zhǔn)確;在之前的學(xué)習(xí)中我們都可以判斷變量所占內(nèi)存空間大小,那么我們創(chuàng)建的類對象所占的內(nèi)存空間怎么計(jì)算呢?想知道this的妙用和類對象占用的內(nèi)存空間就來跟我學(xué)習(xí)吧
    2022-07-07
  • C語言的分支和循環(huán)語句你了解嗎

    C語言的分支和循環(huán)語句你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C語言的分支和循環(huán)語句,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 淺理解C++ 人臉識別系統(tǒng)的實(shí)現(xiàn)

    淺理解C++ 人臉識別系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了淺理解C++ 人臉識別系統(tǒng)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • opencv3/C++輪廓的提取與篩選方式

    opencv3/C++輪廓的提取與篩選方式

    今天小編就為大家分享一篇opencv3/C++輪廓的提取與篩選方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++使用tinyxml庫處理XML文件

    C++使用tinyxml庫處理XML文件

    TinyXML是一個(gè)開源的解析XML的解析庫,能夠用于C++,能夠在Windows或Linux中編譯,這個(gè)解析庫的模型通過解析XML文件,然后在內(nèi)存中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹,本文為大家介紹的是使用tinyxml庫處理XML文件,需要的可以參考一下
    2023-07-07
  • C++中sort()函數(shù)和priority_queue容器中比較函數(shù)的區(qū)別詳析

    C++中sort()函數(shù)和priority_queue容器中比較函數(shù)的區(qū)別詳析

    C++中sort()和priority_queue都能自定義比較函數(shù),其中sort()自定義的比較函數(shù)比較好理解,priority_queue中自定義的比較函數(shù)的效果和sort()是相反的,這篇文章主要給大家介紹了關(guān)于C++中sort()函數(shù)和priority_queue容器中比較函數(shù)的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • C++非遞歸建立二叉樹實(shí)例

    C++非遞歸建立二叉樹實(shí)例

    這篇文章主要介紹了C++非遞歸建立二叉樹的方法,實(shí)例分析了二叉樹的原理與C++實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04

最新評論

郑州市| 阜新| 丹东市| 安龙县| 广东省| 蓝田县| 健康| 绥滨县| 康乐县| 阳东县| 鱼台县| 北宁市| 林口县| 屏东市| 始兴县| 内丘县| 稻城县| 上蔡县| 潞城市| 铅山县| 曲水县| 芦溪县| 陕西省| 桦南县| 平原县| 南陵县| 金川县| 宁晋县| 库尔勒市| 高密市| 阿坝县| 南平市| 讷河市| 巴马| 合阳县| 乐平市| 屯昌县| 鄂尔多斯市| 综艺| 鄂州市| 平顶山市|