C#數(shù)據(jù)結(jié)構(gòu)之順序表

數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合魂角。

算法為有基本運(yùn)算及規(guī)定的運(yùn)算順序所構(gòu)成的完整的解題步驟剩胁。

算法基于數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)是算法的基礎(chǔ)疫稿。

算法評(píng)價(jià)標(biāo)準(zhǔn):運(yùn)行時(shí)間蟋定,占用空間粉臊。


線(xiàn)性表

線(xiàn)性表是最簡(jiǎn)單的,最基本溢吻,最常用的數(shù)據(jù)結(jié)構(gòu)维费。

線(xiàn)性表接口定義

public interface IListDS<T>{

int GetLength();//求長(zhǎng)度

void Clear();//清空操作

bool IsEmpty();//判斷線(xiàn)性表是否為空

void Add(T item);//附加操作

void Insert(T item,int i);//插入操作

T Delete(int i);//刪除操作

T GetElem(int i);//取表元

T this[int index]{get;}定義一個(gè)索引器獲取元素

int Loccate(T value);//按值查找

}

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

順序表果元,單鏈表

雙向鏈表促王,循環(huán)鏈表


順序表

在計(jì)算機(jī)內(nèi),保存線(xiàn)性表最簡(jiǎn)單而晒、最自然的方式蝇狼,就是把表中的元素一個(gè)接一個(gè)地放進(jìn)順序的存儲(chǔ)單元,這就是線(xiàn)性表的順序存儲(chǔ)(Sequence

Storage)倡怎。線(xiàn)性表的順序存儲(chǔ)是指在內(nèi)存中用一塊地址連續(xù)的空間依次存放線(xiàn)性表的數(shù)據(jù)元素迅耘,用這種方式存儲(chǔ)的線(xiàn)性表叫順序表(Sequence List)

//定義一個(gè)泛型順序表類(lèi)

public class SeqList<T>:IListDS<T>

