版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
關(guān)于數(shù)據(jù)結(jié)構(gòu)與算法講義1.基本數(shù)據(jù)結(jié)構(gòu)與算法第2頁,共123頁,2024年2月25日,星期天1.1算法1.1.1算法(algorithm)基本概念對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個(gè)或多個(gè)操作。它是一組嚴(yán)謹(jǐn)?shù)囟x運(yùn)算順序的規(guī)則,并且每一個(gè)規(guī)則都是有效的,且是明確的,此順序?qū)⒃谟邢薜拇螖?shù)下終止。算法具有有窮性、確定性、可行性、擁有足夠的情報(bào)(輸入和輸出)
等5個(gè)重要特性。第3頁,共123頁,2024年2月25日,星期天1.1.2算法的基本要素
1、對數(shù)據(jù)對象的運(yùn)算和操作算術(shù)運(yùn)算邏輯運(yùn)算關(guān)系運(yùn)算數(shù)據(jù)傳輸2、算法的控制結(jié)構(gòu)算法中各操作之間的執(zhí)行順序描述算法的工具通常有傳統(tǒng)流程圖、N-S結(jié)構(gòu)化流程圖、算法描述語言等一個(gè)算法一般可以用順序、選擇、循環(huán)三種基本機(jī)構(gòu)組合而成。第4頁,共123頁,2024年2月25日,星期天1.2算法復(fù)雜度1.2.1時(shí)間復(fù)雜度依據(jù)算法編制的程序在計(jì)算機(jī)上運(yùn)行時(shí)所消耗的時(shí)間來度量。通常有事后統(tǒng)計(jì)法和事前分析估算法。一個(gè)算法是由控制結(jié)構(gòu)(順序、分支和循環(huán))和原操作構(gòu)成的,算法時(shí)間取決于兩者的綜合效果。算法中基本操作重復(fù)執(zhí)行次數(shù)n和算法執(zhí)行時(shí)間同步增長,稱作算法的時(shí)間復(fù)雜度。第5頁,共123頁,2024年2月25日,星期天1.2.2算法的空間復(fù)雜度一般是指執(zhí)行這個(gè)算法所需要的內(nèi)存空間一個(gè)算法所占用的存儲(chǔ)空間包括算法程序所占的空間、輸入的初始數(shù)據(jù)所占的存儲(chǔ)空間以及某種數(shù)據(jù)結(jié)構(gòu)所需要的附加存儲(chǔ)空間一個(gè)上機(jī)執(zhí)行的程序除了需要存儲(chǔ)空間來寄存本身所用指令、常數(shù)、變量和輸入數(shù)據(jù)外,也需要一些對數(shù)據(jù)進(jìn)行操作的工作單元和存儲(chǔ)一些為實(shí)現(xiàn)計(jì)算所需信息的輔助空間。第6頁,共123頁,2024年2月25日,星期天例題講解第7頁,共123頁,2024年2月25日,星期天算法的時(shí)間復(fù)雜度是指A)執(zhí)行算法程序所需要的時(shí)間B)算法程序的長度C)算法執(zhí)行過程中所需要的基本運(yùn)算次數(shù)D)算法程序中的指令條數(shù)算法的基本特征是可行性、確定性、
【1】和擁有足夠的情報(bào)。算法的空間復(fù)雜度是指
A)算法程序的長度 B)算法程序中的指令條數(shù)
C)算法程序所占的存儲(chǔ)空間D)執(zhí)行過程中所需要的存儲(chǔ)空間在計(jì)算機(jī)中,算法是指
A)加工方法 B)解題方案的準(zhǔn)確而完整的描述
C)排序方法 D)查詢方法第8頁,共123頁,2024年2月25日,星期天算法分析的目的是
A)找出數(shù)據(jù)結(jié)構(gòu)的合理性 B)找出算法中輸入和輸出之間的關(guān)系
C)分析算法的易懂性和可靠性 D)分析算法的效率以求改進(jìn)算法的工作量大小和實(shí)現(xiàn)算法所需的存儲(chǔ)單元多少分別稱為算法的【1】。第9頁,共123頁,2024年2月25日,星期天1.2數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的定義數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的圖形表示線性結(jié)構(gòu)與非線性結(jié)構(gòu)第10頁,共123頁,2024年2月25日,星期天特點(diǎn):
l 每個(gè)學(xué)生的信息占據(jù)一行,所有學(xué)生的信息按學(xué)號(hào)順序依次排列構(gòu)成一張表格;
l 表中每個(gè)學(xué)生的信息依據(jù)學(xué)號(hào)的大小存在著一種前后關(guān)系,這就是我們所說的線性結(jié)構(gòu);
l 對它的操作通常是插入某個(gè)學(xué)生的信息,刪除某個(gè)學(xué)生的信息,更新某個(gè)學(xué)生的信息,按條件檢索某個(gè)學(xué)生的信息等等。應(yīng)用舉例2——輸出n個(gè)對象的全排列輸出n個(gè)對象的全排列可以使用下圖1-1所示的形式描述。第11頁,共123頁,2024年2月25日,星期天圖1-13個(gè)對象的全排列過程第12頁,共123頁,2024年2月25日,星期天特點(diǎn):
l 在求解過程中,所處理的數(shù)據(jù)之間具有層次關(guān)系,這是我們所說的樹形結(jié)構(gòu);
l 對它的操作有:建立樹形結(jié)構(gòu),輸出最低層結(jié)點(diǎn)內(nèi)容等等。應(yīng)用舉例3——制定教學(xué)計(jì)劃在制定教學(xué)計(jì)劃時(shí),需要考慮各門課程的開設(shè)順序。有些課程需要先導(dǎo)課程,有些課程則不需要,而有些課程又是其他課程的先導(dǎo)課程。比如,計(jì)算機(jī)專業(yè)課程的開設(shè)情況如下表1-2所示:第13頁,共123頁,2024年2月25日,星期天第14頁,共123頁,2024年2月25日,星期天課程先后關(guān)系的圖形描形式:c1c9c4c2c12c10c11c5c3c6c7c8圖1-2計(jì)算機(jī)專業(yè)必修課程開設(shè)先后關(guān)系第15頁,共123頁,2024年2月25日,星期天特點(diǎn)
l 課程之間的先后關(guān)系用圖結(jié)構(gòu)描述;
l 通過實(shí)施創(chuàng)建圖結(jié)構(gòu),按要求將圖結(jié)構(gòu)中的頂點(diǎn)進(jìn)行線性排序。結(jié)論:數(shù)據(jù)結(jié)構(gòu)主要研究以下三個(gè)方面的問題:數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)對各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行的運(yùn)算
第16頁,共123頁,2024年2月25日,星期天數(shù)據(jù)結(jié)構(gòu)是一門研究數(shù)據(jù)組織、存儲(chǔ)和運(yùn)算的一般方法的學(xué)科。1.2.2基本概念和術(shù)語第17頁,共123頁,2024年2月25日,星期天數(shù)據(jù)元素(DataElement)數(shù)據(jù)元素是數(shù)據(jù)的基本單位,即數(shù)據(jù)集合中的個(gè)體。有時(shí)一個(gè)數(shù)據(jù)元素可由若干數(shù)據(jù)項(xiàng)(DataItem)組成。數(shù)據(jù)項(xiàng)是數(shù)據(jù)的最小單位。數(shù)據(jù)元素亦稱節(jié)點(diǎn)或記錄。第18頁,共123頁,2024年2月25日,星期天數(shù)據(jù)結(jié)構(gòu)可描述為Group=(D,R)有限個(gè)數(shù)據(jù)元素的集合有限個(gè)節(jié)點(diǎn)間關(guān)系的集合第19頁,共123頁,2024年2月25日,星期天
1.?dāng)?shù)據(jù)的邏輯結(jié)構(gòu)
2、數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)3、數(shù)據(jù)的運(yùn)算:檢索、排序、插入、刪除、修改等。A.線性結(jié)構(gòu)
B.非線性結(jié)構(gòu)A順序存儲(chǔ)
B鏈?zhǔn)酱鎯?chǔ)線性表?xiàng)j?duì)樹形結(jié)構(gòu)圖形結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的三個(gè)方面數(shù)據(jù)結(jié)構(gòu)可描述為Group=(D,R)第20頁,共123頁,2024年2月25日,星期天線性結(jié)構(gòu)
A,B,C,·······,X,Y,Z學(xué)生成績表86胡孝臣986110395劉忠賞9861107100張卓9861109成績姓名學(xué)號(hào)線性表——結(jié)點(diǎn)間是以線性關(guān)系聯(lián)結(jié)第21頁,共123頁,2024年2月25日,星期天元素n……..元素i……..元素2元素1LoLo+mLo+(i-1)*mLo+(n-1)*m存儲(chǔ)地址存儲(chǔ)內(nèi)容Loc(a)=Lo+(i-1)*m順序存儲(chǔ)每個(gè)元素所占用的存儲(chǔ)單元個(gè)數(shù)第22頁,共123頁,2024年2月25日,星期天元素n……..元素i……..元素2元素1存儲(chǔ)內(nèi)容順序存儲(chǔ)結(jié)構(gòu)常用于線性數(shù)據(jù)結(jié)構(gòu),將邏輯上相鄰的數(shù)據(jù)元素存儲(chǔ)在物理上相鄰的存儲(chǔ)單元里。順序存儲(chǔ)結(jié)構(gòu)的三個(gè)弱點(diǎn):1.作插入或刪除操作時(shí),需移動(dòng)大量元數(shù)。2.長度變化較大時(shí),需按最大空間分配。3.表的容量難以擴(kuò)充。第23頁,共123頁,2024年2月25日,星期天1536元素21400元素11346元素3∧元素41345h
鏈?zhǔn)酱鎯?chǔ)每個(gè)節(jié)點(diǎn)都由兩部分組成:數(shù)據(jù)域和指針域。數(shù)據(jù)域存放元素本身的數(shù)據(jù),指針域存放指針。數(shù)據(jù)元素之間邏輯上的聯(lián)系由指針來體現(xiàn)。第24頁,共123頁,2024年2月25日,星期天1536元素21400元素11346元素3∧元素4head
1346元素3
1536
…….
……..
…….
1536元素2
1400
…….
……..
…….∧元素4
1346
1400元素1
1345指針存儲(chǔ)內(nèi)容存儲(chǔ)地址
鏈?zhǔn)酱鎯?chǔ)1345第25頁,共123頁,2024年2月25日,星期天1536元素21400元素11346元素3∧元素41345h
鏈?zhǔn)酱鎯?chǔ)1.比順序存儲(chǔ)結(jié)構(gòu)的存儲(chǔ)密度小
(每個(gè)節(jié)點(diǎn)都由數(shù)據(jù)域和指針愈組成)。2.邏輯上相鄰的節(jié)點(diǎn)物理上不必相鄰。3.插入、刪除靈活
(不必移動(dòng)節(jié)點(diǎn),只要改變節(jié)點(diǎn)中的指針)。鏈接存儲(chǔ)結(jié)構(gòu)特點(diǎn):第26頁,共123頁,2024年2月25日,星期天線性結(jié)構(gòu)和非線性結(jié)構(gòu)如果一個(gè)非空的數(shù)據(jù)結(jié)構(gòu)滿足下列兩個(gè)條件:有且只有一個(gè)根結(jié)點(diǎn);每一個(gè)結(jié)點(diǎn)最多有一個(gè)前件,也最多有一個(gè)后件則稱該數(shù)據(jù)結(jié)構(gòu)為線性結(jié)構(gòu)(線性表)。如果一個(gè)數(shù)據(jù)結(jié)構(gòu)不是線性結(jié)構(gòu),則稱之為非線性結(jié)構(gòu)。第27頁,共123頁,2024年2月25日,星期天例題講解第28頁,共123頁,2024年2月25日,星期天鏈表不具有的特點(diǎn)是A)不必事先估計(jì)存儲(chǔ)空間B)可隨機(jī)訪問任一元素C)插入刪除不需要移動(dòng)元素 D)所需空間與線性表長度成正比數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu),線性鏈表屬于【1】
。數(shù)據(jù)結(jié)構(gòu)中,與所使用的計(jì)算機(jī)無關(guān)的是數(shù)據(jù)的
A)存儲(chǔ)結(jié)構(gòu) B)物理結(jié)構(gòu)
C)邏輯結(jié)構(gòu)
D)物理和存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和【1】
兩大類。第29頁,共123頁,2024年2月25日,星期天順序存儲(chǔ)方法是把邏輯上相鄰的結(jié)點(diǎn)存儲(chǔ)在物理位置
【2】的存儲(chǔ)單元中。數(shù)據(jù)處理的最小單位是
A)數(shù)據(jù) B)數(shù)據(jù)元素C)數(shù)據(jù)項(xiàng) D)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)作為計(jì)算機(jī)的一門學(xué)科,主要研究數(shù)據(jù)的邏輯結(jié)構(gòu)、對各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行的運(yùn)算,以及
A)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu) B)計(jì)算方法C)數(shù)據(jù)映象D)邏輯存儲(chǔ)線性表的順序存儲(chǔ)結(jié)構(gòu)和線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)分別是
A)順序存取的存儲(chǔ)結(jié)構(gòu)、順序存取的存儲(chǔ)結(jié)構(gòu)
B)隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)、順序存取的存儲(chǔ)結(jié)構(gòu)
C)隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)、隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)
D)任意存取的存儲(chǔ)結(jié)構(gòu)、任意存取的存儲(chǔ)結(jié)構(gòu)第30頁,共123頁,2024年2月25日,星期天根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復(fù)雜程度,一般將數(shù)據(jù)結(jié)構(gòu)分成
A)動(dòng)態(tài)結(jié)構(gòu)和靜態(tài)結(jié)構(gòu) B)緊湊結(jié)構(gòu)和非緊湊結(jié)構(gòu)
C)線性結(jié)構(gòu)和非線性結(jié)構(gòu)D)內(nèi)部結(jié)構(gòu)和外部結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的
【2】以及對數(shù)據(jù)的操作運(yùn)算。數(shù)據(jù)的基本單位是
【5】。第31頁,共123頁,2024年2月25日,星期天下列敘述中,錯(cuò)誤的是
A)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)與數(shù)據(jù)處理的效率密切相關(guān)
B)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)與數(shù)據(jù)處理的效率無關(guān)
C)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)在計(jì)算機(jī)中所占的空間不一定是連續(xù)的
D)一種數(shù)據(jù)的邏輯結(jié)構(gòu)可以有多種存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)是指A)數(shù)據(jù)所占的存儲(chǔ)空間B)數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)中的表示C)數(shù)據(jù)在計(jì)算機(jī)中的順序存儲(chǔ)方式D)存儲(chǔ)在外存中的數(shù)據(jù)第32頁,共123頁,2024年2月25日,星期天2.3線性表2.3.1線性表的定義線性表是n個(gè)元素的有限序列,它們之間的關(guān)系可以排成一個(gè)線性序列:
a1,a2,……,ai,……,an其中n稱作表的長度,當(dāng)n=0時(shí),稱作空表。第33頁,共123頁,2024年2月25日,星期天線性表的特點(diǎn):1.線性表中所有元素的性質(zhì)相同。2.除第一個(gè)和最后一個(gè)數(shù)據(jù)元素之外,其它數(shù)據(jù)元素有且僅有一個(gè)前驅(qū)和一個(gè)后繼。第一個(gè)數(shù)據(jù)元素?zé)o前驅(qū),最后一個(gè)數(shù)據(jù)元素?zé)o后繼。3.數(shù)據(jù)元素在表中的位置只取決于它自身的序號(hào)。在線性表上常用的運(yùn)算有:初始化、求長度、取元素、修改、前插、刪除、檢索、排序。第34頁,共123頁,2024年2月25日,星期天2.3.2線性表的順序存儲(chǔ)結(jié)構(gòu)及其插入與刪除操作特點(diǎn):
1、線性表中數(shù)據(jù)元素類型一致,只有數(shù)據(jù)域,存儲(chǔ)空間利用率高。
2、所有元素所占的存儲(chǔ)空間是連續(xù)的
3、各數(shù)據(jù)元素在存儲(chǔ)空間中是按邏輯順序依次存放的
4.做插入、刪除時(shí)需移動(dòng)大量元素。
5.空間估計(jì)不明時(shí),按最大空間分配。第35頁,共123頁,2024年2月25日,星期天元素an……..元素ai……..元素a2元素a1bb+mb+(i-1)*m
b+(maxlen-1)*m存儲(chǔ)地址內(nèi)存狀態(tài)Loc(元素i)=b+(i-1)*m順序存儲(chǔ)結(jié)構(gòu)示意圖(順序表):首地址起始地址基地址每個(gè)元素所占用的存儲(chǔ)單元個(gè)數(shù)第36頁,共123頁,2024年2月25日,星期天元素a1元素a2……..元素ai+1……..
01i線性表的順序存儲(chǔ)結(jié)構(gòu)——可用VB語言中的一維數(shù)組來描述.DimV[M]Asinteger;
/*V是數(shù)組的名字,M是數(shù)組大小,假設(shè)數(shù)組中的元素是整型類型*/第i個(gè)元素的ai存儲(chǔ)地址:Loc(ai)=Loc(a1)+(i-1)*mV[0]V[1]V[i]V[m-1]第37頁,共123頁,2024年2月25日,星期天…..a2a1an…..ai+1ai01i-1in-1
1-1插入運(yùn)算ai-1…..a2a1alength
…ai+1ai
x
ai-1…..
a2
a1
ai
ai+1
…alength
alength
…
…ai+1
ai
x第38頁,共123頁,2024年2月25日,星期天
插入算法的分析假設(shè)線性表中含有n個(gè)數(shù)據(jù)元素,在進(jìn)行插入操作時(shí),若假定在n+1個(gè)位置上插入元素的可能性均等,則平均移動(dòng)元素的個(gè)數(shù)為:第39頁,共123頁,2024年2月25日,星期天
刪除算法的分析在進(jìn)行刪除操作時(shí),若假定刪除每個(gè)元素的可能性均等,則平均移動(dòng)元素的個(gè)數(shù)為:
分析結(jié)論順序存儲(chǔ)結(jié)構(gòu)表示的線性表,在做插入或刪除操作時(shí),平均需要移動(dòng)大約一半的數(shù)據(jù)元素。當(dāng)線性表的數(shù)據(jù)元素量較大,并且經(jīng)常要對其做插入或刪除操作時(shí),這一點(diǎn)需要值得考慮。第40頁,共123頁,2024年2月25日,星期天例題講解第41頁,共123頁,2024年2月25日,星期天順序存儲(chǔ)方法是把邏輯上相鄰的結(jié)點(diǎn)存儲(chǔ)在物理位置
【2】的存儲(chǔ)單元中。長度為n的順序存儲(chǔ)線性表中,當(dāng)在任何位置上插入一個(gè)元素概率都相等時(shí),插入一個(gè)元素所需移動(dòng)元素的平均個(gè)數(shù)為【1】
。第42頁,共123頁,2024年2月25日,星期天線性表L=(a1,a2,a3,…ai,…an),下列說法正確的是
A)每個(gè)元素都有一個(gè)直接前件和直接后件
B)線性表中至少要有一個(gè)元素
C)表中諸元素的排列順序必須是由小到大或由大到小
D)除第一個(gè)元素和最后一個(gè)元素外,其余每個(gè)元素都有一個(gè)且只有一個(gè)直接前件和直接后件線性表的順序存儲(chǔ)結(jié)構(gòu)和線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)分別是
A)順序存取的存儲(chǔ)結(jié)構(gòu)、順序存取的存儲(chǔ)結(jié)構(gòu)
B)隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)、順序存取的存儲(chǔ)結(jié)構(gòu)
C)隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)、隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)
D)任意存取的存儲(chǔ)結(jié)構(gòu)、任意存取的存儲(chǔ)結(jié)構(gòu)第43頁,共123頁,2024年2月25日,星期天根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復(fù)雜程度,一般將數(shù)據(jù)結(jié)構(gòu)分成
A)動(dòng)態(tài)結(jié)構(gòu)和靜態(tài)結(jié)構(gòu) B)緊湊結(jié)構(gòu)和非緊湊結(jié)構(gòu)
C)線性結(jié)構(gòu)和非線性結(jié)構(gòu)D)內(nèi)部結(jié)構(gòu)和外部結(jié)構(gòu)當(dāng)線性表采用順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)存儲(chǔ)時(shí),其主要特點(diǎn)是【1】
。線性表若采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)時(shí),要求內(nèi)存中可用存儲(chǔ)單元的地址
A)必須是連續(xù)的 B)部分地址必須是連續(xù)的
C)一定是不連續(xù)的D)連續(xù)不連續(xù)都可以第44頁,共123頁,2024年2月25日,星期天下列敘述中,錯(cuò)誤的是
A)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)與數(shù)據(jù)處理的效率密切相關(guān)
B)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)與數(shù)據(jù)處理的效率無關(guān)
C)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)在計(jì)算機(jī)中所占的空間不一定是連續(xù)的
D)一種數(shù)據(jù)的邏輯結(jié)構(gòu)可以有多種存儲(chǔ)結(jié)構(gòu)
第45頁,共123頁,2024年2月25日,星期天數(shù)據(jù)結(jié)構(gòu)定義:是指互相之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合。包含三個(gè)方面:
1邏輯結(jié)構(gòu)
2存儲(chǔ)結(jié)構(gòu)
3各類操作第46頁,共123頁,2024年2月25日,星期天數(shù)據(jù)的邏輯結(jié)構(gòu)(1)表示數(shù)據(jù)元素的信息(2)表示數(shù)據(jù)元素之間的前后關(guān)系它不關(guān)心計(jì)算機(jī)如何去實(shí)現(xiàn),與具體計(jì)算機(jī)實(shí)現(xiàn)無關(guān)。數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)中的標(biāo)識(shí)(映像),稱為數(shù)據(jù)的物理結(jié)構(gòu),或稱存儲(chǔ)結(jié)構(gòu)。它所研究的是數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)中的實(shí)現(xiàn)方法。第47頁,共123頁,2024年2月25日,星期天數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)包括數(shù)據(jù)結(jié)構(gòu)中元素的表示及元素間關(guān)系的表示。數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)方式有:順序存儲(chǔ)方法、鏈?zhǔn)酱鎯?chǔ)方法、索引存儲(chǔ)方法、散列存儲(chǔ)方法。第48頁,共123頁,2024年2月25日,星期天2.4棧和隊(duì)列2.4.1棧和隊(duì)列的定義
棧和隊(duì)列是兩種特殊的線性表,它們是運(yùn)算時(shí)要受到某些限制的線性表,故也稱為限定性的數(shù)據(jù)結(jié)構(gòu)。第49頁,共123頁,2024年2月25日,星期天2.4.1.1棧的定義棧:限定只能在表的一端進(jìn)行插入和刪除的特殊的線性表,此種結(jié)構(gòu)稱為后進(jìn)先出設(shè)棧s=(a1,a2,...,ai,...,an),其中a1是棧底元素,an是棧頂元素。棧頂(top):允許插入和刪除的一端;約定top始終指向新數(shù)據(jù)元素將存放的位置。棧底(bottom):不允許插入和刪除的一端。
a1
a2
….
an進(jìn)棧出棧棧頂棧底第50頁,共123頁,2024年2月25日,星期天隊(duì)列的主要運(yùn)算(1)設(shè)置一個(gè)空隊(duì)列;(2)插入一個(gè)新的隊(duì)尾元素,稱為進(jìn)隊(duì);(3)刪除隊(duì)頭元素,稱為出隊(duì);(4)讀取隊(duì)頭元素;2.4.1.2隊(duì)列的定義定義:一種特殊的線性結(jié)構(gòu),限定只能在表的一端進(jìn)行插入,在表的另一端進(jìn)行刪除的線性表。此種結(jié)構(gòu)稱為先進(jìn)先出(FIFO)表。
a1,
a2,
a3,
a4,…………
an-1,
an隊(duì)列示意圖隊(duì)頭隊(duì)尾第51頁,共123頁,2024年2月25日,星期天2.4.2棧的順序存儲(chǔ)結(jié)構(gòu)及其基本運(yùn)算
a2
a1
a1
a2
top用順序存儲(chǔ)結(jié)構(gòu)表示的棧。
順序棧用一組連續(xù)的存儲(chǔ)單元存放自棧底到棧頂?shù)臄?shù)據(jù)元素,一般用一維數(shù)組表示,設(shè)置一個(gè)簡單變量top指示棧頂位置,稱為棧頂指針,它始終指向待插入元素的位置?;具\(yùn)算:壓(進(jìn))棧:PUSH出棧:POP第52頁,共123頁,2024年2月25日,星期天
3210
(a)rear=front=-1(隊(duì)空)
e3
e4
(c)e1,e2出隊(duì),e4入隊(duì)
隊(duì)滿rear=4front
e1
e2
e3
(b)rearfront(b)e1,e2,e3入隊(duì)隊(duì)空時(shí),令rear=front=-1,當(dāng)有新元素入隊(duì)時(shí),尾指針加1,當(dāng)有元素出隊(duì)時(shí),頭指針加1。故在非空隊(duì)列中,頭指針始終指向隊(duì)頭元素前一個(gè)位置,而尾指針始終指向隊(duì)尾元素的位置2.4.3隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)及其基本運(yùn)算第53頁,共123頁,2024年2月25日,星期天例題講解第54頁,共123頁,2024年2月25日,星期天棧和隊(duì)列的共同特點(diǎn)是
A)都是先進(jìn)先出B)都是先進(jìn)后出
C)只允許在端點(diǎn)處插入和刪除元素D)沒有共同點(diǎn)如果進(jìn)棧序列為e1,e2,e3,e4,則可能的出棧序列是
A)e3,e1,e4,e2 B)e2,e4,e3,e1C)e3,e4,e1,e2 D)任意順序一些重要的程序語言(如C語言和Pascal語言)允許過程的遞歸調(diào)用。而實(shí)現(xiàn)遞歸調(diào)用中的存儲(chǔ)分配通常用
A)棧 B)堆C)數(shù)組 D)鏈表第55頁,共123頁,2024年2月25日,星期天棧底至棧頂依次存放元素A、B、C、D,在第五個(gè)元素E入棧前,棧中元素可以出棧,則出棧序列可能是
A)ABCED B)DCBEAC)DBCEA D)CDABE
棧通常采用的兩種存儲(chǔ)結(jié)構(gòu)是
A)線性存儲(chǔ)結(jié)構(gòu)和鏈表存儲(chǔ)結(jié)構(gòu)
B)散列方式和索引方式
C)鏈表存儲(chǔ)結(jié)構(gòu)和數(shù)組D)線性存儲(chǔ)結(jié)構(gòu)和非線性存儲(chǔ)結(jié)構(gòu)棧和隊(duì)列通常采用的存儲(chǔ)結(jié)構(gòu)是【1】
。下列數(shù)據(jù)結(jié)構(gòu)中,按先進(jìn)后出原則組織數(shù)據(jù)的是
A)線性鏈表B)棧C)循環(huán)鏈表 D)順序表第56頁,共123頁,2024年2月25日,星期天當(dāng)循環(huán)隊(duì)列非空且隊(duì)尾指針等于隊(duì)頭指針時(shí),說明循環(huán)隊(duì)列已滿,不能進(jìn)行入隊(duì)運(yùn)算。這種情況稱為
【2】上溢。
由兩個(gè)棧共享一個(gè)存儲(chǔ)空間的好處是
A)減少存取時(shí)間,降低下溢發(fā)生的機(jī)率B)節(jié)省存儲(chǔ)空間,降低上溢發(fā)生的機(jī)率
C)減少存取時(shí)間,降低上溢發(fā)生的機(jī)率D)節(jié)省存儲(chǔ)空間,降低下溢發(fā)生的機(jī)率下列關(guān)于棧的敘述中正確的是A)在棧中只能插入數(shù)據(jù)B)在棧中只能刪除數(shù)據(jù)C)棧是先進(jìn)先出的線性表D)棧是后進(jìn)先出的線性表下列關(guān)于隊(duì)列的敘述中正確的是A)在隊(duì)列中只能插入數(shù)據(jù)B)在隊(duì)列中只能刪除數(shù)據(jù)C)隊(duì)列是先進(jìn)先出的線性表D)隊(duì)列是后進(jìn)先出的線性表第57頁,共123頁,2024年2月25日,星期天2.5鏈表線性單鏈表雙向鏈表循環(huán)鏈表結(jié)構(gòu)及其基本運(yùn)算第58頁,共123頁,2024年2月25日,星期天2.5.1線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
將線性表的元素放到一個(gè)具有頭指針的鏈表中,鏈表中每個(gè)結(jié)點(diǎn)包含數(shù)據(jù)域和指針域。
數(shù)據(jù)域存放數(shù)據(jù),指針域存放后繼結(jié)點(diǎn)的地址,最后一個(gè)結(jié)點(diǎn)的指針域?yàn)榭铡_壿嬌舷噜彽臄?shù)據(jù)元素在內(nèi)存中的物理存儲(chǔ)空間不一定相鄰。第59頁,共123頁,2024年2月25日,星期天上圖的線性表為ZHAO,QIAN,SUN,LI,ZHOU,WU,ZHENG,WANG第60頁,共123頁,2024年2月25日,星期天線性鏈表表示法:第61頁,共123頁,2024年2月25日,星期天鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的特點(diǎn)
插入、刪除靈活方便,不需要移動(dòng)結(jié)點(diǎn),只要改變結(jié)點(diǎn)中指針域的值即可。適合于線性表是動(dòng)態(tài)變化的,不進(jìn)行頻繁查找操作、但經(jīng)常進(jìn)行插入刪除時(shí)使用。
鏈表的查找只能從頭指針開始順序查找。
第62頁,共123頁,2024年2月25日,星期天a1a2an∧a3L…..線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)可用C語言中的“結(jié)構(gòu)指針”來描述帶頭結(jié)點(diǎn)的線性鏈表datanexttypedefstructLNode{intdata;StructLNode*next;}JD;第63頁,共123頁,2024年2月25日,星期天babaxPP單鏈表的插入運(yùn)算S在P所指向的結(jié)點(diǎn)之后插入新的結(jié)點(diǎn)第64頁,共123頁,2024年2月25日,星期天babax∧anaia1a2PPai-1xL單鏈表的插入運(yùn)算S第65頁,共123頁,2024年2月25日,星期天2.5.2循環(huán)鏈表:
首尾相接的鏈表。將最后一個(gè)結(jié)點(diǎn)的空指針改為指向頭結(jié)點(diǎn),從任一結(jié)點(diǎn)出發(fā)均可找到其它結(jié)點(diǎn)。a1a2an∧a3L…..帶頭結(jié)點(diǎn)的單鏈表a1a2ana3L…..循環(huán)單鏈表第66頁,共123頁,2024年2月25日,星期天2.5.3雙向鏈表在每個(gè)結(jié)點(diǎn)中設(shè)置兩個(gè)指針,一個(gè)指向后繼,一個(gè)指向前驅(qū)??芍苯哟_定一個(gè)結(jié)點(diǎn)的前驅(qū)和后繼結(jié)點(diǎn)??商岣咝?。datanextbefore第67頁,共123頁,2024年2月25日,星期天線性表的應(yīng)用:應(yīng)用最廣的數(shù)據(jù)結(jié)構(gòu)?!じ呒?jí)語言中的數(shù)組;·計(jì)算機(jī)的文件系統(tǒng);·計(jì)算機(jī)的目錄系統(tǒng);·電話號(hào)碼查詢系統(tǒng)(可采用順序表或單鏈表結(jié)構(gòu));·各種事務(wù)處理(各種表格均采用順序表和線性鏈表結(jié)構(gòu))第68頁,共123頁,2024年2月25日,星期天例題講解第69頁,共123頁,2024年2月25日,星期天鏈表不具有的特點(diǎn)是A)不必事先估計(jì)存儲(chǔ)空間B)可隨機(jī)訪問任一元素C)插入刪除不需要移動(dòng)元素 D)所需空間與線性表長度成正比用鏈表表示線性表的優(yōu)點(diǎn)是
A)便于隨機(jī)存取B)花費(fèi)的存儲(chǔ)空間較順序存儲(chǔ)少
C)便于插入和刪除操作
D)數(shù)據(jù)元素的物理順序與邏輯順序相同長度為n的順序存儲(chǔ)線性表中,當(dāng)在任何位置上插入一個(gè)元素概率都相等時(shí),插入一個(gè)元素所需移動(dòng)元素的平均個(gè)數(shù)為【1】
。第70頁,共123頁,2024年2月25日,星期天線性表L=(a1,a2,a3,…ai,…an),下列說法正確的是A)每個(gè)元素都有一個(gè)直接前件和直接后件B)線性表中至少要有一個(gè)元素C)表中諸元素的排列順序必須是由小到大或由大到小D)除第一個(gè)元素和最后一個(gè)元素外,其余每個(gè)元素都有一個(gè)且只有一個(gè)直接前件和直接后件
在單鏈表中,增加頭結(jié)點(diǎn)的目的是
A)方便運(yùn)算的實(shí)現(xiàn)
B)使單鏈表至少有一個(gè)結(jié)點(diǎn)
C)標(biāo)識(shí)表結(jié)點(diǎn)中首結(jié)點(diǎn)的位置D)說明單鏈表是線性表的鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)第71頁,共123頁,2024年2月25日,星期天非空的循環(huán)單鏈表head的尾結(jié)點(diǎn)(由p所指向),滿足
A)p->next==NULL B)p==NULLC)p->next=head D)p=head
循環(huán)鏈表的主要優(yōu)點(diǎn)是
A)不再需要頭指針了
B)從表中任一結(jié)點(diǎn)出發(fā)都能訪問到整個(gè)鏈表
C)在進(jìn)行插入、刪除運(yùn)算時(shí),能更好的保證鏈表不斷開
D)已知某個(gè)結(jié)點(diǎn)的位置后,能夠容易的找到它的直接前件第72頁,共123頁,2024年2月25日,星期天線性表的順序存儲(chǔ)結(jié)構(gòu)和線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)分別是
A)順序存取的存儲(chǔ)結(jié)構(gòu)、順序存取的存儲(chǔ)結(jié)構(gòu)
B)隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)、順序存取的存儲(chǔ)結(jié)構(gòu)
C)隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)、隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)
D)任意存取的存儲(chǔ)結(jié)構(gòu)、任意存取的存儲(chǔ)結(jié)構(gòu)當(dāng)循環(huán)隊(duì)列非空且隊(duì)尾指針等于隊(duì)頭指針時(shí),說明循環(huán)隊(duì)列已滿,不能進(jìn)行入隊(duì)運(yùn)算。這種情況稱為【2】。用鏈表表示線性表的突出優(yōu)點(diǎn)是【1】。
第73頁,共123頁,2024年2月25日,星期天2.6樹樹的基本概念二叉樹的定義及其存儲(chǔ)結(jié)構(gòu)二叉樹的前序、中序和后序遍歷第74頁,共123頁,2024年2月25日,星期天2.6.1樹的定義由一個(gè)或多個(gè)結(jié)點(diǎn)組成的有限集合。僅有一個(gè)根結(jié)點(diǎn),結(jié)點(diǎn)間有明顯的層次結(jié)構(gòu)關(guān)系。
A
C
G
T2D
H
I
T3J
M
B
E
L
KT1
F現(xiàn)實(shí)世界中,能用樹的結(jié)構(gòu)表示的例子:學(xué)校的行政關(guān)系、書的層次結(jié)構(gòu)、人類的家族血緣關(guān)系等。第75頁,共123頁,2024年2月25日,星期天介紹幾個(gè)概念:結(jié)點(diǎn)(Node):樹中的元素,包含數(shù)據(jù)項(xiàng)及若干指向其子樹的分支。結(jié)點(diǎn)的度(Degree):結(jié)點(diǎn)擁有的子樹數(shù)。結(jié)點(diǎn)的層次:從根結(jié)點(diǎn)開始算起,根為第一層。葉子(Leaf):度為零的結(jié)點(diǎn),也稱端結(jié)點(diǎn)。孩子(Child):結(jié)點(diǎn)子樹的根稱為該結(jié)點(diǎn)的孩子結(jié)點(diǎn)。兄弟(Sibling):同一雙親的孩子。雙親(Parent):孩子結(jié)點(diǎn)的上層結(jié)點(diǎn),稱為這些結(jié)點(diǎn)的雙親。深度(Depth):樹中結(jié)點(diǎn)的最大層次數(shù)。森林(Forest):M棵互不相交的樹的集合。
A
C
G
T2D
H
I
T3J
M
B
E
L
KT1
F第76頁,共123頁,2024年2月25日,星期天2.6.2二叉樹(BinaryTree)1、二叉樹的定義及其性質(zhì)
(1)二叉樹的定義二叉樹的五種基本形態(tài)二叉樹一種特殊的樹型結(jié)構(gòu),特點(diǎn)是樹中每個(gè)結(jié)點(diǎn)只有兩棵子樹,且子樹有左右之分,次序不能顛倒??斩鏄鋬H有根結(jié)點(diǎn)右子樹為空左子樹為空左右子樹均非空因?yàn)闃涞拿總€(gè)結(jié)點(diǎn)的度不同,存儲(chǔ)困難,使對樹的處理算法很復(fù)雜。所以引出二叉樹的討論。第77頁,共123頁,2024年2月25日,星期天二叉數(shù)是n(n
0)個(gè)結(jié)點(diǎn)的有限集合。它或?yàn)榭諗?shù)(n=0),或由一個(gè)根結(jié)點(diǎn)和兩棵分別稱為根的左子樹和右子樹的互不相交的二叉數(shù)組成。
特別要注意:二叉數(shù)不是樹的特殊情況。aabb兩棵不同的二叉數(shù)第78頁,共123頁,2024年2月25日,星期天A、二叉樹的第i層上至多有2i-1(i
1)個(gè)結(jié)點(diǎn)。(2)二叉樹的基本性質(zhì)423167891011121314155第三層上(i=3),有23-1=4個(gè)節(jié)點(diǎn)。第四層上(i=4),有24-1=8個(gè)節(jié)點(diǎn)。第79頁,共123頁,2024年2月25日,星期天A、二叉樹的第i層上至多有2i-1(i
1)個(gè)結(jié)點(diǎn)。B、深度為h的二叉樹中至多含有2h-1個(gè)結(jié)點(diǎn)。(2)二叉樹的基本性質(zhì)423167891011121314155此樹的深度h=4,共有24-1=15個(gè)節(jié)點(diǎn)。第80頁,共123頁,2024年2月25日,星期天A、二叉樹的第i層上至多有2i-1(i
1)個(gè)結(jié)點(diǎn)。B、深度為h的二叉樹中至多含有2h-1個(gè)結(jié)點(diǎn)。C、若在任意一棵二叉樹中,有n0個(gè)葉子結(jié)點(diǎn),有n2個(gè)度為2的結(jié)點(diǎn),則:n0=n2+1(2)二叉樹的基本性質(zhì)423167891011121314155n0=8n2=7第81頁,共123頁,2024年2月25日,星期天(3)滿二叉樹423167891011121314155特點(diǎn):每一層上都含有最大結(jié)點(diǎn)數(shù)。第82頁,共123頁,2024年2月25日,星期天4231678910
11125
非完全二叉樹(4)完全二叉樹4231678910
11125
完全二叉樹特點(diǎn):除最后一層外,每一層都取最大結(jié)點(diǎn)數(shù),最后一層結(jié)點(diǎn)都集中在該層最左邊的若干位置。第83頁,共123頁,2024年2月25日,星期天(5)樹與二叉樹的區(qū)別A.樹的結(jié)點(diǎn)個(gè)數(shù)至少為1,而二叉樹的結(jié)點(diǎn)個(gè)數(shù)可以為0。B.樹中結(jié)點(diǎn)的最大度數(shù)沒有限制,二叉樹結(jié)點(diǎn)最大度數(shù)為2。C.樹的結(jié)點(diǎn)無左、右之分,二叉樹的結(jié)點(diǎn)子樹有明確的左、右之分。
樹
二叉樹第84頁,共123頁,2024年2月25日,星期天2、二叉樹的存儲(chǔ)結(jié)構(gòu)
(2)鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)T[16]若父結(jié)點(diǎn)在數(shù)組中i下標(biāo)處,其左孩子在2*i處,右孩子在2*i+1處。11
A
B
c
F
E
D
●●●●●●●●●
1
2
4
8
910
5
6
3
712131415(1)順序存儲(chǔ)結(jié)構(gòu)(1)順序存儲(chǔ)結(jié)構(gòu)2h-1=24-1=15用一組連續(xù)的存儲(chǔ)單元存放二叉樹的數(shù)據(jù)元素。結(jié)點(diǎn)在數(shù)組中的相對位置蘊(yùn)含著結(jié)點(diǎn)之間的關(guān)系。0000FE000DC0BA15141312111098765432100一般二叉樹必須按完全二叉樹的形式存儲(chǔ),將造成存儲(chǔ)的浪費(fèi)。第85頁,共123頁,2024年2月25日,星期天2.6.3二叉樹的遍歷查找某個(gè)結(jié)點(diǎn),或?qū)Χ鏄渲腥拷Y(jié)點(diǎn)進(jìn)行某種處理,就需要遍歷。(1)遍歷定義及遍歷算法遍歷是指按某條搜索路線尋訪樹中每個(gè)結(jié)點(diǎn),且每個(gè)結(jié)點(diǎn)只被訪問一次。按先左后右的原則,一般使用三種遍歷:先序遍歷(DLR):
訪問根結(jié)點(diǎn),按先序遍歷左子樹,按先序遍歷右子樹。中序遍歷(LDR):
按中序遍歷左子樹,訪問根結(jié)點(diǎn),按中序遍歷右子樹。后序遍歷(LRD):
按后序遍歷左子樹,按后序遍歷右子樹,訪問根結(jié)點(diǎn)。二叉樹為空時(shí),執(zhí)行空操作,即空二叉樹已遍歷完。第86頁,共123頁,2024年2月25日,星期天
(2)遍歷算法先序遍歷:DLR中序遍歷:LDR后序遍歷:LRDADBCT1T2T3DLRADLRDLR>B>>D>>CDLR以先序遍歷DLR為例演示遍歷過程ABDCBDAC
DBCA第87頁,共123頁,2024年2月25日,星期天例題講解第88頁,共123頁,2024年2月25日,星期天已知二叉樹后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列是
A)acbedB)decabC)deabc D)cedba
已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為
A)GEDHFBCA B)DGEBHFCAC)ABCDEFGH D)ACBFEDHG樹是結(jié)點(diǎn)的集合,它的根結(jié)點(diǎn)數(shù)目是
A)有且只有1 B)1或多于1C)0或1 D)至少2第89頁,共123頁,2024年2月25日,星期天在深度為5的滿二叉樹中,葉子結(jié)點(diǎn)的個(gè)數(shù)為
A)32 B)31C)16 D)15若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其后序遍歷的結(jié)點(diǎn)訪問順序是
A)bdgcefhaB)gdbecfhaC)bdgaechf D)gdbehfca在樹結(jié)構(gòu)中,樹根結(jié)點(diǎn)沒有【1】。下列敘述中正確的是
A)線性表是線性結(jié)構(gòu) B)棧與隊(duì)列是非線性結(jié)構(gòu)
C)線性鏈表是非線性結(jié)構(gòu) D)二叉樹是線性結(jié)構(gòu)第90頁,共123頁,2024年2月25日,星期天具有3個(gè)結(jié)點(diǎn)的二叉樹有
A)2種形態(tài)B)4種形態(tài)C)7種形態(tài)D)5種形態(tài)
設(shè)有下列二叉樹:
對此二叉樹前序遍歷的結(jié)果為A)ZBTTCPXA B)ATBZXCTPC)ZBTACTXPD)ATBZXCPT第91頁,共123頁,2024年2月25日,星期天設(shè)一棵二叉樹中有3個(gè)葉子結(jié)點(diǎn),有8個(gè)度為1的結(jié)點(diǎn),則該二叉樹中總的結(jié)點(diǎn)數(shù)為
A)12 B)13C)14 D)15
設(shè)有下列二叉樹:對此二叉樹的中序遍歷的結(jié)果為A)ABCDEFB)DBEAFCC)ABDECFD)DEBFCA第92頁,共123頁,2024年2月25日,星期天設(shè)樹T的深度為4,其中度為1、2、3、4的結(jié)點(diǎn)個(gè)數(shù)分別為4、2、1、1。則T中的葉子結(jié)點(diǎn)數(shù)為A)8B)7C)6D)5設(shè)一棵完全二叉樹共有700個(gè)結(jié)點(diǎn),則該二叉樹中有()個(gè)葉子結(jié)點(diǎn)。
在一個(gè)容量為15的循環(huán)隊(duì)列中,若頭指針front=6,尾指針rear=9,則該循環(huán)隊(duì)列中共有()個(gè)元素。設(shè)一棵二叉樹的中序遍歷結(jié)果為DBEAFC,前序遍歷結(jié)果為ABDECF,則后序遍歷結(jié)果為()。第93頁,共123頁,2024年2月25日,星期天2.7查找和排序順序查找與二分查找算法基本排序算法(交換類排序、選擇類排序、插入類排序)第94頁,共123頁,2024年2月25日,星期天2.7.1查找查找是在一個(gè)給定的數(shù)據(jù)結(jié)構(gòu)中,根據(jù)給定的條件查找滿足條件的結(jié)點(diǎn)。不同的數(shù)據(jù)結(jié)構(gòu)采用不同的查找方法。查找的效率直接影響數(shù)據(jù)處理的效率。查找的結(jié)果:查找成功:找到滿足條件的結(jié)點(diǎn)查找失敗:找不到滿足條件的結(jié)點(diǎn)。第95頁,共123頁,2024年2月25日,星期天2.7.1.1順序查找(線性查找)查找過程:對給定的一關(guān)鍵字K,從線性表的一端開始,逐個(gè)進(jìn)行記錄的關(guān)鍵字和K的比較,直到找到關(guān)鍵字等于K的記錄或到達(dá)表的另一端??梢圆捎脧那跋蚝蟛?,也可采用從后向前查的方法?!ぴ谄骄闆r下,大約要與表中一半以上元素進(jìn)行比較,效率較低。平均查找長度較大?!ぴ谙旅鎯煞N情況下只能采取順序查找:
a.線性表為無序表(元素排列是無序的);
b.即使是有序線性表,但采用的是鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。第96頁,共123頁,2024年2月25日,星期天2.7.1.2折半查找(二分法查找)思想:先確定待查找記錄所在的范圍,然后逐步縮小范圍,直到找到或確認(rèn)找不到該記錄為止。前提:必須在具有順序存儲(chǔ)結(jié)構(gòu)的有序表中進(jìn)行。分三種情況:1)若中間項(xiàng)的值等于x,則說明已查到。2)若x小于中間項(xiàng)的值,則在線性表的前半部分查找;3)若x大于中間項(xiàng)的值,則在線性表的后半部分查找。特點(diǎn):比順序查找方法效率高。最壞的情況下,需要比較log2n次。第97頁,共123頁,2024年2月25日,星期天查找23和79的過程如下圖:mid=(low+high)/2不進(jìn)位取整(08,14,23,37,46,55,68,79,91)(08,14,23,37,46,55,68,79,91)lowhighmid(08,14,23,37,46,55,68,79,91)lowhigh=mid-1mid(08,14,23,37,46,55,68,79,91)low=mid+1highmid(08,14,23,37,46,55,68,79,
91)lowhighmid(08,14,23,37,46,55,68,79,91)lowhighmid(08,14,23,37,46,55,68,79,91)lowhighmid第98頁,共123頁,2024年2月25日,星期天2.7.2排序2.7.2.1概述1、排序的功能:將一個(gè)數(shù)據(jù)元素(或記錄)的任意序列,重新排成一個(gè)按關(guān)鍵字有序的序列。2、排序過程的組成步驟:首先比較兩個(gè)關(guān)鍵字的大小;然后將記錄從一個(gè)位置移動(dòng)到另一個(gè)位置。第99頁,共123頁,2024年2月25日,星期天排序方法插入排序選擇排序交換排序歸并排序直接插入排序折半插入排序簡單選擇排序堆排序起泡排序快速排序第100頁,共123頁,2024年2月25日,星期天2.7.2.2插入排序
直接插入、折半插入1、直接插入排序:
基本思想:從數(shù)組的第2號(hào)元素開始,順序從數(shù)組中取出元素,并將該元素插入到其左端已排好序的數(shù)組的適當(dāng)位置上。需要n(n-1)/2次比較第101頁,共123頁,2024年2月25日,星期天該算法適合于n較小的情況,時(shí)間復(fù)雜度為O(n2).待排元素序列:[53]2736156942第一次排序:[2753]36156942第二次排序:[273653]156942第三次排序:[15273653]6942第四次排序:[1527365369]42第五次排序:[152736425369]
直接插入排序示例對于有n個(gè)數(shù)據(jù)元素的待排序列,插入操作要進(jìn)行n-1次第102頁,共123頁,2024年2月25日,星期天2、折半插入排序
折半插入排序在尋找插入位置時(shí),不是逐個(gè)比較而是利用折半查找的原理尋找插入位置。待排序元素越多,改進(jìn)效果越明顯。折半插入排序的條件:在有序序列中插入一個(gè)關(guān)鍵字。第103頁,共123頁,2024年2月25日,星期天例:有6個(gè)記錄,前5個(gè)已排序的基礎(chǔ)上,對第6個(gè)記錄排序。[1527365369]42
low
mid
high
[1527365369]42
low
high
mid
[1527365369]42
high
low[152736425369](high<low,查找結(jié)束,插入位置為low或high+1)(42>36)(42<53)第104頁,共123頁,2024年2月25日,星期天
1、簡單選擇排序思想:首先從1~n個(gè)元素中選出關(guān)鍵字最小的記錄交換到第一個(gè)位置上。然后再從第2個(gè)到第n個(gè)元素中選出次小的記錄交換到第二個(gè)位置上,依次類推。時(shí)間復(fù)雜度為O(n2),最壞情況下需要比較
n(n-1)/2次適用于待排序元素較少的情況。2.7.2.3選擇排序
簡單選擇排序、堆排序第105頁,共123頁,2024年2月25日,星期天初態(tài)83916839168391683916ijkijkijkijk1
3986互換ijk1
3986ikj1
3986ikj第一趟第二趟1
3986ikj第三趟第106頁,共123頁,2024年2月25日,星期天
2
堆排序
也是一種選擇排序。是具有特定條件的順序存儲(chǔ)的完全二叉樹,其特定條件是:任何一個(gè)非葉子結(jié)點(diǎn)的關(guān)鍵字大于等于(或小于等于)子女的關(guān)鍵字的值。
(1)堆的示例
897624331510112536497856(a):堆頂元素取最大值(b):堆頂元素取最小值(2)實(shí)現(xiàn)堆排序需解決兩個(gè)問題:
(1)如何由一個(gè)無序序列建成一個(gè)堆?(2)輸出堆頂元素后,如何將剩余元素調(diào)整成一個(gè)新的堆?堆排序需要比較的次數(shù)為O(nlog2n)第107頁,共123頁,2024年2月25日,星期天2.7.2.4交換排序交換排序的特點(diǎn)在于交換。有冒泡和快速排序兩種。1、冒泡排序(起泡排序)思想:小的浮起,大的沉底。從左端開始比較。第一趟:第1個(gè)與第2個(gè)比較,大則交換;第2個(gè)與第3個(gè)比較,大則交換,……關(guān)鍵字最大的記錄交換到最后一個(gè)位置上;第二趟:對前n-1個(gè)記錄進(jìn)行同樣的操作,關(guān)鍵字次大的記錄交換到第n-1個(gè)位置上;依次類推,則完成排序。正序:時(shí)間復(fù)雜度為O(n)逆序:時(shí)間復(fù)雜度為O(n2)
適合于數(shù)據(jù)較少的情況。排序n個(gè)記錄的文件最多需要n-1趟冒泡排序。第108頁,共123頁,2024年2月25日,星期天第六趟排序后第五趟排序后第四趟排序后第三趟排序后第二趟排序后第一趟排序后初始關(guān)鍵字思想:小的浮起,大的沉底。4936416511783665364156364165413641561178363641491156492525251149495611111125252525第109頁,共123頁,2024年2月25日,星期天2、快速排序(對冒泡排序的改進(jìn))思想:通過一趟排序?qū)⒋判蛄蟹殖蓛刹糠郑蛊渲幸徊糠钟涗浀年P(guān)鍵字均比另一部分小,再分別對這兩部分排序,以達(dá)到整個(gè)序列有序。關(guān)鍵字通常取第一個(gè)記錄的值為基準(zhǔn)值。做法:附設(shè)兩個(gè)指針low和high
,初值分別指向第一個(gè)記錄和最后一個(gè)記錄,設(shè)關(guān)鍵字為
key
,首先從high所指位置起向前搜索,找到第一個(gè)小于基準(zhǔn)值的記錄與基準(zhǔn)記錄交換,然后從low
所指位置起向后搜索,找到第一個(gè)大于基準(zhǔn)值的記錄與基準(zhǔn)記錄交換,重復(fù)這兩步直至low=high為止。時(shí)間復(fù)雜度:O(log2n)第110頁,共123頁,2024年2月25日,星期天快速排序過程示意圖:有序序列618235267key初始序列235266718lowhigh一次交換185266723lowhigh二次交換18
2366752high三次交換[186]23[6752]//完成一趟排序后分別進(jìn)行快速排序lowhigh第111
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年文化娛樂文件模板收藏與知識(shí)產(chǎn)權(quán)合同3篇
- 2024版土地租賃及買賣交易服務(wù)合同范本3篇
- 2024年度房地產(chǎn)項(xiàng)目定位與策略策劃合同3篇
- 2024年文化產(chǎn)業(yè)發(fā)展項(xiàng)目人力資源派遣與文化傳承協(xié)議3篇
- 2024年多媒體互動(dòng)軟件銷售與推廣合同范本3篇
- 2024年版權(quán)轉(zhuǎn)讓合同范本
- 2024年度一手房產(chǎn)抵押貸款合同范本3篇
- 2024年度美術(shù)作品版權(quán)保護(hù)與侵權(quán)糾紛處理合同3篇
- 2024年度智慧城市通信工程分包合作合同范本3篇
- 2024年度智慧社區(qū)保安勞務(wù)派遣服務(wù)合同樣本2篇
- GB/T 18277-2000公路收費(fèi)制式
- 2023年住院醫(yī)師規(guī)范化培訓(xùn)胸外科出科考試
- 11468工作崗位研究原理與應(yīng)用第7章
- 2023實(shí)施《中華人民共和國野生動(dòng)物保護(hù)法》全文學(xué)習(xí)PPT課件(帶內(nèi)容)
- 2022年初級(jí)育嬰師考試題庫附答案
- 系統(tǒng)家庭療法課件
- 新版GSP《醫(yī)療器械經(jīng)營質(zhì)量管理規(guī)范》培訓(xùn)試題
- 初中道德與法治答題技巧課件
- 管理學(xué)專業(yè):管理基礎(chǔ)知識(shí)試題庫(附含答案)
- 河北省保定市藥品零售藥店企業(yè)藥房名單目錄
- 廣西基本醫(yī)療保險(xiǎn)門診特殊慢性病申報(bào)表
評(píng)論
0/150
提交評(píng)論