国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

圖解幾種常見的線性表

wawor4827 / 1616人閱讀

摘要:下面來看一下,有哪些數(shù)據(jù)結(jié)構(gòu)屬于線性表吧棧特性先進(jìn)后出只有唯一的一個(gè)出入口介紹棧又名堆棧,它是一種運(yùn)算受限的線性表。

原文是在我自己博客中,小伙伴也可以點(diǎn)閱讀原文進(jìn)行跳轉(zhuǎn)查看,還有好聽的背景音樂噢背景音樂已取消~ 2333333
線性表

什么是線性表?就是一種連續(xù)或間斷存儲的數(shù)組,這里的連續(xù)和間斷是針對物理內(nèi)存空間中線性表元素之間是否連續(xù),其中連續(xù)數(shù)組對應(yīng)內(nèi)置數(shù)組的實(shí)現(xiàn)方式,間斷數(shù)組對應(yīng)的是指針的實(shí)現(xiàn)方式,這種方式也稱為鏈表實(shí)現(xiàn)。

也就是說,線性表有兩種實(shí)現(xiàn)方式,一種是內(nèi)置數(shù)組實(shí)現(xiàn),另一種是鏈表實(shí)現(xiàn)。
下面來看一下,有哪些數(shù)據(jù)結(jié)構(gòu)屬于線性表吧!

棧(stack) 特性

先進(jìn)后出

只有唯一的一個(gè)出入口

介紹
棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個(gè)棧插入新元素又稱作進(jìn)棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個(gè)棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

通過上面的話語表達(dá),相信不難理解棧的概念。下面我們上圖感受一下棧和入棧出棧情況:

上圖中我們可以看到入棧、出棧的實(shí)際情況。只有一個(gè)入口(缺口),在這個(gè)缺口處,進(jìn)行入棧和出棧操作。在現(xiàn)實(shí)生活中更形象的比喻就是壘磚。
磚一次一次往上疊加,取的時(shí)候也是從最上部取,一直取到底部的最后一塊。

php實(shí)現(xiàn)

php也可以實(shí)現(xiàn)簡單的棧,由于php中沒有提供很好的操作指針的方式,所以只能通過數(shù)組的方式實(shí)現(xiàn)。使用連個(gè)函數(shù)就可以,它們分別是 array_push和array_pop

array_push 將一個(gè)或多個(gè)單元壓入數(shù)組的末尾(入棧);

array_pop 彈出數(shù)組最后一個(gè)單元(出棧)

簡單代碼示例:

$arr = [];

array_push($arr, 1); // $arr[] = 1;
print_r($arr);
sleep(1);

array_push($arr, 2); // $arr[] = 2;
print_r($arr);
sleep(1);

array_push($arr, 3); // $arr[] = 3;
print_r($arr);
sleep(1);

$val = array_pop($arr);
echo $val . "

";
print_r($arr);
sleep(1);

$val = array_pop($arr);
echo $val . "

";
print_r($arr);

把這段代碼放在cli下跑,就能看到效果了,看一下運(yùn)行g(shù)if圖:

從命令行的執(zhí)行結(jié)果來看,我們先依次入棧1、2、3三個(gè)值,后來取出的時(shí)候,也是按照棧的先進(jìn)后出,后進(jìn)先出的特性出棧的。

隊(duì)列(queue) 特性

先進(jìn)先出

兩個(gè)缺口,一入口,一個(gè)出口

介紹
隊(duì)列(queue)是一種采用先進(jìn)先出(FIFO)策略的抽象數(shù)據(jù)結(jié)構(gòu),它的想法來自于生活中排隊(duì)的策略。在生活中比較形象的比喻就是排隊(duì)了。

php實(shí)現(xiàn)

同樣的,php中也可以以數(shù)組的形式實(shí)現(xiàn)隊(duì)列,兩個(gè)函數(shù)array_push和array_shift

array_push 將一個(gè)或多個(gè)單元壓入數(shù)組的末尾(入隊(duì));

array_shift 將數(shù)組開頭的單元移出數(shù)組(出隊(duì))

可以發(fā)現(xiàn)array_push和上面的棧入棧是同一個(gè)函數(shù),其實(shí)兩個(gè)函數(shù)的作用一樣。用在這里就表示為入隊(duì)了。

簡單代碼示例:

header("Content-type:text/html;charset=utf-8");  