{

//字段

private int maxsize; //順序表的最大容量

private T[] data; //用于存儲(chǔ)順序表中數(shù)據(jù)元素的一維數(shù)組

private int last; //指定順序表中u字后一個(gè)數(shù)據(jù)元素的位置


//基本操作

? ? //索引器

public T this[int index]

{

get { return data[index]; }

set{ data[index]=value; }

}

//最后一個(gè)元素的位置屬性

public int Last

{

get{ return last; }

}

//最大容量屬性

public int Maxsize

{

get{ return maxszie; }

set{ maxsize=valule; }

}

//構(gòu)造方法

public SeqList(int size)

{

data = new T[size];

maxsize=size;

last=-1;

}

//求表中元素的個(gè)數(shù)

public int GetLength()

{

return last? + 1; //最后一個(gè)元素索引值+1

}

//清空元素

public int GetLength()

{

last = -1; //設(shè)置最后一個(gè)元素位置為-1在邏輯上清空元素贱枣,但在內(nèi)存中并未清除

}

//判斷是否為空表

public bool IsEmpty()

{

if(last == -1){retrun true;}

else{return false;}

}

//判斷表中元素是否已填滿(mǎn)

public bool IsFull()

{

if(last == maxsize - 1){return true;}

else{ return false; }

}

//在表的尾部追加元素

public bool Append(T item)

{

//判斷表中數(shù)據(jù)是否已填滿(mǎn)

if(IsFull()){? Console.WriteLine("順序表中的數(shù)據(jù)元素已填滿(mǎn),無(wú)法繼續(xù)執(zhí)行追加操作")颤专; return false; }

else{data[++last] = item;? //先使最后位置遞增1纽哥,以符合追加操作后的最后元素

? retrun true;}

}

//在表的位置i插入一個(gè)元素

public bool Insert(T item , int i)

{

//判斷表中數(shù)據(jù)是否已填滿(mǎn)

if(IsFull()){ Console.WriteLine("順序表中的數(shù)據(jù)元素已填滿(mǎn),無(wú)法繼續(xù)執(zhí)行插入操作");? return false;}

else{

//判斷用戶(hù)指定的插入位置是否合理

if(i<1 || i>last + 2){Console.WriteLine("插入元素的位置不正確栖秕,無(wú)法執(zhí)行操作")春塌; return false;}

else if(i == last +2){? data[last +1]=item; last++;}

//執(zhí)行一般插入操作

else{

//先將位置i起所有元素向后拷貝

for(int j = last;j>=i-1;j--){data[j+1]=data[j];}

//將新的元素賦給位置i

data[i-1]=item;

last++;

//這里之所以使用i-1因?yàn)槲恢胕的索引值為i-1

//這里計(jì)數(shù)從1開(kāi)始,而索引計(jì)數(shù)從0開(kāi)始

? ? ? ? }

return true;

}

}

//刪除表中位置i的位置

public T Delete(int i)

{

//定義要返回的元素簇捍,并賦初值

T tmp=default(T);

//判斷是否為空表

if(IsEmpty()){Console.WriteLine("順序表中不存在數(shù)據(jù)元素只壳,無(wú)法執(zhí)行刪除操作,");}

//判斷用戶(hù)指定的插入位置是否合理

else if(i<1 || i>last +1){Console.WriteLine("刪除元素的位置不正確暑塑,無(wú)法執(zhí)行刪除操作");}

//判斷用戶(hù)是否操作最后一個(gè)元素(無(wú)需進(jìn)行元素移動(dòng))

else if(i==last + 1){tmp =data[last--];}//FIXME

執(zhí)行一般操作

else{

tmp =data[i-1];

//向前移動(dòng)元素

for(int j=i;j<last;j++)? { data[j]=data[j+1];}

last --;

? ? ? ? }

//返回被操作的元素(或默認(rèn)值)

return tmp;

}

//獲取表中位置i的元素

public T GetElem(int i)

{

//定義要返回的元素吼句,并賦初值

T tmp = default(T);

//判斷是否為空表

if(IsEmpty()) { Console.WriteLine("獲取元素的位置不正確,無(wú)法執(zhí)行操作");}

//執(zhí)行獲取操作

else{tmp = data[i-1];}

//返回被獲取的元素(或默認(rèn)值)

return tmp;

}

//在表中查找值為value的元素

public int Locate(T value)

{

//定義要返回的索引事格,-1表示未找到或查找失敗

int i;

//判斷表是否為空表

if(IsEmpty()) { Console.WriteLine("順序表中不存在數(shù)據(jù)元素惕艳,無(wú)法執(zhí)行查找操作");? i=-1; ? }

else{

//開(kāi)始查找元素

for(i=0;i<=last;i++){

//判斷當(dāng)前元素是否與value匹配

if(value.Equals(data[i])){? //判斷元素與value匹配,直接跳出循環(huán) ? ? ? ? ? ? ? ?? break;}

? ? ? ? ? ? ? ? ? ? ? ? ? ?? }

//判斷查找索引是否超出表的最大索引值

if(i>last){ i = -1;}

? ?? }

//返回查找到的索引(或默認(rèn)值)

return i;

}


//對(duì)應(yīng)首括號(hào)

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驹愚,一起剝皮案震驚了整個(gè)濱河市尔艇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌么鹤,老刑警劉巖终娃,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蒸甜,居然都是意外死亡棠耕,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)柠新,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窍荧,“玉大人,你說(shuō)我怎么就攤上這事恨憎∪锿耍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵憔恳,是天一觀的道長(zhǎng)瓤荔。 經(jīng)常有香客問(wèn)我,道長(zhǎng)钥组,這世上最難降的妖魔是什么输硝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮程梦,結(jié)果婚禮上点把,老公的妹妹穿的比我還像新娘橘荠。我一直安慰自己,他們只是感情好郎逃,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布哥童。 她就那樣靜靜地躺著,像睡著了一般褒翰。 火紅的嫁衣襯著肌膚如雪如蚜。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天影暴,我揣著相機(jī)與錄音错邦,去河邊找鬼。 笑死型宙,一個(gè)胖子當(dāng)著我的面吹牛撬呢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妆兑,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼魂拦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了搁嗓?” 一聲冷哼從身側(cè)響起芯勘,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腺逛,沒(méi)想到半個(gè)月后荷愕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棍矛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年安疗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片够委。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荐类,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茁帽,到底是詐尸還是另有隱情玉罐,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布潘拨,位于F島的核電站吊输,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏战秋。R本人自食惡果不足惜璧亚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一讨韭、第九天 我趴在偏房一處隱蔽的房頂上張望脂信。 院中可真熱鬧癣蟋,春花似錦、人聲如沸狰闪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)埋泵。三九已至幔欧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丽声,已是汗流浹背礁蔗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雁社,地道東北人浴井。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像霉撵,于是被迫代替她去往敵國(guó)和親磺浙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法徒坡,類(lèi)相關(guān)的語(yǔ)法撕氧,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法喇完,異常的語(yǔ)法伦泥,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,587評(píng)論 18 399
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)锦溪,斷路器奄喂,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 之前在目標(biāo)的迭代中提到跨新,在開(kāi)智讀書(shū)會(huì)二期的【前】、【中】我Backlog中的任務(wù)和讀書(shū)目標(biāo)都有了小迭代坏逢。那參加了兩...
    MissUUU閱讀 323評(píng)論 0 2
  • 突然覺(jué)得每年掙個(gè)10萬(wàn)不難,也許是能力到了浮入,或者是對(duì)奶茶行業(yè)了解得差不多了龙优。 如同打lol,只練一個(gè)英雄事秀。技術(shù)上來(lái)...
    喜歡爬山閱讀 308評(píng)論 0 0
  • 那是一個(gè)白白凈凈的 兩腳獸 我只有一張她背影的照片 我去勾搭她 她被我勾搭 我在七月的最后一天表白 從此八月再?zèng)]回來(lái)
    孤高之泥鰍閱讀 194評(píng)論 0 0