亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++如何實現靜態鏈表

發布時間:2020-07-29 15:04:09 來源:億速云 閱讀:123 作者:小豬 欄目:編程語言

這篇文章主要講解了C++如何實現靜態鏈表,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

一、動態鏈表和靜態鏈表區別:

(1)動態鏈表:

C++如何實現靜態鏈表

(2)靜態鏈表:       應用:二叉樹

C++如何實現靜態鏈表

二、思路:

1.結點設置:T data;

                     int link;

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

3.初始化:引入頭結點:elem[0];

                  頭結點先指向空NULL, 用-1表示;

                  avil存儲空分配的空間的首地址1;

                  然后讓其它可分配空間的結點的link指向坐標大一的結點;

三、實現程序:

#ifndef StaticList_h
#define StaticList_h
const int maxSize = 100; // 靜態鏈表大小
template <class T>
struct SLinkNode {
 T data; // 結點數據
 int link; // 結點鏈接指針
};
 
template <class T>
class StaticList {
public:
 void InitList(); // 初始化
 int Length(); // 計算靜態鏈表的長度
 int Search(T x); // 在靜態鏈表中查找具有給定值的結點
 int Locate(int i); // 在靜態鏈表中查找第i個結點
 bool Append(T x); // 在靜態鏈表的表尾追加一個新結點
 bool Insert(int i, T x); // 在靜態鏈表第i個結點后插入新結點
 bool Remove(int i); // 在靜態鏈表中釋放第i個結點
 bool isEmpty(); // 判鏈表空否?
private:
 SLinkNode<T> elem[maxSize];
 int avil; // 當前可分配空間首地址
};
 
template <class T>
void StaticList<T>::InitList() {
 // 初始化
 elem[0].link = -1;
 avil = 1;
 // 當前可分配空間從1開始建立帶表頭結點的空鏈表
 for(int i = 1; i < maxSize - 1; i++)
 elem[i].link = i + 1; // 構成空閑鏈接表
 elem[maxSize-1].link = -1;
}
 
template <class T>
int StaticList<T>::Length() {
 // 計算靜態鏈表的長度
 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) {
 // 在靜態鏈表中查找具有給定值的結點
 int p = elem[0].link; // 指針p指向鏈表第一個結點
 
 while(p != -1) { // 逐個結點檢測查找給定的值
 if(elem[p].data == x)
  break;
 else
  p = elem[p].link;
 }
 return p;
}
 
template <class T>
int StaticList<T>::Locate(int i) {
 // 在靜態鏈表中查找第i個結點
 if(i < 0) // 參數不合理
 return -1;
 if(i == 0)
 return 0;
 int j = 1, p = elem[0].link;
 while(p != -1 && j < i) { // 循鏈查找第i號結點
 p = elem[p].link;
 j++;
 }
 return p;
}
 
template <class T>
bool StaticList<T>::Append(T x) {
 // 在靜態鏈表的表尾追加一個新結點
 if(avil == -1) // 沒有分配到存儲空間
 return false;
 int q = avil; // 分配結點
 avil = elem[avil].link; // 指向下一個可分配的結點
 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) {
 // 在靜態鏈表第i個結點后插入新結點
 int p = Locate(i);
 
 if(p == -1) // 找不到結點
 return false;
 int q = avil; // 分配結點
 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) {
 // 在靜態鏈表中釋放第i個結點
 int p = Locate(i-1);
 
 if(p == -1) // 找不到結點
 return false;
 int q = elem[p].link; // 第i號結點
 elem[p].link = elem[q].link;
 elem[q].link = avil; // 釋放,讓q的link指向原可分配的結點
 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 */

看完上述內容,是不是對C++如何實現靜態鏈表有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新乡县| 白朗县| 佛学| 介休市| 澄城县| 嘉禾县| 芜湖县| 中阳县| 台江县| 曲沃县| 赤壁市| 呼图壁县| 长岛县| 吉水县| 孝昌县| 鄯善县| 津南区| 东丽区| 屏东县| 女性| 江安县| 广水市| 金溪县| 深泽县| 芮城县| 陇川县| 班戈县| 吉林市| 通道| 武陟县| 精河县| 陆丰市| 霍州市| 北海市| 唐海县| 济源市| 洛川县| 花莲县| 扎兰屯市| 偃师市| 襄樊市|