2016-12-31-定義線性表的接口

自己實現(xiàn)一個List類利赋,深刻理解List類內(nèi)部是怎么運作的求厕。

實現(xiàn)一個線性表,需要實現(xiàn)什么方法债朵?
首先看下線性表的接口定義(也就是定義了線性表里面應(yīng)該有哪些方法):

public interface IListDS<T>//首先定義一個接口畸陡,作用域里都是要實現(xiàn)的方法、主要功能
{
      int GetLength();//取得當(dāng)前數(shù)組(或添加元素)的長度
      void Clear();//清空所有的數(shù)據(jù)
      bool IsEmpty();//判斷線性表是否有數(shù)據(jù)
      void Append(T item);//用來添加的架忌,相當(dāng)于void Add(T item);
      void Insert(T item,int i);//刪除操作
      T Delete(int i);//刪除操作
      T GetElem(int i);//取表元吞彤,即根據(jù)索引去取得元素
      T this[int index]{get;}//定義一個索引器,獲得元素
      int Locate(T value);//按值查找叹放,即根據(jù)元素去得到這個索引
}     

要實現(xiàn)上方的線性表饰恕,有很多的實現(xiàn)方式,存儲線性表時井仰,有很多的儲存方式埋嵌。

線性表的實現(xiàn)方式

線性表的實現(xiàn)方式有下面幾種:

順序表;
單鏈表:
      雙向鏈表(單鏈表的擴(kuò)展)
      循環(huán)鏈表(單鏈表的擴(kuò)展)
順序表的實現(xiàn)方式:

就是把數(shù)據(jù)元素按照順序連續(xù)的存儲到內(nèi)存當(dāng)中俱恶。這就是線性表的【順序存儲】(Sequence Storage)結(jié)構(gòu)雹嗦。
(Sequence就是順序的范舀,序列的意思)
線性表只要求數(shù)據(jù)元素是線性關(guān)系,但不對數(shù)據(jù)如何存儲有要求了罪,而順序表則是要求數(shù)據(jù)元素按照順序排序存放的線性表锭环。

順序表的特點:

表中相鄰的數(shù)據(jù)元素在內(nèi)存中存儲位置也相鄰。
下圖中泊藕,0~maxsize-1就是索引辅辩,方框就是數(shù)據(jù)元素占的內(nèi)存區(qū)域。

QQ截圖20161231163139.png
順序表的存儲:

C#語言中的數(shù)組娃圆,在內(nèi)存中占用的存儲空間玫锋,就是一組連續(xù)的存儲區(qū)域。因此讼呢,數(shù)組具有【任意存取】的特點撩鹿,所以,數(shù)組天生具有表示順序表的數(shù)據(jù)存儲區(qū)域的特性悦屏。

上圖舉例:因為元素存儲的地址是連續(xù)的三痰,且因為順序表存儲的是一樣的類型數(shù)據(jù)元素,所以每個占用的內(nèi)存大小也是一樣的窜管。
所以,只需要知道索引0號的位置(也就是【基地址】)稚机,就可以算出來每個元素的位置幕帆,這個位置指的是內(nèi)存的地址,有了內(nèi)存地址就可以訪問到這個元素赖条,進(jìn)行存取數(shù)據(jù)的操作失乾。


QQ截圖20161231165233.png

關(guān)于順序表的話,我們可以通過數(shù)組來進(jìn)行存取纬乍。

順序表的實現(xiàn):
public class SeqList<T>:IListDS<T>
{
      //...
}
使用代碼來實現(xiàn):
namespace 定義線性表的接口
{
    interface IListDS<T>//首先要定義一個接口碱茁,加個泛型<T>,第一個字母加個大寫I代表接口仿贬,因為系統(tǒng)已經(jīng)有一個IList接口纽竣,為避免重復(fù),加個DS代表數(shù)據(jù)結(jié)構(gòu)的意思茧泪。
    {     
        //主要功能:
        int GetLength();//得到長度的方法
        void Clear();//清空數(shù)據(jù)的操作
        bool IsEmpty();//判斷是否為空
        void Add(T item);//添加操作蜓氨,添加的數(shù)據(jù)肯定是T類型的
        void Insert(T item, int index);//插入操作,參數(shù)包括:插入的數(shù)據(jù)T item, 队伟,插入的位置int index
        T Delete(int index);//根據(jù)索引位置刪除穴吹,刪除之后把這個元素返回,返回的元素就是刪除的元素嗜侮。
        T this[int index] { get; }//通過索引器訪問元素港令,跟GetEle一樣的用途
        T GetEle(int index);//根據(jù)索引得到元素
        int Locate(T value);//根據(jù)值取得索
    }
}
使用順序表實現(xiàn)這個接口

因為方法都沒被實現(xiàn)啥容,所以都拋出了異常。

namespace 定義線性表的接口
{
    class SeqList<T>:IListDS<T>//解決方案里添加新的順序表類SeqList<T>顷霹,實現(xiàn)IList<T>接口
    {
        
        //作用域里這些方法默認(rèn)是沒有的咪惠,鼠標(biāo)框選IList后,鼠標(biāo)移動到IList下方空白處即出現(xiàn)標(biāo)志泼返,查看下拉列表選擇一個硝逢,即可自動補(bǔ)全下列方法。
        public int GetLength()
        {
            throw new NotImplementedException();
        }

        public void Clear()
        {
            throw new NotImplementedException();
        }

        public bool IsEmpty()
        {
            throw new NotImplementedException();
        }

        public void Add(T item)
        {
            throw new NotImplementedException();
        }

        public void Insert(T item, int index)
        {
            throw new NotImplementedException();
        }

        public T Delete(int index)
        {
            throw new NotImplementedException();
        }

        public T this[int index]
        {
            get { throw new NotImplementedException(); }
        }

        public T GetEle(int index)
        {
            throw new NotImplementedException();
        }

        public int Locate(T value)
        {
            throw new NotImplementedException();
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绅喉,一起剝皮案震驚了整個濱河市渠鸽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柴罐,老刑警劉巖徽缚,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異革屠,居然都是意外死亡凿试,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門似芝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來那婉,“玉大人,你說我怎么就攤上這事党瓮∠昃妫” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵寞奸,是天一觀的道長呛谜。 經(jīng)常有香客問我,道長枪萄,這世上最難降的妖魔是什么隐岛? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮瓷翻,結(jié)果婚禮上聚凹,老公的妹妹穿的比我還像新娘。我一直安慰自己齐帚,他們只是感情好元践,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著童谒,像睡著了一般单旁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饥伊,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天象浑,我揣著相機(jī)與錄音蔫饰,去河邊找鬼。 笑死愉豺,一個胖子當(dāng)著我的面吹牛篓吁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚪拦,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼杖剪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了驰贷?” 一聲冷哼從身側(cè)響起盛嘿,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎括袒,沒想到半個月后次兆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡锹锰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年芥炭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恃慧。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡园蝠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痢士,到底是詐尸還是另有隱情彪薛,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布良瞧,位于F島的核電站,受9級特大地震影響训唱,放射性物質(zhì)發(fā)生泄漏褥蚯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一况增、第九天 我趴在偏房一處隱蔽的房頂上張望赞庶。 院中可真熱鬧,春花似錦澳骤、人聲如沸歧强。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摊册。三九已至,卻和暖如春颊艳,著一層夾襖步出監(jiān)牢的瞬間茅特,已是汗流浹背忘分。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留白修,地道東北人妒峦。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像兵睛,于是被迫代替她去往敵國和親肯骇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容