1 / 16

Linked list 的應用

Linked list 的應用. How to represent a sparse matrix?. Given a sparse matrix M a) shown its memory representation using i) ROW & COLUMN indexing ii) a linked structure b) Compare the advantages and disadvantages of these two schemes. 0 0 0 0 4 2 3 0 0 0 0 0 0 5 0 7 0 0 0 8 0 6 0 0 0.

holland
Download Presentation

Linked list 的應用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linked list的應用

  2. How to represent a sparse matrix? Given a sparse matrix M a) shown its memory representation using i) ROW & COLUMN indexing ii) a linked structure b) Compare the advantages and disadvantages of these two schemes. 0 0 0 0 4 2 3 0 0 0 0 0 0 5 0 7 0 0 0 8 0 6 0 0 0

  3. (a) 1.ROW & COLUMN indexing 使用3-tuple結構 A 5*5, total elements=7

  4. ii) Linked Structure DOWN,RIGHT為指標。 ROW,COL為列、行的號碼。 VALUE為非零項元素值。

  5. H1 H2 H3 H4 H5 5 2 1 0 2 0 3 0 4 0 0 1 2 1 4 1 5 0 2 2 4 5 0 3 0 2 0 4 3 4 0 5 1 5 0 0 H1 4 H2 2 3 H3 5 H4 7 8 H5 6

  6. comparison (1)ROW & COLUMN indexing  優點:節省空間 缺點:非零項有所更動時,需做大模的移動。 (2)Linked Structure  優點:非零項有所更動時,不需做大模的移動。  缺點:較浪費空間。

  7. 一般化串列(generalized list) (1)A=(a,(b,c)) :長度為2的串列,它的第一個元素為原子“a”,第二個為線性串列(b,c) (2)B=(A,A,()) :長度為3的串列,其第一個與第二個元素為串列,第三個為一空串列 (3)C=(a,C) :長度為2的遞迴串列,C相當於一個無限串列,C=(a,(a,(a,…)

  8. 一般化串列的節點結構 任何一般化的串列均可用以下的節點結構來表示: TAG=0/1 DATA LINK 其中TAG=0表示DATA欄為原子(atom) 。 TAG=1表示DATA欄為串列(list) 。

  9. (1) 0 a A→ 1 0 A= (a,(b,c)) 0 b 0 c 0 (2) B→ 1 1 1 0 0 B=(A, A, ()) (3) C→ 0 a 1 0 C=(a,C)

  10. P(x,y,z) 1 10 3 2 8 3 3 8 2 1 4 4 6 3 4 2 0 1 2 2 1 1 1 0 (三)多變數多項式的表示法 例:p(x,y,z)=x10y3z2+2x8y3z2 +3x8y2z2 +x4y4z +6x3y4z+2yz 有兩種不同的表示法可表示此多變數多項式,茲分述於后: (1)線性串列(linear list) 2 缺點:若多項式的各項有不同個數的變數,則此種結構就不適用,會造成空間嚴重浪費。 (2)一般化串列(generalized list) 為了使用一般化串列來表示多變數多項式,則上例需改寫整理如下: p(x,y,z)=((x10+2x8 ) y3+3x8 y2) z2 +((x4 +6x3) y4 +2y)z

  11. Z 0 2 1 0 Y - 3 2 0 Y - 4 1 0 × - 3 8 0 × - 2 0 0 × - 1 10 2 8 0 × - 1 4 6 3 0 p(x,y,z)=((x10+2x8 ) y3+3x8 y2) z2 +((x4 +6x3) y4 +2y)z COEF欄內究竟是係數,還是指向其它串列的指標呢?解決的方法是在原有的節點結構上多加一欄TAG,若TAG=0代表為係數,反之TAG=1則為指標,亦即結構改為 使用Union

  12. 1 y - 1 1 0 1 x - 0 3 2 0 若TAG=0代表為係數,反之TAG=1則為指標,亦即結構改為 例:多項式P=3x2y可表示如下: 

  13. p(x,y,z)=((x10+2x8 ) y3+3x8 y2) z2 +((x4 +6x3) y4 +2y)z P→ 1 Z 1 2 1 1 0 1 y - 1 3 1 2 0 1 × - 0 1 10 1 × - 0 3 8 0 0 2 8 0 1 y - 1 4 0 2 1 0 1 × - 0 1 4 0 6 3 0

  14. Union(等位) union samepo { int n; float f; } name1; printf(“%3d\n”,sizeof (union samepo)); name1.n=123; printf(“%d\n”, name1.n); name1.f=123.321; printf(“%.2f\n”, name1.f); n f 只佔4bytes 不會同時存在

  15. 堆疊結構的應用 堆疊結構在計算機上的應用相當廣泛,譬如: (1)副程式呼叫及返回處理(subroutine call and return) 在呼叫副程式之前,須先將下一條指令的位址,亦即返回位址(return address)保存到stack中,當爾後副程式執行完時再從stack頂端取出返回位址,回到原來執行時的下一指令位址繼續往下執行。 (2)遞迴程序的呼叫及返回處理(recursive call and return) 其處理過程與副程式呼叫類似,在每次遞迴之前,須先將下一條指令的位址,記錄器及變數的值存到stack中,當爾後遞迴回來時,能再從stack頂端取出暫存值,回到原來執行遞迴前狀況,並從下一指令繼續往下執行。

  16. (3)算術式的轉換與分析 在編譯(或組譯、直譯)時,stack可幫助分析指令,以判斷某一個指令是否合法,諸如LR Parser利用shift/reduce時,須使用stack,此外算術運算時,利用stack的特性將不同的算術式表示法轉換,以利算術式的執行。 (4)在組合程式(assembler)中,若允許Macro call within Macro,則必須利用stack來儲存Macro call之前的資料。 (5)二元樹的中序追蹤(inorder traversal)及前序追蹤(preorder traversal)以及圖形的深度追蹤(depth-first-search) 。 (6)利用硬體製作來處理re-entrant routine時,須利用stack。 (7)中斷處理(interrupt handling)時,須有stack支援(support) 。 (8)堆疊式計算機(stack computer),此類計算機採用零位址指令(zero-address instruction)型式,大部份透過push及pop兩個指令來處理運算式。

More Related