$arr = [];
echo "入隊(duì)-1 array_push($arr, 1)" . "
";
array_push($arr, 1); // $arr[] = 1;
print_r($arr);
sleep(1);
echo "入隊(duì)-2 array_push($arr, 2)" . "
";
array_push($arr, 2); // $arr[] = 2;
print_r($arr);
sleep(1);
echo "入隊(duì)-3 array_push($arr, 2)" . "
";
array_push($arr, 3); // $arr[] = 3;
print_r($arr);
sleep(1);

echo "出隊(duì)-3 array_shift($arr)" . "
";
$val = array_shift($arr);
echo $val . "

";
print_r($arr);
sleep(1);

echo "出隊(duì)-2 array_shift($arr)" . "
";
$val = array_shift($arr);
echo $val . "

";
print_r($arr);

圖示:

從命令行的執(zhí)行結(jié)果我們可以看到,我們依次入隊(duì) 1、2、3三個(gè)值,出隊(duì)的時(shí)候先出1,再出2.符合我們隊(duì)列的特性,先進(jìn)先出,后進(jìn)后出。

單鏈表 特性

由每一個(gè)節(jié)點(diǎn)組成

每個(gè)節(jié)點(diǎn)中包含下一個(gè)節(jié)點(diǎn)的指針(*next)

介紹
單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以結(jié)點(diǎn)來表示的,每個(gè)結(jié)點(diǎn)的構(gòu)成:元素(數(shù)據(jù)元素的映象) + 指針(指示后繼元素存儲位置),元素就是存儲數(shù)據(jù)的存儲單元,指針就是連接每個(gè)結(jié)點(diǎn)的地址數(shù)據(jù)

鏈表有兩個(gè)比較重要的部分組成:

指針 指向下一個(gè)節(jié)點(diǎn)的地址,(即內(nèi)存位置的直接地址)

節(jié)點(diǎn) 鏈表中的組成部分,對于單鏈表,一個(gè)節(jié)點(diǎn)里面包含節(jié)點(diǎn)數(shù)據(jù)和下一個(gè)節(jié)點(diǎn)的指針

圖中我們可以看到,單向鏈表由一個(gè)頭指針、頭節(jié)點(diǎn)、n個(gè)元素節(jié)點(diǎn)和尾節(jié)點(diǎn)組成。
其中頭指針代表,我們根據(jù)這個(gè)指針可以找到對應(yīng)的鏈表
頭節(jié)點(diǎn),用來存儲鏈表的一些信息,比如鏈表長度,頭節(jié)點(diǎn)指針指向第一個(gè)元素節(jié)點(diǎn)
每個(gè)節(jié)點(diǎn)中又包括,節(jié)點(diǎn)數(shù)據(jù)(data)和指針(*next指向下一個(gè)元素節(jié)點(diǎn))、
一直到尾節(jié)點(diǎn)為null

雙向鏈表 特性

同單鏈表類似由一個(gè)一個(gè)的節(jié)點(diǎn)組成

與單向鏈表不同的是,每個(gè)節(jié)點(diǎn)中包含了除數(shù)據(jù)(data)之外的上一個(gè)節(jié)點(diǎn)的指針(*prev)和下一個(gè)節(jié)點(diǎn)的指針(*next)

介紹
雙向鏈表又叫做雙鏈表;跟單向鏈表不同的是,他的每個(gè)節(jié)點(diǎn)都有兩個(gè)指針,一個(gè)指向前面的一個(gè)節(jié)點(diǎn),一個(gè)指向后面的節(jié)點(diǎn)。通過這兩個(gè)指針我們可以很方便的通過某一個(gè)節(jié)點(diǎn),訪問到相(前)鄰(后)的兩個(gè)節(jié)點(diǎn)。

我們來看一下,雙向鏈表的圖示:

圖中我們可以看到,除了頭節(jié)點(diǎn)和尾節(jié)點(diǎn)之外,每個(gè)中間節(jié)點(diǎn)與節(jié)點(diǎn)之間都是首尾相連,每個(gè)節(jié)點(diǎn)保存了上一個(gè)節(jié)點(diǎn)的指針和下一個(gè)節(jié)點(diǎn)的指針,這就是與單鏈表的不同之處。

