中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

C++如何實現(xiàn)靜態(tài)鏈表

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

為盧龍等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及盧龍網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、盧龍網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

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

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

C++如何實現(xiàn)靜態(tài)鏈表

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

C++如何實現(xiàn)靜態(tài)鏈表

二、思路:

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

                     int link;

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

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

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

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

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

三、實現(xiàn)程序:

#ifndef StaticList_h
#define StaticList_h
const int maxSize = 100; // 靜態(tài)鏈表大小
template <class T>
struct SLinkNode {
 T data; // 結(jié)點數(shù)據(jù)
 int link; // 結(jié)點鏈接指針
};
 
template <class T>
class StaticList {
public:
 void InitList(); // 初始化
 int Length(); // 計算靜態(tài)鏈表的長度
 int Search(T x); // 在靜態(tài)鏈表中查找具有給定值的結(jié)點
 int Locate(int i); // 在靜態(tài)鏈表中查找第i個結(jié)點
 bool Append(T x); // 在靜態(tài)鏈表的表尾追加一個新結(jié)點
 bool Insert(int i, T x); // 在靜態(tài)鏈表第i個結(jié)點后插入新結(jié)點
 bool Remove(int i); // 在靜態(tài)鏈表中釋放第i個結(jié)點
 bool isEmpty(); // 判鏈表空否?
private:
 SLinkNode<T> elem[maxSize];
 int avil; // 當前可分配空間首地址
};
 
template <class T>
void StaticList<T>::InitList() {
 // 初始化
 elem[0].link = -1;
 avil = 1;
 // 當前可分配空間從1開始建立帶表頭結(jié)點的空鏈表
 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() {
 // 計算靜態(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é)點
 int p = elem[0].link; // 指針p指向鏈表第一個結(jié)點
 
 while(p != -1) { // 逐個結(jié)點檢測查找給定的值
 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個結(jié)點
 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é)點
 p = elem[p].link;
 j++;
 }
 return p;
}
 
template <class T>
bool StaticList<T>::Append(T x) {
 // 在靜態(tài)鏈表的表尾追加一個新結(jié)點
 if(avil == -1) // 沒有分配到存儲空間
 return false;
 int q = avil; // 分配結(jié)點
 avil = elem[avil].link; // 指向下一個可分配的結(jié)點
 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個結(jié)點后插入新結(jié)點
 int p = Locate(i);
 
 if(p == -1) // 找不到結(jié)點
 return false;
 int q = avil; // 分配結(jié)點
 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個結(jié)點
 int p = Locate(i-1);
 
 if(p == -1) // 找不到結(jié)點
 return false;
 int q = elem[p].link; // 第i號結(jié)點
 elem[p].link = elem[q].link;
 elem[q].link = avil; // 釋放,讓q的link指向原可分配的結(jié)點
 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)容,是不是對C++如何實現(xiàn)靜態(tài)鏈表有進一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章名稱:C++如何實現(xiàn)靜態(tài)鏈表
轉(zhuǎn)載來于:http://www.rwnh.cn/article34/jijppe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、定制開發(fā)、響應(yīng)式網(wǎng)站App設(shè)計、電子商務(wù)建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
雷州市| 永昌县| 诏安县| 南溪县| 依兰县| 饶平县| 津南区| 达日县| 昆山市| 龙南县| 南木林县| 利辛县| 怀化市| 南郑县| 东乌| 栾城县| 白玉县| 永嘉县| 青冈县| 巴里| 长治县| 台山市| 南安市| 平南县| 漾濞| 安龙县| 乡城县| 中超| 陵川县| 福泉市| 盘山县| 东辽县| 阿城市| 克什克腾旗| 黄龙县| 凉城县| 南投市| 沾益县| 宁强县| 钟山县| 城固县|