ࡱ> y ^AbjbjEE 4~''8kTT8$($BBXBXBX<BXBXBX KpLfS`b0(bW|KK_4BXBX(T ]: STACK DAN QUEUE DENGAN LINKED LIST Pengertian Linked list : sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari dua bagian struktur berupa rangkaian elemen saling berkait dimana setiap elemen dihubungkan elemen lain melalui pointer. Pointer adalah alamat elemen. Penggunaan pointer untuk mengacu elemen berakibat elemen-elemen bersebelahan secara logik walau tidak bersebelahan secara fisik di memori. Bentuk Umum : Infotype (sebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list Next (address dari elemen berikutnya (suksesor) Jika L adalah list, dan P adalah address, maka alamat elemen pertama list L dapat diacu dengan notasi : Sebelum digunakan harus dideklarasikan terlebih dahulu : Elemen yang diacu oleh P dapat dikonsultasi informasinya dengan notasi : Beberapa Definisi : List l adalah list kosong, jika First(L) = Nil Elemen terakhir dikenali, dengan salah satu cara adalah karena Next(Last) = Nil Nil adalah pengganti Null, perubahan ini dituliskan dengan #define Nil Null Single Linked List Pada gambar di atas tampak bahwa sebuah data terletak pada sebuah lokasi memori area. Tempat yang disediakan pada satu area memori tertentu untuk menyimpan data dikenal dengan sebutan node atau simpul. Setiap node memiliki pointer yang menunjuk ke simpul berikutnya sehingga terbentuk satu untaian, dengan demikian hanya diperlukan sebuah variabel pointer. Susunan berupa untaian semacam ini disebut Single Linked List (NULL memilik nilai khusus yang artinya tidak menunjuk ke mana-mana. Biasanya Linked List pada titik akhirnya akan menunjuk ke NULL). Pembuatan Single Linked List dapat menggunakan 2 metode: LIFO (Last In First Out), aplikasinya : Stack (Tumpukan) FIFO (First In First Out), aplikasinya : Queue (Antrean) Double Linked List Salah satu kelemahan single linked list adalah pointer (penunjuk) hanya dapat bergerak satu arah saja, maju/mundur, atau kanan/kiri sehingga pencarian data pada single linked list hanya dapat bergerak dalam satu arah saja. Untuk mengatasi kelemahan tersebut, dapat menggunakan metode double linked list. Linked list ini dikenal dengan nama Linked list berpointer Ganda atau Double Linked List. Circular Double Linked List Merupakan double linked list yang simpul terakhirnya menunjuk ke simpul terakhirnya menunjuk ke simpul awalnya menunjuk ke simpul akhir sehingga membentuk suatu lingkaran. Operasi-Operasi yang ada pada Linked List Insert Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list. IsEmpty Fungsi ini menentukan apakah linked list kosong atau tidak. Find First Fungsi ini mencari elemen pertama dari linked list Find Next Fungsi ini mencari elemen sesudah elemen yang ditunjuk now Retrieve Fungsi ini mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu dikembalikan oleh fungsi. Update Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu Delete Now Fungsi ini menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah elemen pertama dari linked list (head), head akan berpindah ke elemen berikut. Delete Head Fungsi ini menghapus elemen yang ditunjuk head. Head berpindah ke elemen sesudahnya. Clear Fungsi ini menghapus linked list yang sudah ada. Fungsi ini wajib dilakukan bila anda ingin mengakhiri program yang menggunakan linked list. Jika anda melakukannya, data-data yang dialokasikan ke memori pada program sebelumnya akan tetap tertinggal di dalam memori. A. STACK DENGAN SINGLE LINKED LIST Selain implementasi stack dengan array seperti telah dijelaskan sebelumnya, stack daat diimplementasikan dengan single linked list. Keunggulannya dibandingkan array adalah penggunaan alokasi memori yang dinamis sehingga menghindari pemborosan memori. Misalnya pada stack dengan array disediakan tempat untuk stack berisi 150 elemen, sementara ketika dipakai oleh user stack hanya diisi 50 elemen, maka telah terjadi pemborosan memori untuk sisa 100 elemen, yang tak terpakai. Dengan penggunaan linked list maka tempat yang disediakan akan sesuai dengan banyaknya elemen yang mengisi stack. Dalam stack dengan linked list tidak ada istilah full, sebab biasanya program tidak menentukan jumlah elemen stack yang mungkin ada (kecuali jika sudah dibatasi oleh pembuatnya). Namun demikian sebenarnya stack ini pun memiliki batas kapasitas, yakni dibatasi oleh jumlah memori yang tersedia. Operasi-operasi untuk Stack dengan Linked List IsEmpty Fungsi memeriksa apakah stack yang adamasih kosong. Push Fungsi memasukkan elemen baru ke dalam stack. Push di sini mirip dengan insert dalam single linked list biasa. Pop Fungsi ini mengeluarkan elemen teratas dari stack. Clear Fungsi ini akan menghapus stack yang ada. B. QUEUE DENGAN DOUBLE LINKED LIST Selain menggunakan array, queue juga dapat dibuat dengan linked list. Metode linked list yang digunakan adalah double linked list. Operasi-operasi Queue dengan Double Linked List IsEmpty Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau sudah berisi data. Hal ini dilakukan dengan mengecek apakah head masih menunjukkan pada Null atau tidak. Jika benar berarti queue masih kosong. IsFull Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bisa menampung data dengan cara mengecek apakah Jumlah Queue sudah sama dengan MAX_QUEUE atau belum. Jika benar maka queue sudah penuh. EnQueue Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam queue (head dan tail mula-mula meunjukkan ke NULL). DeQueue Procedure DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal ini dilakukan dengan cara menghapus satu simpul yang terletak paling depan (head). STACK DAN QUEUE DENGAN ARRAY STACK DENGAN MENGGUNAKAN ARRAY Pengertian Stack Stack atau tumpukan adalah suatu stuktur data yang penting dalam pemrograman Bersifat LIFO (Last In First Out) Benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack Contohnya, karena kita menumpuk Compo di posisi terakhir, maka Compo akan menjadi elemen teratas dalam tumpukan. Sebaliknya, karena kita menumpuk Televisi pada saat pertama kali, maka elemen Televisi menjadi elemen terbawah dari tumpukan. Dan jika kita mengambil elemen dari tumpukan, maka secara otomatis akan terambil elemen teratas, yaitu Compo juga. Operasi-operasi/fungsi Stack Push : digunakan untuk menambah item pada stack pada tumpukan paling atas Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas Clear : digunakan untuk mengosongkan stack IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh Stack with Array of Struct Definisikan Stack dengan menggunakan struct Definisikan MAX_STACK untuk maksimum isi stack Buatlah variabel array data sebagai implementasi stack secara nyata Deklarasikan operasi-operasi/function di atas dan buat implemetasinya Deklarasi MAX_STACK #define MAX_STACK 10 //hati-hati mulai dari 0 jadi 0-9 Deklarasi STACK dengan struct dan array data typedef struct STACK{ int top; char data[10][10]; //misalkan : data adalah array of string //berjumlah 10 data, masing-masing string //menampung maksimal 10 karakter }; Deklarasi/buat variabel dari struct STACK tumpuk; Inisialisasi Stack Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah KOSONG! Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang. Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack PENUH! Ilustrasi stack pada saat inisialisasi: Fungsi IsFull Untuk memeriksa apakah stack sudah penuh? Dengan cara memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1) maka belum full Ilustrasi: Fungsi IsEmpty Untuk memeriksa apakah stack masih kosong? Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong! Program: Fungsi Push Untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack Tambah satu (increment) nilai top of stack terlebih dahulu setiap kali ada penambahan elemen stack, asalkan stack masih belum penuh, kemudian isikan nilai baru ke stack berdasarkan indeks top of stack setelah ditambah satu (diincrement) Ilustrasinya: Fungsi Pop Untuk mengambil elemen teratas dari stack. Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang akan diambil terlebih dahulu, baru didecrement nilai top of stack sehingga jumlah elemen stack berkurang Ilustrasinya: Programnya: Fungsi Print Untuk menampilkan semua elemen-elemen stack Dengan cara looping semua nilai array secara terbalik, karena kita harusmengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil! Program: QUEUE DENGAN MENGGUNAKAN ARRAY Queue = Antrian Elemen yang pertama kali masuk ke antrian akan keluar pertama kalinya DEQUEUE adalah mengeluarkan satu elemen dari suatu Antrian Antrian dapat dibuat dengan menggunakan: Liniear Array dan Circular Array QUEUE DENGAN LINIEAR ARRAY Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya Sehingga membutuhkan variabel Head dan Tail DEKLARASI QUEUE OPERASI-OPERASI PADA QUEUE - Create() o Untuk menciptakan dan menginisialisasi Queue o Dengan cara membuat Head dan Tail = -1 - IsEmpty() o Untuk memeriksa apakah Antrian sudah penuh atau belum o Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty o Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubahubah o Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail - IsFull() o Untuk mengecek apakah Antrian sudah penuh atau belum o Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh - Enqueue(data) o Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang o Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail - Dequeue() o Digunakan untuk menghapus elemen terdepan/pertama dari Antrian o Dengan cara mengurangi counter Tail dan menggeser semua elemen antrian kedepan. o Penggeseran dilakukan dengan menggunakan looping - Clear() o Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1 o Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca - Tampil() o Untuk menampilkan nilai-nilai elemen Antrian o Menggunakan looping dari head s/d tail PEMBAHASAN Perbandingan Antara Stack-Queue Dengan Linked List Vs Stack-Queue Dengan Array Stack Dengan Linked List VS Stack Dengan Array Berikut ini adalah perbandingan algoritma pada operasi-operasi dasar dari Stack Dengan Linked List dan Stack Dengan Array, dengan menggunakan bahasa pemrograman Pascal Stack Dengan Linked ListStack Dengan Arrayoperasi : create()procedure create; begin top := nil ; end; procedure create; begin top := 0; end;operasi : empty()function empty : boolean; begin empty := false ; if top = nil then empty := true ; end;function empty : boolean; begin empty := false ; if top = 0 then empty := true ; end;operasi : full()tidak ada istilah full pada stack. program tidak menentukan jumlah elemen stack yang mungkin ada. kecuali dibatasi oleh pembuat program dan jumlah memory yang tersedia. tempat akan sesuai dengan banyaknya elemen yang mengisi stack. function full : boolean; begin full := false ; if top = max then full := true ; end;operasi : push()procedure push (elemen : typedata) ; var now:point ; begin now(now) ; now^.isi := elemen ; if empty then now^.next := nil ; else now^.next := top ; top := now ; end;procedure push (elemen : typedata) ; begin if not full then begin top := top + 1 ; stack [top] := elemen ; end; end;operasi : pop()procedure pop (var elemen : typedata) ; var now:point ; begin if not empty then begin elemen := now^.isi ; now := top ; top := top^.next ; dispose(now) ; end; end;procedure pop (elemen : typedata) ; begin if not empty then begin elemen := stack [top] ; top := top 1 ; end; end;operasi : clearprocedure clear ; var trash : typedata ; begin while not empty do pop(trash) ; end;procedure clear ; begin top := 0 ; end;PEMBAHASAN Dari perbandingan diatas, dapat dilihat pada linked list tidak dikenal istilah full. Hal ini berkaitan dengan penggunaan alokasi memori pada linked list yang lebih dinamis jika dibandingkan dengan array, sehingga pemborosan memory dapat dihindari. Program tidak menentukan jumlah elemen stack yang mungkin ada. Kecuali dibatasi oleh pembuat program dan jumlah memory yang tersedia. Tempat akan sesuai dengan banyaknya elemen yang mengisi stack. Queue Dengan Linked List VS Queue Dengan Array Implementasi queue menggunakan array Implementasi sederhana Ukuran memori harus ditentukan ketika sebuah objek queue dideklarasikan Pemborosan tempat (memori) ketika menggunakan jumlah data yang lebih sedikit dari alokasi memori Tidak dapat menambahkan data melebihi maksimal ukuran array yang telah dideklarasikan Implementasi queue menggunakan linked list Pengalokasian memori dinamis Menggunaka 2 buah pionter, qFront dan qRear, untuk menandai posisi depan dan belakang dari queue Perbandingan implementasi queue, array VS linked list (contoh 1) Memory requirements Array-based implementation Diasumsikan ukuran queue 100 (string @80bytes) Diasumsikan index membutuhkan 2 bytes Total memory: (80 bytes x 101 slots) + (2 bytes x 2 indexes) = 8084 bytes Linked-list-based implementation Diasumsikan pointers membutuhkan 4 bytes Total memory per node: 80 bytes + 4 bytes = 84 bytes Gambar : Perbandingan implementasi queue, array VS linked list (contoh 2) Memory requirements Array-based implementation Diasumsikan ukuran queue 100 (string @2bytes) Diasumsikan index membutuhkan 2 bytes Total memory: (2 bytes x 101 slots) + (2 bytes x 2 indexes) = 206 bytes Linked-list-based implementation Diasumsikan pointers membutuhkan 4 bytes Total memory per node: 2 bytes + 4 bytes = 6 bytes Gambar : KESIMPULAN Perbandingan Antara Stack-Queue Dengan Linked List Vs Stack-Queue Dengan Array Untuk stack dan queue yang berukuran besar, terutama jumlah maksimal data tidak diketahui, lebih baik menggunakan linked list. Untuk perangkat yang memiliki memori terbatas, seperti small handheld devices, linked list memiliki performa yang lebih bagus.     STACK DAN QUEUE DGN LINKED LIST Harjanto Sutedjo Page  PAGE \* MERGEFORMAT 1 "#; ' ( < O  . h/9mv$oy!w|*.MNTU5:e :;Bkrררר0hQ0hQ056CJOJPJQJ\]^JaJ* jhQ0hQ0CJOJPJQJ^JaJ$hQ0hQ0CJOJPJQJ^JaJ*hQ0hQ05CJOJPJQJ\^JaJB#< " R < P   / X`gd'9 $d[$a$gdQ0 $`a$gd'9 $ & Fa$gd'9$a$gd'9$ & Fdhd[$a$gdQ0$dhd[$a$gdQ0$ & Fdhd[$a$gdQ0Xh/:m $ & Fa$gd'9 $`a$gd'9 $ & Fa$gd'9 $^a$gd'9 $ & Fa$gd'9$a$gd'9$dhd[$`a$gdQ0`gd'9$ & Fdhd[$a$gdQ0$dhd[$a$gdQ0mw%oz"w}N$dhd[$a$gdQ0 $ & F a$gd'9 $ & F a$gd'9 $ & F a$gd'9 $ & F a$gd'9 $^a$gd'9 $ & F a$gd'9 $`a$gd'9 $ & Fa$gd'9NV5;e ;Cy$ & Fdhd[$a$gdQ0$dhd[$a$gdQ0$dhd[$`a$gdQ0$$dhd[$a$gdQ0 $ & Fa$gd'9 $ & Fa$gd'9 $^a$gd'9 $ & Fa$gd'9 $`a$gd'9 $ & Fa$gd'9 ks+J[* yyyy$ & Fdhd[$a$gdQ0$dhd[$a$gdQ0$ & Fdhd[$a$gdQ0$ & Fdhd[$a$gdQ0$ & Fdhd[$a$gdQ0$ & Fdhd[$a$gdQ0 $^a$gd'9$ & Fdhd[$a$gdQ0r*+IJZ =!E!h!r!!!!"" #C#o#$<$K$]$%%&&'"'d(n(y))T*r*N+h+++,,,%,,,--..//V0]0b1j11111122L2233!3#353*hQ0hQ06CJOJPJQJ]^JaJ*hQ0hQ05CJOJPJQJ\^JaJ$hQ0hQ0CJOJPJQJ^JaJL =!h!!!"?"n""" #C#p#####$$=$K$^$$a$gd'9 $ & Fa$gd'9$dhd[$a$gdQ0$ & Fdhd[$a$gdQ0^$$%%%%&v&&&&''#'i'V(d(o( $ & F a$gd'9 $ & Fa$gd'9 $ & Fa$gd'9$a$gd'9 $ & Fa$gd'9 $v^va$gd'9 $ & Fa$gd'9$dhd[$a$gdQ0$ & Fdhd[$a$gdQ0o((_)m)y)))K*T*s***+H+N+}$vdhd[$`va$gdQ0 $ & F%a$gd'9 $ & F$a$gd'9$ & F#dhd[$a$gdQ0$ & F"dhd[$a$gdQ0$dhd[$a$gdQ0 $d[$a$gdQ0$ & F!dhd[$a$gdQ0 $ & F!a$gd'9N+i+++++,,&,U,~,,,-C-----4.x.$a$gd'9 $$d[$a$gdQ0 $d[$a$gdQ0 $ & F'a$gd'9 $v`va$gd'9 $ & F&a$gd'9$dhd[$a$gdQ0x....*/k//// 0!0T0^0000+1`1k111112$a$gd'9$dhd[$a$gdQ0 $dha$gd'9$dhd[$a$gdQ0$a$gd'92M2223"3#3Gkd$$Ifi0 hFF t0634iBabytQ0$ds$If[$a$gdQ0$dhd[$a$gdQ0 $v`va$gd'9 $ & F(a$gd'9#36373I3O3\3b3t3z333uuuguuug$s$Ifa$gd'9 $$Ifa$gd'9lkd$$IfihF t0634iBabytQ0$ds$If[$a$gdQ0 333~l$ds$If[$a$gdQ0kd^$$Ifi0 hFF t0634iBabytQ05333N4^455667 888T::"<(<-<4<<<y==X>r>?1???@@@@@@@@@@@@@A A!A"A#A$A휔~hCJ OJPJQJaJ hhpjhpU hQ0h.CJOJQJ^JaJ'hQ0hQ0>*CJOJPJQJ^JaJ*hQ0hQ06CJOJPJQJ]^JaJ*hQ0hQ05CJOJPJQJ\^JaJ$hQ0hQ0CJOJPJQJ^JaJ/333333344(4H4M4 $$Ifa$gd'9lkd$$IfihF t0634iBabytQ0 M4N4_4~l$ds$If[$a$gdQ0kd$$Ifi0 hFF t0634iBabytQ0_4`44I5b5i5y555yy$s$Ifa$gd'9 $$Ifa$gd'9lkdr$$IfihF t0634iBabytQ0555~l$ds$If[$a$gdQ0kd$$Ifi0 hFF t0634iBabytQ0555555 66.646G6T6Y6~666 $$Ifa$gd'9lkd$$IfihF t0634iBabytQ066666666r`$ds$If[$a$gdQ0kdx$$Ifi0 hFF t0634iBabytQ0 $$Ifa$gd'966 7772787M7Z7m7|777777 $$Ifa$gd'9lkd.$$IfihF t0634iBabytQ07777777 8r`$ds$If[$a$gdQ0kd$$Ifi0 hFF t0634iBabytQ0 $$Ifa$gd'9 88 878=8]8b8t8z888 $$Ifa$gd'9lkd$$IfihF t0634iBabytQ0 888T::::;~pgUMBB $ & F*a$gd'9$a$gd'9$ & F)dhd[$a$gdQ0`gd'9$dhd[$a$gdQ0kd4$$Ifi0 hFF t0634iBabytQ0;i;;;<h<<<<=.=y====>C>X> $ & F-a$gd'9 $ & F,a$gd'9 $ & F,a$gd'9 $ & F,a$gd'9$a$gd'9$ & F+dhd[$a$gdQ0$dhd[$a$gdQ0 $ & F*a$gd'9X>t>>>?2?\?????q@@@@@@@@@@gd $d[$a$gdQ0 $ & F.a$gdQ0$dhd[$a$gdQ0$dhd[$a$gdQ0 $ & F-a$gd'9 $ & F-a$gd'9@@@@A A!A"A#A$AVAWAXAYAZA[A\A]A^A H$B$d Nb$# gd $&d Pb$# a$gd$A:A;ARASATAUAVAWAXAYAZA[A]A^A hQ0h.CJOJQJ^JaJhphhOJQJmHnHuhjhUhOJQJ21h:p./ =!"#$% $$If!vh55\#v#v\:V i t065/ 34iBytQ0$$If!vh5#v:V i t065/ 34iBytQ0$$If!vh55\#v#v\:V i t065/ 34iBytQ0$$If!vh5#v:V i t065/ 34iBytQ0$$If!vh55\#v#v\:V i t065/ 34iBytQ0$$If!vh5#v:V i t065/ 34iBytQ0$$If!vh55\#v#v\:V i t065/ 34iBytQ0$$If!vh5#v:V i t065/ 34iBytQ0$$If!vh55\#v#v\:V i t065/ 34iBytQ0$$If!vh5#v:V i t065/ 34iBytQ0$$If!vh55\#v#v\:V i t065/ 34iBytQ0$$If!vh5#v:V i t065/ 34iBytQ0$$If!vh55\#v#v\:V i t065/ 34iBytQ0j 666666666vvvvvvvvv666666>6666666666666666666666666666666666666666666666666hH6666666666666666666666666666666666666666666666666666666666666666662 0@P`p2( 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p8XV~ OJPJQJ_HmH nH sH tH F`F .Normal$a$CJ_HaJmH sH tH DA D Default Paragraph FontRi@R 0 Table Normal4 l4a (k ( 0No List ^^`^ Q00 Normal (Web)$ds[$a$CJOJPJQJ^JaJ4@4 0Header  H$./. 0 Header Char4 @"4 0Footer  H$./1. 0 Footer CharHBH 0 Balloon TextCJOJQJ^JaJN/QN 0Balloon Text CharCJOJQJ^JaJPK![Content_Types].xmlj0Eжr(΢Iw},-j4 wP-t#bΙ{UTU^hd}㨫)*1P' ^W0)T9<l#$yi};~@(Hu* Dנz/0ǰ $ X3aZ,D0j~3߶b~i>3\`?/[G\!-Rk.sԻ..a濭?PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!Ptheme/theme/theme1.xmlYOo6w toc'vuر-MniP@I}úama[إ4:lЯGRX^6؊>$ !)O^rC$y@/yH*񄴽)޵߻UDb`}"qۋJחX^)I`nEp)liV[]1M<OP6r=zgbIguSebORD۫qu gZo~ٺlAplxpT0+[}`jzAV2Fi@qv֬5\|ʜ̭NleXdsjcs7f W+Ն7`g ȘJj|h(KD- dXiJ؇(x$( :;˹! I_TS 1?E??ZBΪmU/?~xY'y5g&΋/ɋ>GMGeD3Vq%'#q$8K)fw9:ĵ x}rxwr:\TZaG*y8IjbRc|XŻǿI u3KGnD1NIBs RuK>V.EL+M2#'fi ~V vl{u8zH *:(W☕ ~JTe\O*tHGHY}KNP*ݾ˦TѼ9/#A7qZ$*c?qUnwN%Oi4 =3ڗP 1Pm \\9Mؓ2aD];Yt\[x]}Wr|]g- eW )6-rCSj id DЇAΜIqbJ#x꺃 6k#ASh&ʌt(Q%p%m&]caSl=X\P1Mh9MVdDAaVB[݈fJíP|8 քAV^f Hn- "d>znNJ ة>b&2vKyϼD:,AGm\nziÙ.uχYC6OMf3or$5NHT[XF64T,ќM0E)`#5XY`פ;%1U٥m;R>QD DcpU'&LE/pm%]8firS4d 7y\`JnίI R3U~7+׸#m qBiDi*L69mY&iHE=(K&N!V.KeLDĕ{D vEꦚdeNƟe(MN9ߜR6&3(a/DUz<{ˊYȳV)9Z[4^n5!J?Q3eBoCM m<.vpIYfZY_p[=al-Y}Nc͙ŋ4vfavl'SA8|*u{-ߟ0%M07%<ҍPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 +_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!Ptheme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] ^9~ 02fhjmr53$A^A!'0>XmN ^$o(N+x.2#333M4_455667 88;X>@^A"#$%&()*+,-./123456789:;<=H`bm!8@0(  B S  ?#-<FGMNUVZajkvw %+,239;ENST[\bclmz{045;<FHPRVY_filr|  +,239<DEMW]ciko /34:;=>BCIJOPV\deijpqwx~ #$&'-.89ABKLPQXZ`aijopz{   ,0167?@DEMNPXauz{ !*>DNVX]^cdlmqrvw{}*+1RUV]^deiv        " # * + 3 4 6 7 = > C D L M V W \ ] f h w }    " # ' ( - : @ A D E L M S T [ \ ` w } ~        % + , / 0 8 9 ? E M N R W ] ^ a b f g n z      " ( ) , - 6 7 = C K W ` a c d j k u }     1 = > @ A G H L U _ ` d e j k u v x y ~  .;<HOUV`ahiou|} !&',068<=BCJKUV\]bcglry|} !")056>GLMWX^_eqxy|~ ./4;ANUV\]fgmy    !()-;ABEFJKT`c !';BCIJQRYZ_`hiov{| %&,-45:;CDJQVW\]abghlmv| &'-.016CFLUV`ackr}JTaefnouv{| #*35;<@AIPRSYZbdhost{|  !"&'0178<=EGKLRS[\`aijpqxz #'(08<ENOTUahorx~ %+,78>?JUZ[cdgnuv~#,-237:>CLSYZ`adpwx~  "#'(0156<CIKW^bcjknsy~  !045;<DEKLTbjkv  +/6:;@BGHMNSTXfjkpv #()34:;=EKLSTZ[biopt      $ 2 9 : B C G I T V b d j o t u ~  !! ! !!!!!$!%!*!8!@!A!G!H!N!U!^!_!k!m!w!y!!!!!!!!!!!!!!!!!!!!!!!!!!!""" """" "(")"/"0"4"5"7"8">"D"I"{"""""""""""""""""""""""""""""""""## # ###### #+#-#4#;#>#i#q#r#v#w#{#|##################################($-$.$9$:$=$>$N$W$]$^$b$c$j$p$s$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$% % %%%#%)%/%0%5%6%;%<%B%C%J%L%R%S%Z%[%`%a%h%o%t%u%y%z%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&& &&&&&&"&#&(&)&-&.&3&6&<&=&A&B&J&K&P&W&[&k&q&x&~&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''!')','6'7'='>'D'E'P'Q'Y'_'e'f'j''''''''''''''''''''''''''''((( ((((((#(.(/(8(9(?(@(K(`(e(f(o(p(}(~((((((((((((((((((((((((((()) ) )))!)")$)%)*).)6)7)D)E)L)M)R)S)W)X)_)b)h)m)r)s)~)))))))))))))))))**$***@*F*M*T*U*X*Y*_*`*l*m*v*w*{*|*********************+++#+*+++++,,N,U,`,e,f,i,j,q,w,{,,,,,,,,,,,,,,,,,,,,,,,,,,- -------"-#-,---3-9-@-Y-`------------.. ..$.4.=.i.o.r.z........../ / / //8/>/B/J/a/j////////0 0#0,04000000000000000000000011111111"14191:1A1B1F1G1S1T1Z1b1j1k1u1}1111111111111111111111111111 222222 2&2'2-2.27282>2D2K2Z2`2v2|222222222222222222222222333333!3#3)3*35363<3G3L3M3T3U3Y3Z3a3b3h3i3n3o3t3u333333333333333333333444444 4"4(4)4,4-4244494:4B4C4I4J4O4P4S4T4\4]4a4h4t4u44444444555%5555555666696?6t6666666627=7G7R777777777777778 88888&8'8-8.868<8A8B8K8M8R8S8W8X8c8q8v8w8888888888888888888888888888889999$9,9-94959\9_95;3;EO/@DEeig  z " Q R v ` d .FJCjsos\`pw')!!##$%$&$'$U$V$$$$$$$%%C%J%%%%%%%4&5&x&~&&&&&&&*'+'k't''''''' ((!("(V(](^(_(((((b)j)k)l)))`,e,,,,, --12225677M8R88888888888889999$9:9\9_933333333333333333333333333333333333333333333333333333333333333333333333333333333333888888888888899$9:9U9V9_9.hV  D Sν|:kyZ5gBuf"&ĶHy!V"GXAku'P~^)?2p+:iF;0$<4>Z^_<=𢆳}U>R}!&ll>A>u?\ v'zAD\y Bް aCv1[7?C>֟6)HJx2'LvT~&nU28UaUD0Zhx^* 'Ac]hXa ^ir*>l,M,m yqpbg2u"&)%vDiyNFs=>{x:Fp^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(.}U>gB&)%v2u|^_<y B ^iky'zA6)H"&Acy!iF;>lZ$<Zu?7?ChV,mD S&nU]h aCs=>{=:'Lyqp..& nsQ0'95Bp.88@8^9@Unknown G* Times New Roman5Symbol3. * Arial;Wingdings7K@Cambria7.{ @Calibri5. *aTahoma?= * Courier NewA BCambria Math"1hææs0 gs0 g0882HP $PQ02!xxSTACK DAN QUEUE DGN LINKED LISTHARJANTO SUTEDJOHARJANTO SUTEDJO.                           ! " # $ % & ' ( ) * + , - Oh+'0 ,8 X d p| STACK DAN QUEUE DGN LINKED LISTHARJANTO SUTEDJONormalHARJANTO SUTEDJO1Microsoft Office Word@J6@ D@T4 s0՜.+,0 hp|  g8  STACK DAN QUEUE DGN LINKED LIST Title  !"#$%&'()*+,-./0123456789:;<=>?ABCDEFGIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry F`MData @1TableHPWordDocument4~SummaryInformation(DocumentSummaryInformation8CompObjy  F'Microsoft Office Word 97-2003 Document MSWordDocWord.Document.89q