注:我們也可以構(gòu)造雙向循環(huán)鏈表;尾節(jié)點(diǎn)的下一個(gè)指針*next指向頭節(jié)點(diǎn),而頭節(jié)點(diǎn)的*prev指向尾節(jié)點(diǎn);這樣就構(gòu)成了一個(gè)雙向循環(huán)鏈表;下圖所示,我們只需把雙向鏈表簡單改造一下即可:

總結(jié)

以上,就是本篇文章介紹的內(nèi)容了。
數(shù)據(jù)結(jié)構(gòu)很多,也很高深,其中的算法知識,也讓人回味無窮。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28717.html

相關(guān)文章

  • CodeSalt | Python數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn) — 鏈

    摘要:數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表簡單介紹鏈表是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會按線性的順序存儲數(shù)據(jù),而是在每一個(gè)節(jié)點(diǎn)里存到下一個(gè)節(jié)點(diǎn)的指針。圖解如下查找通過遍歷鏈表,使用標(biāo)記是否找到了正在尋找的項(xiàng)。一旦為,就是對包含要刪除的項(xiàng)的節(jié)點(diǎn)的引用。 Python數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)—鏈表 1. 簡單介紹 鏈表(Linked list)是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會按線性的順序存儲數(shù)...

    BaronZhang 評論0 收藏0
  • 幾分鐘理解 數(shù)據(jù)結(jié)構(gòu) - 哈希及其優(yōu)化

    摘要:小概哈希容器也可以理解為是一種映射容器,采用哈希算法映射算法,散列算法,將不定長的數(shù)據(jù)壓縮成定長的數(shù)據(jù),這串定長值我們稱為哈希值,并將不同的哈希值分組存起來,每一個(gè)分組我們認(rèn)為是一個(gè)槽我們將不同的數(shù)據(jù)格式通過哈希算法,將其映射到不同的槽內(nèi), 小概 哈希容器也可以理解為是一種映射容器,采用哈希算法(映射算法,散列算法),將不定長的數(shù)據(jù)壓縮成定長的數(shù)據(jù),這串定長值我們稱為 哈希值,并將不同...

    Dean 評論0 收藏0
  • 【算法】算法圖解筆記_算法簡介

    摘要:在本書中你將學(xué)習(xí)比較不同算法的優(yōu)缺點(diǎn)該使用合并排序算法還是快速排序算法或者該使用數(shù)組還是鏈表。這樣的算法包括快速排序一種速度較快的排序算法。 在讀《算法圖解》這本書,這本書有兩個(gè)優(yōu)點(diǎn): 手繪風(fēng)格的圖,看著很讓人入戲; 算法采用Python語言描述,能更好的表達(dá)算法思想。 關(guān)于算法的學(xué)習(xí)有兩點(diǎn)心得: 算法思想最重要,理解了思想,算法是很容易寫出來的,所以盡量不要把過多精力放在細(xì)節(jié)上...

    tomlingtm 評論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)與算法:二分查找

    摘要:為檢查長度為的列表,二分查找需要執(zhí)行次操作。最后需要指出的一點(diǎn)是高水平的讀者可研究一下二叉樹關(guān)于二叉樹,戳這里數(shù)據(jù)結(jié)構(gòu)與算法二叉樹算法常見練習(xí)在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 常見數(shù)據(jù)結(jié)構(gòu) 簡單數(shù)據(jù)結(jié)構(gòu)(必須理解和掌握) 有序數(shù)據(jù)結(jié)構(gòu):棧、隊(duì)列、鏈表。有序數(shù)據(jù)結(jié)構(gòu)省空間(儲存空間小) 無序數(shù)據(jù)結(jié)構(gòu):集合、字典、散列表,無序...

    zsirfs 評論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)與算法:二分查找

    摘要:為檢查長度為的列表,二分查找需要執(zhí)行次操作。最后需要指出的一點(diǎn)是高水平的讀者可研究一下二叉樹關(guān)于二叉樹,戳這里數(shù)據(jù)結(jié)構(gòu)與算法二叉樹算法常見練習(xí)在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 常見數(shù)據(jù)結(jié)構(gòu) 簡單數(shù)據(jù)結(jié)構(gòu)(必須理解和掌握) 有序數(shù)據(jù)結(jié)構(gòu):棧、隊(duì)列、鏈表。有序數(shù)據(jù)結(jié)構(gòu)省空間(儲存空間小) 無序數(shù)據(jù)結(jié)構(gòu):集合、字典、散列表,無序...

    you_De 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<