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

Num01-->線性表定義及順序表和鏈表

    在程序中锭环,經(jīng)常需要將一組(通常是同為某個(gè)類型的)數(shù)據(jù)元素作為整體管理和使用奋刽,需要?jiǎng)?chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個(gè)數(shù)可能發(fā)生變化(可以增加或刪除元素)。

    對(duì)于這種需求陶缺,最簡(jiǎn)單的解決方案便是將這樣一組元素看成一個(gè)序列,用元素在序列里的位置和順序洁灵,表示實(shí)際應(yīng)用中的某種有意義的信息饱岸,或者表示數(shù)據(jù)之間的某種關(guān)系。

    這樣的一組序列元素的組織形式徽千,我們可以將其抽象為線性表苫费。

    一個(gè)線性表是某類元素的一個(gè)集合,還記錄著元素之間的一種順序關(guān)系双抽。線性表是最基本的數(shù)據(jù)結(jié)構(gòu)之一百框,在實(shí)際程序中應(yīng)用非常廣泛,它還經(jīng)常被用作更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)基礎(chǔ)牍汹。

根據(jù)線性表的實(shí)際存儲(chǔ)方式铐维,分為兩種實(shí)現(xiàn)模型:

    1柬泽、順序表,將元素順序地存放在一塊連續(xù)的存儲(chǔ)區(qū)里方椎,元素間的順序關(guān)系由它們的存儲(chǔ)順序自然表示。
    
    2钧嘶、鏈表棠众,將元素存放在通過鏈接構(gòu)造起來的一系列存儲(chǔ)塊中。

Num02-->順序表的基本形式

這里寫圖片描述
    圖a表示的是順序表的基本形式有决,數(shù)據(jù)元素本身連續(xù)存儲(chǔ)闸拿,每個(gè)元素所占的存儲(chǔ)單元大小固定相同,元素的下標(biāo)是其邏輯地址书幕,而元素存儲(chǔ)的物理地址(實(shí)際內(nèi)存地址)可以通過存儲(chǔ)區(qū)的起始地址Loc (e0)加上邏輯地址(第i個(gè)元素)與存儲(chǔ)單元大行禄纭(c)的乘積計(jì)算而得,即:

Loc(ei) = Loc(e0) + c*i

故台汇,訪問指定元素時(shí)無需從頭遍歷苛骨,通過計(jì)算便可獲得對(duì)應(yīng)地址,其時(shí)間復(fù)雜度為O(1)苟呐。

如果元素的大小不統(tǒng)一痒芝,則須采用圖b的元素外置的形式,將實(shí)際數(shù)據(jù)元素另行存儲(chǔ)牵素,而順序表中各單元位置保存對(duì)應(yīng)元素的地址信息(即鏈接)严衬。由于每個(gè)鏈接所需的存儲(chǔ)量相同,通過上述公式笆呆,可以計(jì)算出元素鏈接的存儲(chǔ)位置请琳,而后順著鏈接找到實(shí)際存儲(chǔ)的數(shù)據(jù)元素。注意赠幕,圖b中的c不再是數(shù)據(jù)元素的大小俄精,而是存儲(chǔ)一個(gè)鏈接地址所需的存儲(chǔ)量,這個(gè)量通常很小榕堰。

圖b這樣的順序表也被稱為對(duì)實(shí)際數(shù)據(jù)的索引嘀倒,這是最簡(jiǎn)單的索引結(jié)構(gòu)。

Num03-->順序表的結(jié)構(gòu)與實(shí)現(xiàn)

Test01-->順序表的結(jié)構(gòu)

這里寫圖片描述
    一個(gè)順序表的完整信息包括兩部分:
    一部分是表中的元素集合局冰;
    另一部分是為實(shí)現(xiàn)正確操作而需記錄的信息测蘑,即有關(guān)表的整體情況的信息,這部分信息主要包括元素存儲(chǔ)區(qū)的容量和當(dāng)前表中已有的元素個(gè)數(shù)兩項(xiàng)康二。

Test02-->順序表的兩種基本實(shí)現(xiàn)

這里寫圖片描述
圖a為一體式結(jié)構(gòu)碳胳,存儲(chǔ)表信息的單元與元素存儲(chǔ)區(qū)以連續(xù)的方式安排在一塊存儲(chǔ)區(qū)里,兩部分?jǐn)?shù)據(jù)的整體形成一個(gè)完整的順序表對(duì)象沫勿。

一體式結(jié)構(gòu)整體性強(qiáng)挨约,易于管理味混。但是由于數(shù)據(jù)元素存儲(chǔ)區(qū)域是表對(duì)象的一部分,順序表創(chuàng)建后诫惭,元素存儲(chǔ)區(qū)就固定了翁锡。

圖b為分離式結(jié)構(gòu),表對(duì)象里只保存與整個(gè)表有關(guān)的信息(即容量和元素個(gè)數(shù))夕土,實(shí)際數(shù)據(jù)元素存放在另一個(gè)獨(dú)立的元素存儲(chǔ)區(qū)里馆衔,通過鏈接與基本表對(duì)象關(guān)聯(lián)。

