數(shù)據(jù)結(jié)構(gòu)第三章棧、隊列、數(shù)組_第1頁
數(shù)據(jù)結(jié)構(gòu)第三章棧、隊列、數(shù)組_第2頁
數(shù)據(jù)結(jié)構(gòu)第三章棧、隊列、數(shù)組_第3頁
數(shù)據(jù)結(jié)構(gòu)第三章棧、隊列、數(shù)組_第4頁
數(shù)據(jù)結(jié)構(gòu)第三章棧、隊列、數(shù)組_第5頁
已閱讀5頁,還剩224頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第三課 棧、隊列和數(shù)組第一節(jié) 棧棧頂棧頂棧底棧底一、基本術(shù)語限定僅在表尾進(jìn)行F棧頂和棧底F棧能進(jìn)行插入和刪除一端稱棧底。插入、刪除的線性表。操作的一端稱棧頂,另anai+1aiai-1a1一、基本術(shù)語F入棧和出棧先進(jìn)后出一、基本術(shù)語棧中元素個數(shù)。F空棧F棧的長度長度為0的棧。二、抽象數(shù)據(jù)類型定義P45F棧三、順序棧F存儲結(jié)構(gòu)設(shè)計【例】設(shè)棧S=(34,28,76,53,99)9934762853#define MAXSIZE 10040213MAXSIZE-15typedef struct ElemType elemMAXSIZE;int length;SqStack;SqStack S;S.e

2、lemS.length三、順序棧F入?!纠吭O(shè)棧S=(34,28,76,53,99),5993476285340213MAXSIZE-1S.elemS.length待入棧元素e=82,執(zhí)行push(&S,e)e82826三、順序棧F出?!纠吭O(shè)棧S=(34,28,76,53,99),5993476285340213MAXSIZE-1S.elemS.length執(zhí)行pop(&S,&e)e4四、鏈棧F存儲結(jié)構(gòu)設(shè)計head99 34287653【例】設(shè)棧S=(34,28,76,53,99)四、鏈棧F入棧head9934287653【例】設(shè)棧S=(34,28,76,53,99)

3、待入棧元素e=82,執(zhí)行push(S,e)e8282ps四、鏈棧F出棧head9934287653【例】設(shè)棧S=(34,28,76,53,99)執(zhí)行pop(S,e)ep99q四、鏈棧F存儲結(jié)構(gòu)設(shè)計head34 99537628【例】設(shè)棧S=(34,28,76,53,99)四、鏈棧F入棧head3499537628【例】設(shè)棧S=(34,28,76,53,99)待入棧元素e=82,執(zhí)行push(S,e)e8282s四、鏈棧F出棧head3499537628【例】設(shè)棧S=(34,28,76,53,99)執(zhí)行pop(S,e)e99p問題:設(shè)表達(dá)式中可含算符 +、-、*、/、( )及操作數(shù),并設(shè)表達(dá)式無

