亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

數據結構學習(C++)之雙向鏈表

2019-11-17 05:08:15
字體:
來源:轉載
供稿:網友

  原書這部分內容很多,至少相對于循環鏈表是很多。相信當你把單鏈表的指針域搞清楚后,這部分應該難不倒你。現在我的問題是,能不能從單鏈表派生出雙向鏈表?<?xml:namespace PRefix = o ns = "urn:schemas-microsoft-com:Office:office" />
你可以有幾種做法:



  一種就是先定義一個雙鏈節點--但是,它的名字必須叫Node,這是沒辦法的事;不然你就只好拷貝一份單鏈表的實現文件,把其中的Node全都替換成你的雙鏈節點名字,但是這就不叫繼續了。
另一種做法就是先定義一種結構例如這樣的:

template <class Type> class newtype
{
public:
Type data;
Node<newtype> *link;
}
  當你派生雙向鏈表時,這樣寫template <calss Type> class DblList : public List<newtype<Type> >,注重連續的兩個">"之間要有空格?;蛘吒静欢x這樣的結構,直接拿Node類型來做,例如我下面給出的。但是,請注重要完成"=="的重載,否則,你又要重寫Find函數,并且其他的某些操作也不方便。

  在開始完成你的從單鏈表派生出來的雙向鏈表之前,要在單鏈表這個基類中添加修改當前指針和當前前驅指針的接口,如下所示:

protected:
void Put(Node<Type> *p)//盡量不用,雙向鏈表將使用這個完成向前移動
{
current = p;
}

void PutPrior(Node<Type> *p)//盡量不用,原因同上
{
prior = p;
}
  因為這個接口很危險,而且幾乎用不到,所以我在前面并沒有給出,但要完成雙向鏈表最"杰出"的優點--向前移動當前指針,必須要使用。另外說的是,我從前也從來沒計劃從單鏈表派生雙鏈表,下面你將看到,這個過程很讓人煩人,甚至不如重寫一個來的省事,執行效率也不是很好,這種費力不討好的事做它有什么意思呢?的確,我也覺得我在鉆牛角尖。

  定義和實現

#ifndef DblList_H
#define DblList_H

#include "List.h"

template <class Type> class DblList : public List< Node<Type> >
{
public:
Type *Get()
{
if (pGet() != NULL) return &pGet()->data.data;
else return NULL;
}

Type *Next()
{
pNext();
return Get();
}

Type *Prior()
{
if (pGetPrior != NULL)
{
Put(pGetPrior());
PutPrior( (Node< Node<Type> >*)pGet()->data.link);
return Get();
}
return NULL;
}

void Insert(const Type &value)
{
Node<Type> newdata(value, (Node<Type>*)pGet());
List< Node<Type> >::Insert(newdata);
if (pGetNext()->link != NULL)
pGetNext()->link->data.link = (Node<Type>*)pGetNext();
}

BOOL Remove()
{
if (List< Node<Type> >::Remove())
{
pGet()->data.link = (Node<Type>*)pGetPrior();
return TURE;
}
return FALSE;
}

};

#endif
  【說明】只完成了最重要的Insert和Remove函數和最具特點的Prior()函數,其他的沒有重新實現。所以,你在這里使用單鏈表的其他方法,我不保證一定正確。并且,這里的指針類型轉換依靠于編譯器實現,我也不能肯定其他的編譯器編譯出來也能正確。對于讓不讓Prior返回頭節點的data,我考慮再三,反正用First();Get();這樣的組合也能返回,所以就不在乎他了,所以要是用Prior遍歷直到返回NULL,就會將頭節點的data輸出來了。

  【補充】至于雙向循環鏈表,也可以從這個雙向鏈表派生(仿照派生循環鏈表的方法);或者從循環鏈表派生(仿照派生雙向鏈表的方法),就不一一舉例了(再這樣下去,我就真鬧心的要吐血了)。至此,可以得出一個結論,鏈表的各種結構都是能從單鏈表派生出來的。換句話說,單鏈表是根本所在,假如研究透了單鏈表,各種鏈式結構都不難。

  一小段測試程序

void DblListTest_int()
{
DblList<int> a;
for (int i = 10; i > 1; i--) a.Insert(i);
for (i = 10; i > 1; i--) cout << *a.Next() << " ";
a.First();
cout << endl;
cout << *a.Next() << endl;
cout << *a.Next() << endl;
cout << *a.Next() << endl;
cout << *a.Next() << endl;
a.Remove();
cout << *a.Get() << endl;
cout << *a.Prior() << endl;
cout << *a.Prior() << endl;
cout << *a.Prior() << endl;

}
  【后記】從我對雙向鏈表不負責任的實現來看,我并不想這么來實現雙向鏈表,我只是嘗試怎樣最大限度的利用已有的類來實現這種類型。實踐證實,不如重寫一個。別人看起來也好看一些,自己寫起來也不用這樣鬧心。不過,這個過程讓我對函數的調用和返回的理解又更深了一步。假如你能第一次就寫對這里的Insert函數,相信你一定對C++有一定的感慨了。我也覺得,只有做一些創新,才能最已經很成熟的東西更深入的了解。比如,這些數據結構,在C++的標準庫(STL)中都可以直接拿來用,我們為什么還辛辛勞苦的寫,結果還不如人家原來的好。為了學習,這就是理由,這也是一切看起來很笨的事發生的理由。 更多文章 更多內容請看數據結構  數據結構教程  數據結構相關文章專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