Test03-->順序表元素存儲(chǔ)區(qū)替換

一體式結(jié)構(gòu)由于順序表信息區(qū)與數(shù)據(jù)區(qū)連續(xù)存儲(chǔ)在一起怨绣,所以若想更換數(shù)據(jù)區(qū)角溃,則只能整體搬遷,即整個(gè)順序表對(duì)象(指存儲(chǔ)順序表的結(jié)構(gòu)信息的區(qū)域)改變了篮撑。

分離式結(jié)構(gòu)若想更換數(shù)據(jù)區(qū)减细,只需將表信息區(qū)中的數(shù)據(jù)區(qū)鏈接地址更新即可,而該順序表對(duì)象不變赢笨。

Test04-->順序表元素存儲(chǔ)區(qū)擴(kuò)充

采用分離式結(jié)構(gòu)的順序表未蝌,若將數(shù)據(jù)區(qū)更換為存儲(chǔ)空間更大的區(qū)域,則可以在不改變表對(duì)象的前提下對(duì)其數(shù)據(jù)存儲(chǔ)區(qū)進(jìn)行了擴(kuò)充茧妒,所有使用這個(gè)表的地方都不必修改树埠。只要程序的運(yùn)行環(huán)境(計(jì)算機(jī)系統(tǒng))還有空閑存儲(chǔ),這種表結(jié)構(gòu)就不會(huì)因?yàn)闈M了而導(dǎo)致操作無法進(jìn)行嘶伟。人們把采用這種技術(shù)實(shí)現(xiàn)的順序表稱為動(dòng)態(tài)順序表怎憋,因?yàn)槠淙萘靠梢栽谑褂弥袆?dòng)態(tài)變化。

擴(kuò)充的兩種策略:

第一種:每次擴(kuò)充增加固定數(shù)目的存儲(chǔ)位置九昧,如每次擴(kuò)充增加10個(gè)元素位置绊袋,這種策略可稱為線性增長(zhǎng)。
特點(diǎn):節(jié)省空間铸鹰,但是擴(kuò)充操作頻繁癌别,操作次數(shù)多。

第二種:每次擴(kuò)充容量加倍蹋笼,如每次擴(kuò)充增加一倍存儲(chǔ)空間展姐。
特點(diǎn):減少了擴(kuò)充操作的執(zhí)行次數(shù),但可能會(huì)浪費(fèi)空間資源剖毯。以空間換時(shí)間圾笨,推薦的方式。

Num04-->順序表的操作

Test01-->增加

如圖所示逊谋,為順序表增加新元素111的三種方式

這里寫圖片描述

a. 尾端加入元素擂达,時(shí)間復(fù)雜度為O(1)

b. 非保序的加入元素(不常見),時(shí)間復(fù)雜度為O(1)
c. 保序的元素加入胶滋,時(shí)間復(fù)雜度為O(n)

Test02-->刪除

這里寫圖片描述

a. 刪除表尾元素板鬓,時(shí)間復(fù)雜度為O(1)
b. 非保序的元素刪除(不常見)悲敷,時(shí)間復(fù)雜度為O(1)
c. 保序的元素刪除,時(shí)間復(fù)雜度為O(n)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俭令,一起剝皮案震驚了整個(gè)濱河市后德,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抄腔,老刑警劉巖瓢湃,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異妓柜,居然都是意外死亡箱季,警方通過查閱死者的電腦和手機(jī)涯穷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門棍掐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拷况,你說我怎么就攤上這事作煌。” “怎么了赚瘦?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵粟誓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我起意,道長(zhǎng)鹰服,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任揽咕,我火速辦了婚禮悲酷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亲善。我一直安慰自己设易,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布蛹头。 她就那樣靜靜地躺著顿肺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渣蜗。 梳的紋絲不亂的頭發(fā)上屠尊,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音耕拷,去河邊找鬼知染。 笑死,一個(gè)胖子當(dāng)著我的面吹牛斑胜,可吹牛的內(nèi)容都是我干的控淡。 我是一名探鬼主播嫌吠,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掺炭!你這毒婦竟也來了辫诅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤涧狮,失蹤者是張志新(化名)和其女友劉穎炕矮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體者冤,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肤视,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涉枫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邢滑。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖愿汰,靈堂內(nèi)的尸體忽然破棺而出困后,到底是詐尸還是另有隱情,我是刑警寧澤衬廷,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布摇予,位于F島的核電站,受9級(jí)特大地震影響吗跋,放射性物質(zhì)發(fā)生泄漏侧戴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一跌宛、第九天 我趴在偏房一處隱蔽的房頂上張望酗宋。 院中可真熱鬧,春花似錦秩冈、人聲如沸本缠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丹锹。三九已至,卻和暖如春芬失,著一層夾襖步出監(jiān)牢的瞬間楣黍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工棱烂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留租漂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像哩治,于是被迫代替她去往敵國(guó)和親秃踩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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