4、語法錯誤,試設(shè)計算法求其值。五、應(yīng)用:表達(dá)式求值表達(dá)式的表示方法u中綴表達(dá)式u前綴表達(dá)式u后綴表達(dá)式5+6+5656+(1+2*(3+4)/5*(7-6)*/+1*2+345761234+*+5/76-*定義:calc(exp)操作結(jié)果:輸出表達(dá)式求值結(jié)果原型:int calc(char *exp);五、應(yīng)用:表達(dá)式求值F中綴表達(dá)式F前綴表達(dá)式F后綴表達(dá)式1+3*4/2-5#運算數(shù)棧運算符棧#i1+3*4=12/26-57 2exp【例】F中綴表達(dá)式1+2*3/(5-4)#運算數(shù)棧運算符棧#i+2*3=6/(51-41 6 7【例】expF中綴表達(dá)式思路:表達(dá)式起始符入運算符棧;讀表達(dá)式中字符

5、;若當(dāng)前字符為,且運算符棧中棧頂元素也是,則表達(dá)式計算結(jié)束,返回運算結(jié)果,否則執(zhí)行;五、應(yīng)用:表達(dá)式求值若當(dāng)前字符不是運算符,則入運算數(shù)棧,并讀下一字符;否則與運算符棧中棧頂元素進(jìn)行優(yōu)先級比較:設(shè)表達(dá)式中算符出現(xiàn)在算符前,則兩者優(yōu)先關(guān)系:=無無)無=/*-+#)(/*-+12五、應(yīng)用:表達(dá)式求值當(dāng)前運算符入棧,并讀下一字符;Y棧頂優(yōu)先級低Y兩者優(yōu)先級同Y棧頂優(yōu)先級高必為左右括號相遇,令棧頂元素出棧,讀下一字符;完成棧頂運算,結(jié)果入運算數(shù)棧;反復(fù)執(zhí)行、,直至計算完成。-+1/*3425#Y前綴表達(dá)式1+3*4/2-5#【例】-+1/*3425expnewexp12 6 7 2思路:取最后面的運算

6、符為當(dāng)前運算符;取當(dāng)前運算符后面的兩個數(shù)為運算數(shù);運算結(jié)果替換當(dāng)前算式;重復(fù)執(zhí)行直至所有運算符都運算完畢。五、應(yīng)用:表達(dá)式求值第二節(jié) 隊列一、基本術(shù)語隊列是限定在一端進(jìn)行插入,而在另一端進(jìn)行刪除的線F入隊和出隊F隊列、隊頭和隊尾性表,能插入的一端稱為隊尾,能刪除的一端稱為隊頭。隊頭隊尾先進(jìn)先出一、基本術(shù)語隊列中元素個數(shù)。F空隊F隊列的長度長度為0的隊列。二、抽象數(shù)據(jù)類型定義F隊列P59三、鏈隊列F存儲結(jié)構(gòu)設(shè)計head99 34287653【例】設(shè)隊列Q=(34,28,76,53,99)tailtypedef struct QNodeElemType data;/數(shù)據(jù)域struct QNode

7、*next;/指針域QNode;三、鏈隊列F存儲結(jié)構(gòu)設(shè)計head99 34287653【例】設(shè)隊列Q=(34,28,76,53,99)tailtypedef struct QNode *head;QNode *tail; LinkQueue;LinkQueue Q;Q.headQ.tailQ.head三、鏈隊列F入隊9934287653【例】設(shè)隊列Q=(34,28,76,53,99)Q.tail待入隊元素e=82,執(zhí)行enqueue(Q,e)e8282sF出隊【例】設(shè)隊列Q=(34,28,76,53,99)執(zhí)行dequeue(Q,e)ep三、鏈隊列Q.head99 34287653Q.tail

8、34F出隊【例】設(shè)隊列Q=(99)執(zhí)行dequeue(Q,e)ep三、鏈隊列Q.head99 Q.tail99四、順序隊列F存儲結(jié)構(gòu)設(shè)計【例】設(shè)隊列Q=(34,28,76,53,99)9934762853#define MAXSIZE 10040213MAXSIZE-15typedef struct ElemType elemMAXSIZE;int head;int tail;SqQueue Q;Q.elemQ.tail0Q.headSqQueue;四、順序隊列F入隊【例】設(shè)隊列Q=(34,28,76,53,99)993476285340213MAXSIZE-15Q.elemQ.tail0Q.

9、head待入隊元素e=82,執(zhí)行enqueue(Q,e)56e82826Q.elemQ.tail=e;Q.tail+;四、順序隊列F出隊【例】設(shè)隊列Q=(34,28,76,53,99)9934762853402135Q.elemQ.tail0Q.head執(zhí)行dequeue(Q,e)56e1e=Q.elemQ.head;Q.head+;82四、順序隊列F可能的問題【例】設(shè)隊列Q=(34,28,76,53,99)9934762853402135Q.elemQ.tail0Q.head執(zhí)行dequeue(Q,e)56e1執(zhí)行dequeue(Q,e)執(zhí)行dequeue(Q,e)2 3執(zhí)行enqueue(

10、Q,e) e=82826執(zhí)行enqueue(Q,e) e=4747477執(zhí)行enqueue(Q,e) e=151547四、順序隊列F循環(huán)隊列【例】設(shè)隊列Q如圖,9953402136Q.elemQ.tail3Q.head執(zhí)行enqueue(Q,e) e=4756e8247Q.elemQ.tail=e;Q.tail+;Q.tail=(Q.tail+1)%7;0執(zhí)行enqueue(Q,e) e=1515151入隊四、順序隊列F循環(huán)隊列【例】設(shè)隊列Q如圖,402133Q.elemQ.tail6Q.head執(zhí)行dequeue(Q,e)56e91e=Q.elemQ.head;Q.head+;471566Q

11、.head=(Q.head+1)%7;0出隊四、順序隊列F循環(huán)隊列【例】設(shè)隊列Q如圖,執(zhí)行l(wèi)ength(Q)求隊長9953402136Q.elemQ.tail3Q.head5682Q.tail-Q.head四、順序隊列F循環(huán)隊列【例】設(shè)隊列Q如圖,402133Q.elemQ.tail6Q.head執(zhí)行l(wèi)ength(Q)5691471566求隊長MAXSIZE-(Q.head-Q.tail)四、順序隊列F循環(huán)隊列求隊長Q.tailQ.head時:Q.tailQ.head時:Q.tail-Q.headMAXSIZE-(Q.head-Q.tail)MAXSIZE+Q.tail-Q.headMAXSI

12、ZE+Q.tail-Q.head(MAXSIZE+Q.tail-Q.head)%MAXSIZE(MAXSIZE+Q.tail-Q.head)%MAXSIZE五、應(yīng)用:離散事件模擬問題:設(shè)某銀行有四個窗口對外接待客戶,每個窗口在一個時刻只能接待一個客戶,客戶較多時需排隊。客戶業(yè)務(wù)處理完畢后離開銀行,與他同處一隊的下一客戶的業(yè)務(wù)得以處理。要求編程模擬銀行的業(yè)務(wù)活動,計算一天內(nèi)客戶在銀行逗留的平均時間。五、應(yīng)用:離散事件模擬分析:一天內(nèi)客戶在銀行逗留的平均時間從銀行開門至關(guān)門時間內(nèi)所有客戶逗留時間之和客戶數(shù)客戶逗留時間客戶離開時間客戶到達(dá)時間五、應(yīng)用:離散事件模擬分析:客戶到達(dá)時間是隨機的,不妨設(shè)第

13、一個客戶的到達(dá)時間為 0 ,即銀行開門時間,下一客戶的到達(dá)時間為前一客戶到達(dá)時間加一隨機數(shù)??蛻舻竭_(dá)時間不能超過銀行關(guān)門時間。客戶到達(dá)后排入長度最短的隊列。若該隊為空,則客戶離開時間客戶到達(dá)時間客戶業(yè)務(wù)處理時間,否則客戶離開時間該隊前一客戶離開時間客戶業(yè)務(wù)處理時間。其中客戶業(yè)務(wù)處理時間亦為隨機數(shù)。五、應(yīng)用:離散事件模擬分析:待處理事件有兩類,即客戶到達(dá)事件和客戶離開事件。對客戶到達(dá)事件的處理為:累計客戶數(shù);產(chǎn)生下一客戶到達(dá)事件;當(dāng)前客戶入長度最短的隊;若該隊原為空,則產(chǎn)生客戶離開事件。對客戶離開事件的處理為:從隊列中刪除當(dāng)前客戶;累計客戶逗留時間;若該隊非空,則產(chǎn)生下一客戶離開事件。事件應(yīng)按其

14、發(fā)生的先后次序得以處理。五、應(yīng)用:離散事件模擬數(shù)據(jù)對象:Y客戶信息數(shù)據(jù)項邏輯結(jié)構(gòu)存儲結(jié)構(gòu)Y事件信息數(shù)據(jù)項邏輯結(jié)構(gòu)存儲結(jié)構(gòu)客戶到達(dá)時間、業(yè)務(wù)處理時間隊列鏈隊事件類型、事件發(fā)生時間線性表單鏈表(按事件發(fā)生時間有序)五、應(yīng)用:離散事件模擬思路:銀行開門:列、事件表,產(chǎn)生第一個客戶到達(dá)事件;業(yè)務(wù)活動:銀行關(guān)門:初始化客戶數(shù)、客戶逗留時間、4個客戶隊依次處理事件表中事件,直至事件表為空;求得一天內(nèi)客戶在銀行逗留的平均時間。五、應(yīng)用:離散事件模擬類型定義:typedef structint ArrivalTime;/客戶到達(dá)時間int Duration;/業(yè)務(wù)處理時間Custom;/客戶typedef C

15、ustom QElemType;五、應(yīng)用:離散事件模擬類型定義:typedef struct QNodeQElemType data;struct QNode *next;QNode;typedef structQNode *head;QNode *tail;LinkQueue;/客戶隊列類型五、應(yīng)用:離散事件模擬類型定義:typedef structint OccurTime;/事件發(fā)生時間int NType;/事件類型,0表示客戶到達(dá)事件,/1,2,3,4分別表示隊列1,2,3,4中隊頭客戶離開事件Event;/事件typedef Event LElemType;五、應(yīng)用:離散事件模擬類型

16、定義:typedef struct LNodeLElemType data;struct LNode *next;LNode,*EventList;/事件鏈表類型全局變量:int TotalTime,CustomerNum;/客戶逗留時間、客戶數(shù)五、應(yīng)用:離散事件模擬算法:void Bank_Simulation( )/銀行開門/初始化客戶數(shù)、客戶逗留時間CustomerNum=0;TotalTime=0;/初始化4個客戶隊列for(i=1;i=4;+i) InitQueue(qi);五、應(yīng)用:離散事件模擬/初始化事件表InitList(ev);/產(chǎn)生第一個客戶到達(dá)事件enen.OccurTi

17、me=0;/事件發(fā)生時間en.NType=0;/事件類型OrderInsert(ev,en);/將事件en按發(fā)生時間有序插入事件表ev五、應(yīng)用:離散事件模擬/業(yè)務(wù)活動/依次處理事件表中事件,直至事件表為空;while(!ListEmpty(ev)/若事件表非空ListDelete(ev,1,en);/en為當(dāng)前待處理事件if (en.NType=0) CustomerArrived( en );else CustomerDeparture( en );/while五、應(yīng)用:離散事件模擬/銀行關(guān)門printf(“The Average Time: %fn,TotalTime/CustomerNu

18、m);/Bank_Simulation五、應(yīng)用:離散事件模擬客戶到達(dá)事件處理算法:void CustomerArrived(LElemType en)/累計客戶數(shù)+CustomerNum;/產(chǎn)生下一客戶到達(dá)事件e,并按時間有序入事件表evRandom(intertime);/下一客戶間隔多久后到達(dá)e.OccurTime=en.OccurTime+intertime;if (e.OccurTime0ji為數(shù)據(jù)元素第 i 維的下標(biāo),0jibi-1,bi是數(shù)組第 i 維的長度,即維界,一、抽象數(shù)據(jù)類型定義ADT Array一、抽象數(shù)據(jù)類型定義數(shù)據(jù)對象:D=aj1j2jn |其中:aj1j2jnEle

19、mSet,i=1,2,n,n為數(shù)組的維數(shù),也即每個數(shù)據(jù)元素對應(yīng)的下標(biāo)的個數(shù),n0ji為數(shù)據(jù)元素第 i 維的下標(biāo),0jibi-1,bi是數(shù)組第 i 維的長度,即維界,【例】二維數(shù)組,記: B=(1,2,3),(4,5,6);或: B=(1,4),(2,5),(3,6)。654321數(shù)據(jù)關(guān)系:R=R1,R2,RnRi=,0jibi-2,0jkbk-1,1kn,kininijjjjjjaa.1.11,Daaninijjjjjj .1.11,|一、抽象數(shù)據(jù)類型定義設(shè)二維數(shù)組B=,則b1=2,b2=3,R=R1,R2。654321【例】關(guān)系R1有:0j1b1-2=0,0j2b2-1=2,即R1= , =

20、,關(guān)系R2有:0j1b1-1=1,0j2b2-2=1,即R2= ,=,一、抽象數(shù)據(jù)類型定義基本操作:InitArray(&A,n,bound1,boundn)操作結(jié)果:若給定的維數(shù)和各維長度值合法,則構(gòu)造數(shù)組ADestroyArray(&A)操作結(jié)果:銷毀數(shù)組A一、抽象數(shù)據(jù)類型定義Value(A,&e,index1,indexn)操作結(jié)果:若各給定下標(biāo)值不越界,則由 e 返回相應(yīng)元素值A(chǔ)ssign(&A,e,index1,indexn)操作結(jié)果:若各給定下標(biāo)值不越界,則將 e 值賦給指定元素/ADT Array一、抽象數(shù)據(jù)類型定義51324用一組地址連續(xù)的存儲單

21、元依次存儲數(shù)組中數(shù)據(jù)元素,存儲時需考慮各維的主次問題。1、存儲結(jié)構(gòu)設(shè)計【例】設(shè)數(shù)組A=200820002004200220062 byte65432162010行主序二、順序存儲結(jié)構(gòu)31245用一組地址連續(xù)的存儲單元依次存儲數(shù)組中數(shù)據(jù)元素,存儲時需考慮各維的主次問題。1、存儲結(jié)構(gòu)設(shè)計【例】設(shè)數(shù)組A=200820002004200220062 byte65432162010列主序問題:如何按給定的下標(biāo),計算對應(yīng)數(shù)組元素的存儲地址。二、順序存儲結(jié)構(gòu)設(shè)二維數(shù)組Ams以行序為主序存儲,存儲空間首地址為LOC(0,0),每個數(shù)組元素占用L個存儲單元,求LOC(i,j)?!纠?,00,j0,s-11,0

22、1,j1,s-1i,0i,ji,s-1m-1,0m-1,jm-1,s-10,00,s-11,01,s-1i,0i,ji,s-1.LOC(0,0)LOC(0,0)s s* *L L i行i i* *s s* *L Lj j* *L L設(shè)二維數(shù)組Ams以行序為主序存儲,存儲空間首地址為LOC(0,0),每個數(shù)組元素占用L個存儲單元?!纠?,00,s-11,01,s-1i,0i,ji,s-1.LOC(0,0)LOC(0,0)i i* *s s* *L Lj j* *L LLOC(i,j)=LOC(0,0)+i*s*L+j*L解:LOC(j1,j2)=LOC(0,0)+(j1*b2+j2)*L設(shè)三維

23、數(shù)組Amst以行序為主序存儲,存儲空間首地址為LOC(0,0,0),每個數(shù)組元素占L個存儲單元,求LOC(i,j,k)?!纠?,0,00,0,k0,0,t-10,1,00,1,k0,1,t-10,j,00,j,k0,j,t-10,s-1,00,s-1,k0,s-1,t-10,0,00,s-1,t-11,0,01,s-1,t-1i,0,0i,j,ki,s-1,t-1.LOC(0,0,0)LOC(0,0,0)s s* *t t* *L L i片i i* *s s* *t t* *L L(j(j* *t+kt+k) )* *L L【例】LOC(i,j,k)解:=LOC(0,0,0)+i*s*t*L

24、+j*t*L+k*L設(shè)三維數(shù)組Amst以行序為主序存儲,存儲空間首地址為LOC(0,0,0),每個數(shù)組元素占L個存儲單元,求LOC(i,j,k)。0,0,00,s-1,t-11,0,01,s-1,t-1i,0,0i,j,ki,s-1,t-1.LOC(0,0,0)LOC(0,0,0)LOC(j1,j2,j3)=LOC(0,0,0)+(j1*b2*b3+j2*b3+j3)*Li i* *s s* *t t* *L L(j(j* *t+kt+k) )* *L L設(shè)維數(shù)組Ab1b2bn,則:niiijc1*LOC(j1,j2,jn)j j1 1*b b2 2* * *b bn n* *L L+j j2

25、 2*b b3 3* * *b bn n* *L L+j jn-1n-1*b bn n* *L L+j jn n*L L其中,cn=L,ci-1=ci*bi,1in,稱求址常量。LOC(0,0,0)+LOC(0,0,0)+二、順序存儲結(jié)構(gòu)對n維數(shù)組,除需長為b1*b2*bn的連續(xù)空間存儲數(shù)據(jù)元素外,還需記錄數(shù)組的維數(shù)n和各維的維界bi,為提高存取效率,可將求址常量ci也保存下來,此時可令cn=1。二、順序存儲結(jié)構(gòu)【例】設(shè)三維數(shù)組A=(1,2,3,4),(5,6,7,8),(9,10,11,12),(13,14,15,16),(17,18,19,20),(21,22,23,24)按行序存放。12

26、24A.base234A.bounds1241A.constants3A.dim0123二、順序存儲結(jié)構(gòu)#define MAX_ARRAY_DIM 8/定義最大維數(shù)typedef structElemType *base;/保存數(shù)組元素存儲空間首地址int dim;/保存數(shù)組維數(shù)int *bounds;/指向保存各維維界的存儲空間int *constants;/指向保存求址常量的存儲空間Array;二、順序存儲結(jié)構(gòu)編程時通常用二維數(shù)組保存矩陣,但有時會浪費空間?!纠緼=B=【問題】對值相同的元素或零元素分布有規(guī)律的矩陣,如何存儲才既能節(jié)省空間,又能保證矩陣運算的正常進(jìn)行。5876582303

27、7364760492537210004000803030006000209000三、矩陣的壓縮存儲F定義若n階矩陣A有aij=aji i,j0,n-1,則稱A為n階對稱陣?!纠緼=58765823037364760492537211、對稱陣F存儲結(jié)構(gòu)設(shè)計用一組地址連續(xù)的存儲單元按行或列序保存其上/下三角(含對角線)中的數(shù)據(jù)元素,共n(n+1)/2個?!纠緼=58765823037364760492537211、對稱陣F存儲結(jié)構(gòu)設(shè)計【例】行主序:列主序:A=1297465127359558765823037364760492537211、對稱陣F存儲地址計算【問題】設(shè)以行序?qū)ΨQ矩陣的下三角

28、元素(含對角線)保存在一維數(shù)組san(n+1)/2中。若aij保存在sak中,則如何由i,j求k值?【分析】下三角中元素行下標(biāo)列下標(biāo),因此若ij,則應(yīng)求aji的存儲位置;1、對稱陣若ij,則aij在存儲空間中的相對位置為k=i(i+1)/2+j。1, 11 , 101, 10, 1111000.nnniiijiiiiaaaaaaaaaa1、對稱陣F定義若矩陣的上下三角(不含對角線)中元素為一常數(shù),則稱該矩陣為下上三角陣?!纠緼=B=431962740322058222602222170000860009230060420837252、三角陣F存儲結(jié)構(gòu)設(shè)計用一組地址連續(xù)的存儲單元按行或列序存儲

29、其上下三角(含對角線)中數(shù)據(jù)元素,再加常數(shù),共n(n+1)/2+1個?!纠緼=43196274032205822260222212、三角陣F存儲結(jié)構(gòu)設(shè)計【例】行主序列主序A=106854106854210836410836422243196274032205822260222212、三角陣F定義若矩陣中除主對角線及其上下若干條對角線上的元素之外,其余元素均為0,則稱對角陣?!纠緼=43000132000975000386000213、對角陣F存儲結(jié)構(gòu)設(shè)計將矩陣中的非零元按某種次序(行序、對角線順序等)存儲于一組地址連續(xù)的存儲單元。【例】A=4300013200097500038600021

30、3、對角陣F存儲結(jié)構(gòu)設(shè)計【例】行主序?qū)蔷€順序A=268334239121343000132000975000386000213、對角陣F定義設(shè)在mn矩陣中,有t個數(shù)據(jù)元素不為零。當(dāng)稀疏因子時,稱該矩陣為稀疏矩陣。【例】A=05. 0nmt000700150000018000002400014000030000000000091204、稀疏陣F三元組表示法對稀疏矩陣進(jìn)行壓縮存儲時,可只保存其中非零元,同時還需指明非零元所處的行列位置及總的行數(shù)、列數(shù)。【例】 A=000700150000018000002400014000030000000000091204、稀疏陣記:(1,2,12),(1,3

31、,9),(3,1,-3),(3,6,14),(4,3,24),(5,2,18),(6,1,15),(6,4,-7),(6,7,8)F存儲結(jié)構(gòu)設(shè)計順序表存儲結(jié)構(gòu)用一組地址連續(xù)的存儲單元按行序保存各三元組,另設(shè)變量保存稀疏矩陣的行數(shù)、列數(shù)和非零元數(shù)。4、稀疏陣【例】A=786A.tu-7461516182524341463-3139311221A.dataA.muA.nuije76543201000700150000018000002400014000030000000000091204、稀疏陣#define MAXSIZE 1000/非零元最大個數(shù)typedef structint i;/行下標(biāo)

32、int j;/列下標(biāo)ElemType e;/非零元值Triple;/三元組類型4、稀疏陣typedef struct Triple dataMAXSIZE;/三元組表int mu;/行數(shù)int nu;/列數(shù)int tu;/非零元個數(shù)TSMatrix;4、稀疏陣F矩陣轉(zhuǎn)置基于順序表存儲結(jié)構(gòu)實現(xiàn)【定義】TransposeSMatrix(M,&T)操作結(jié)果:求稀疏矩陣M的轉(zhuǎn)置矩陣T【原型】void TransposeSMatrix(TSMatrix M,TSMatrix &T);4、稀疏陣【經(jīng)典算法】將mu行nu列的矩陣M轉(zhuǎn)置為矩陣T的經(jīng)典算法為:for(i=1;i=mu;+i)fo

33、r(j=1;j=nu;+j)Tji=Mij;算法的時間復(fù)雜度為O(mu*nu)。4、稀疏陣設(shè)稀疏矩陣M:則其轉(zhuǎn)置矩陣T:00070015000001800000240001400003000000000009120000000000140000000070000000240090180001215003004、稀疏陣三元組表M:三元組表T:(1,2,12),(1,3,9),(3,1,-3)(1,3,-3),(1,6,15),(2,1,12)(3,6,14),(4,3,24),(5,2,18)(2,5,18),(3,1,9),(3,4,24)(6,1,15),(6,4,-7),(6,7,8)(4

34、,6,-7),(6,3,14),(7,6,8)4、稀疏陣【思路】交換矩陣行列數(shù);交換每個三元組中的行列下標(biāo):重排三元組,使之按行序排列。Y重排方案一按T中三元組的次序依次在M中找到相應(yīng)的三元組進(jìn)行轉(zhuǎn)置,即按M的列序進(jìn)行轉(zhuǎn)置。4、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tuT.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tuT.dataT.muT.nu7654320176

35、5432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tuT.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tuT.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-331T.dataT.muT.nu765432017654320

36、14、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-331T.dataT.muT.nu765432017654

37、32014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1561-331T.dataT.muT.nu7

38、6543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu12121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1212

39、1561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu12121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu12121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-31393112

40、21M.dataM.muM.nu687T.tu12121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu12121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.

41、tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu185212121561-331T.da

42、taT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-313931122

43、1M.dataM.muM.nu687T.tu913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu913185212121561-331T.dataT.muT.nu7654320176543

44、2014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu2443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu2443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM

45、.nu687T.tu2443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu2443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu2443913185212121561-331T.dataT.muT.nu7654320176543

46、2014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu2443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu2443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM

47、.nu687T.tu2443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu2443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu2443913185212121561-331T.dataT.muT.nu7654320176543

48、2014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu2443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu2443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM

49、.nu687T.tu-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-7642443913185212121561-331T.dataT.muT.nu7

50、6543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3

51、139311221M.dataM.muM.nu687T.tu-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-764244391318521212156

52、1-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7

53、461516182524341463-3139311221M.dataM.muM.nu687T.tu-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu-7

54、642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu76543

55、201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-74615161825243414

56、63-3139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1436-76424

57、43913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu765432017

58、65432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3

59、139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【例】786M.tu-7461516182524341463-3139311221M.dataM.muM.nu687T.tu1436-7642443913185212121561-331T.dataT.muT.nu76543201765432014、稀疏陣【算法分析】此時對M中每一列的處理均需掃描整個三元組表,時間復(fù)雜度為O(nu*tu),當(dāng)tu與mu*nu等數(shù)量級時,時間復(fù)雜度達(dá)O(nu2*mu),高于

60、經(jīng)典算法的O(mu*nu)。4、稀疏陣Y重排方案二按M中三元組的次序進(jìn)行轉(zhuǎn)置,將轉(zhuǎn)置所得三元組存放到T中恰當(dāng)位置。此時需記錄T中每一行(即M中每一列)的當(dāng)前三元組應(yīng)存放的位置。該位置初始時為每一行的第一個非零元所在位置,然后每放一個三元組就加1。4、稀疏陣【例】000000num0-7461516182524341463-3139311221M.data786M.tuM.muM.nuT.data687T.tuT.muT.nu76543201765432016543201注:num中保存M中各列(即T中各行)的非零元數(shù)4、稀疏陣【例】000000num0-7461516182524341463-3139311221M.data786M.tuM.muM.nu76

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論