这里只有精品视频| 色哟哟入口国产精品| 久久精品国产2020观看福利| 日韩电影大全免费观看2023年上| 欧美视频精品一区| 日韩视频免费大全中文字幕| 成人免费网视频| 欧美一区二区.| 91麻豆国产语对白在线观看| 日韩中文字幕国产| 亚洲一区中文字幕在线观看| 91国产美女在线观看| 91久久久国产精品| 国产精品久久久久久久久久| 欧美激情国产日韩精品一区18| 亚洲精品一区av在线播放| 欧美精品久久久久久久久久| 日韩av在线最新| 国产午夜精品免费一区二区三区| 日韩免费观看视频| 欧美午夜片在线免费观看| 色一情一乱一区二区| 影音先锋日韩有码| 成人免费观看49www在线观看| 精品二区三区线观看| 亚洲午夜精品久久久久久久久久久久| 国产欧美日韩中文字幕| 亚洲图片在线综合| 欧洲中文字幕国产精品| 在线一区二区日韩| 国产69精品久久久久9| 亚洲激情视频在线播放| 日韩在线高清视频| 亚洲aⅴ日韩av电影在线观看| 亚洲www永久成人夜色| 日本高清不卡的在线| 亚洲人成在线一二| 亚洲第一精品自拍| 久久国产精品免费视频| 成人妇女免费播放久久久| 亚洲毛片在线观看.| 中文字幕日韩在线视频| 亚洲欧美日本另类| 精品国模在线视频| 韩国国内大量揄拍精品视频| 国产精品999999| 欧美性理论片在线观看片免费| 亚洲一级片在线看| 亚洲天堂成人在线视频| 久久亚洲一区二区三区四区五区高| 日韩av在线免费看| 深夜福利亚洲导航| 国产精品v日韩精品| 欧美午夜精品久久久久久人妖| 欧美极品少妇xxxxⅹ免费视频| 亚洲激情视频网站| 日本道色综合久久影院| 色妞欧美日韩在线| 精品国产自在精品国产浪潮| 久久99精品国产99久久6尤物| 国产精品第三页| 久久成人精品一区二区三区| 国产精品日韩久久久久| 9.1国产丝袜在线观看| 久久久女人电视剧免费播放下载| 欧美性猛交xxxxx免费看| 亚洲激情小视频| 国产精品99久久99久久久二8| 精品高清美女精品国产区| 亚洲第一综合天堂另类专| 国产精品成人国产乱一区| 亚洲天天在线日亚洲洲精| 91嫩草在线视频| 国产精品嫩草影院一区二区| 98视频在线噜噜噜国产| 日韩在线免费观看视频| 1769国内精品视频在线播放| 97在线免费观看| 欧美激情精品久久久久久蜜臀| 日韩一区二区久久久| 亚洲免费伊人电影在线观看av| 国产精品色午夜在线观看| 国产性猛交xxxx免费看久久| 日韩电影大片中文字幕| 91理论片午午论夜理片久久| 欧美又大又硬又粗bbbbb| 欧洲美女免费图片一区| 亚洲精品国产欧美| 韩国19禁主播vip福利视频| 亚洲第一区在线观看| 国产精品国产三级国产aⅴ9色| 亚洲一区中文字幕在线观看| 成人欧美在线观看| 亚洲综合中文字幕68页| 亚洲已满18点击进入在线看片| 国产精品久久久久久久9999| 久久免费观看视频| 久久精品99无色码中文字幕| 欧美激情亚洲另类| 精品亚洲男同gayvideo网站| 国产欧美日韩免费看aⅴ视频| 欧美日韩激情美女| 亚洲第一页在线| 亚洲美女久久久| 一本色道久久88精品综合| 一区二区在线视频| 日韩在线视频二区| 亚洲最大的av网站| 亚洲人成网站免费播放| 色综合影院在线| 日韩成人激情在线| 日韩电影免费观看在线| 日韩精品小视频| 欧美尤物巨大精品爽| 欧美激情视频网址| 久久亚洲国产精品| 国产精品一区二区三| 欧美日韩成人黄色| 久久久久久久久久久久av| 亚洲色图色老头| www国产精品com| 久久精品人人做人人爽| 国产丝袜一区二区| 国产成人短视频| 人妖精品videosex性欧美| 亚洲va国产va天堂va久久| 亚洲iv一区二区三区| 亚洲色图色老头| 亚洲性猛交xxxxwww| 欧美日韩一区二区免费在线观看| 91久久久亚洲精品| 色偷偷噜噜噜亚洲男人| 亚洲欧洲一区二区三区久久| 欧美一级高清免费| 国产三级精品网站| 国内外成人免费激情在线视频网站| 丝袜美腿精品国产二区| 5252色成人免费视频| 亚洲国产精品va在看黑人| 97在线观看视频国产| 日韩国产精品视频| 亚洲综合日韩在线| 久久综合国产精品台湾中文娱乐网| 国产亚洲精品美女| 91精品国产亚洲| 国产日韩在线播放| 国产va免费精品高清在线| 国产精品一区二区三区免费视频| 91免费版网站入口| 欧美黑人狂野猛交老妇| 亚洲色图13p| 欧美三级免费观看| 欧美福利视频在线| 911国产网站尤物在线观看| 亚洲国产精品成人va在线观看| 久久久久日韩精品久久久男男| 成人a在线观看| 国产91精品黑色丝袜高跟鞋| 日韩精品在线观看一区| 91欧美精品午夜性色福利在线| 国产午夜精品免费一区二区三区| 精品亚洲男同gayvideo网站| 亚洲一区二区三区在线视频| 在线视频日韩精品|