雜記1

鏈表和數(shù)組的區(qū)別

從邏輯結(jié)構(gòu)來看

  • 數(shù)組必須事先定義固定的長度,不能適應(yīng)數(shù)據(jù)動(dòng)態(tài)地增減的情況。當(dāng)數(shù)據(jù)增加時(shí),可能超出原先定義的元素個(gè)數(shù);當(dāng)數(shù)據(jù)減少時(shí),造成內(nèi)存浪費(fèi);數(shù)組可以根據(jù)下標(biāo)直接存取。
  • 鏈表動(dòng)態(tài)地進(jìn)行存儲分配,可以適應(yīng)數(shù)據(jù)動(dòng)態(tài)地增減的情況,且可以方便地插入、刪除數(shù)據(jù)項(xiàng)。(數(shù)組中插入、刪除數(shù)據(jù)項(xiàng)時(shí),需要移動(dòng)其它數(shù)據(jù)項(xiàng),非常繁瑣)鏈表必須根據(jù)next指針找到下一個(gè)元素

從內(nèi)存存儲來看

  • (靜態(tài))數(shù)組從棧中分配空間, 對于程序員方便快速,但是自由度小
  • 鏈表從堆中分配空間, 自由度大但是申請管理比較麻煩
    從上面的比較可以看出,如果需要快速訪問數(shù)據(jù),很少或不插入和刪除元素,就應(yīng)該用數(shù)組;相反, 如果需要經(jīng)常插入和刪除元素就需要用鏈表數(shù)據(jù)結(jié)構(gòu)了。

排序基本

  • 作為排序依據(jù)的數(shù)據(jù)項(xiàng)稱為排序碼,也即數(shù)據(jù)元素的關(guān)鍵碼。若關(guān)鍵碼是主關(guān)鍵碼,則對于任意待排序序列,經(jīng)排序后得到的結(jié)果是唯一的;若關(guān)鍵碼是次關(guān)鍵碼,排序結(jié)果可能不唯一。

  • 若對任意的數(shù)據(jù)元素序列,使用某個(gè)排序方法,對它按關(guān)鍵碼進(jìn)行排序:若相同關(guān)鍵碼元素間的位置關(guān)系,排序前與排序后保持一致,稱此排序方法是穩(wěn)定的;而不能保持一致的排序方法則稱為不穩(wěn)定的。

排序分為兩大類:內(nèi)排序和外排序。

  • 內(nèi)排序:指待排序列完全存放在內(nèi)存中所進(jìn)行的排序過程,適合不太大的元素序列。
  • 外排序:指排序過程中還需訪問外存儲器,足夠大的元素序列,因不能完全放入內(nèi)存,只能使用外排序。

插入排序

  • 插入排序是一種簡單直觀的排序算法。它的工作原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。插入排序在實(shí)現(xiàn)上,通常采用in-place排序(即只需用到O(1)的額外空間的排序),因而在從后向前掃描過程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。

  • 插入排序都采用in-place在數(shù)組上實(shí)現(xiàn),其運(yùn)作如下:

1.從第一個(gè)元素開始,該元素可以認(rèn)為已經(jīng)被排序
2.取出下一個(gè)元素,在已經(jīng)排序的元素序列中從中向前掃描
3.如果該元素(已排序)大于新元素,將該元素移到下一位置
4.重復(fù)步驟3,直到找到已排序的元素小于或等于新元素的位置
5.將新元素插入到該位置后
6.重復(fù)步驟2~5

冒泡排序

  • 冒泡排序是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過來。
    運(yùn)作如下:

比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。這步做完后,最后的元素會(huì)是最大的數(shù)。
針對所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。

快速排序

  • 通過一趟排序?qū)⒋庞涗浄指畛瑟?dú)立的兩部分,其中一部分記錄的關(guān)鍵字均比另一部分記錄的關(guān)鍵字小,則可分別對這兩部分記錄繼續(xù)進(jìn)行排序。
    是冒泡排序的一種升級;
    基本原理:

設(shè)定一個(gè)基準(zhǔn)值(也就是軸)
將比軸小的值,移到軸的左邊,形成左子數(shù)列
將比軸大的值,移到軸的右邊,形成右子數(shù)列
分別對左子數(shù)列和右子數(shù)列做上述三個(gè)步驟(遞歸),直到左子數(shù)列或右子數(shù)列只剩一個(gè)值或沒有數(shù)值

選擇排序

  • 比如在一個(gè)長度為N的無序數(shù)組中,在第一趟遍歷N個(gè)數(shù)據(jù),找出其中最小的數(shù)值與第一個(gè)元素交換,第二趟遍歷剩下的N-1個(gè)數(shù)據(jù),找出其中最小的數(shù)值與第二個(gè)元素交換......第N-1趟遍歷剩下的2個(gè)數(shù)據(jù),找出其中最小的數(shù)值與第N-1個(gè)元素交換,至此選擇排序完成。

希爾排序

  • 主要就是選定一個(gè)h的有序數(shù)組來進(jìn)行預(yù)排序。這樣最后進(jìn)行插入排序的時(shí)候,能使數(shù)據(jù)局部有序。就算交換的話,交換的次數(shù)也不會(huì)很多。這樣h序列稱為遞增序列。希爾的性能很大部分取決于遞增序列 。一般來說我們使用這個(gè)序列3x + 1.

堆排序

  • 它是選擇排序的一種。可以利用數(shù)組的特點(diǎn)快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。

二叉樹

  • 在二叉樹的第i層上至多有2i-1個(gè)結(jié)點(diǎn)(i≥1)。
  • 深度為k的二叉樹至多有2k-1個(gè)結(jié)點(diǎn)(k≥1)。
  • 遍歷二叉樹
  • 先序遍歷(DLR)

⑴訪問根結(jié)點(diǎn);
⑵先序遍歷根結(jié)點(diǎn)的左子樹;
⑶先序遍歷根結(jié)點(diǎn)的右子樹。

  • 中序遍歷(LDR)

⑴中序遍歷根結(jié)點(diǎn)的左子樹;
⑵訪問根結(jié)點(diǎn);
⑶中序遍歷根結(jié)點(diǎn)的右子樹。

  • 后序遍歷(LRD)

⑴后序遍歷根結(jié)點(diǎn)的左子樹;
⑵后序遍歷根結(jié)點(diǎn)的右子樹。
⑶訪問根結(jié)點(diǎn);

  • 層次遍歷(隊(duì)列實(shí)現(xiàn))

構(gòu)建一個(gè)隊(duì)列專門用來儲存二叉樹節(jié)點(diǎn)指針,先把根節(jié)點(diǎn)入隊(duì),假設(shè)是A,對A元素進(jìn)行訪問,然后對A的左右孩子依次入隊(duì),假設(shè)B,C。A出隊(duì)列,再是對B進(jìn)行訪問,同樣將B的左右孩子入隊(duì)列,B出對列······重復(fù)以上,知道隊(duì)列為空。

哈希

  • Hashing查找,也稱為散列查找或雜湊查找。它既是一種查找方法,又是一種存貯方法,稱為散列存貯。散列存貯的內(nèi)存存放形式也稱為散列表
  • 哈希函數(shù)

在記錄的關(guān)鍵字與記錄的存儲地址之間建立的一種對應(yīng)關(guān)系叫哈希函數(shù)。
哈希函數(shù)是從關(guān)鍵字空間到存儲地址空間的一種映象
哈希函數(shù)可寫成:addr(ai)=H(keyi)
ai是表中的一個(gè)元素
addr(ai)是ai的存儲地址
keyi是ai的關(guān)鍵字

  • 哈希表

應(yīng)用哈希函數(shù),由記錄的關(guān)鍵字確定記錄在表中的地址,并將記錄放入此地址,這樣構(gòu)成的表叫哈希表。

  • 哈希查找

又叫散列查找,利用哈希函數(shù)進(jìn)行查找的過程叫哈希查找。

  • 沖突:key1?key2,但H(key1)=H(key2)的現(xiàn)象叫沖突
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,427評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,380評論 2 379

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