310 likes | 532 Vues
CHAPTER 3: LIST & LINKED LIST. PART 2 : LINKED LIST (MALAY VERSION) BY SUZILA YUSOF. OBJEKTIF . Di akhir subtopik ini anda sepatutnya dapat : mendefinisikan senarai berpaut Mengimplementasikan operasi senarai berpaut linear Menggunakan operasi senarai berpaut linear
E N D
CHAPTER 3:LIST & LINKED LIST PART 2 : LINKED LIST (MALAY VERSION) BY SUZILA YUSOF
OBJEKTIF • Di akhirsubtopikiniandasepatutnyadapat: • mendefinisikansenaraiberpaut • Mengimplementasikanoperasisenaraiberpaut linear • Menggunakanoperasisenaraiberpaut linear • Menggunakanoperasisenaraiberpaut • menciptasenaraiberpaut • Mencipta nod dlmsenaraiberpaut • Menyemaksenaraiberpaut : kosong • Menambah nod dalamsenaraiberpaut • Menghapuskan nod dalamsenaraiberpaut • Menganalisakeberkesananpenggunaansenaraiberpaut linear
PENGENALAN senaraiberpautadalahsejenisstruktur data dimanasetiapitemnyamempunyaihubungkaitantara item yang lain dalamsuatusenarai Segalaoperasiyghendakdilaksanakankeatassesuatu item perlulahdiambilkira item bersebelahannya
DEFINISI SENARAI BERPAUT • senaraiberpautadalahsatukump item ygdinamikdimanasaiznyaakanbertambahdanberkurangbergantungkpdjumlahitemnya • Item didalamsenaraiberpautmempunyai 2 medaniaitumedan data danmedanpepaut • contoh 1: • senaraiberpautbolehdikaitkandengankepalakeretapidangerabak-gerabaknya. Gerabak-gerabaktersebutmembawamuatan yang berlainan (data), setiapgerabaknyadisambungkepadagerabak/kepalakeretapi yang lain(pepaut).
DEFINISI SENARAI BERPAUT • contoh 2 • senaraiberpautbolehdikaitkandgnsatukumppendaki (senarai) gunungdimanasetiappendakiakanmembawabarang-barangberlainan (data), setiappendakiperlumembantupendaki yang lain(pepaut) • Senaraiberpautbolehdiimplemenmenggunakan : • Penuding • struktur data dinamik – saizsenarainyatidakmempunyai had • nod-nod bolehditambahdandihapuskandgnmudah
DEFINISI SENARAI BERPAUT • contoh 2 • senaraiberpautbolehdikaitkandgnsatukumppendaki (senarai) gunungdimanasetiappendakiakanmembawabarang-barangberlainan (data), setiappendakiperlumembantupendaki yang lain(pepaut) • Senaraiberpautbolehdiimplemenmenggunakan : • Penuding • struktur data dinamik – saizsenarainyatidakmempunyai had • nod-nod bolehditambahdandihapuskandgnmudah • contoh
DEFINISI SENARAI BERPAUT • Tatasusunan • saizterhad • bilmaksimaobjekdlmsenaraiberpautbergantungkpdsaiztatasusunanygtelahdiisytiharkan.
CIRI-CIRI SENARAI BERPAUT mempunyaisekurang-kurangnyasatu nod kepala nod kepala – penudingkpd nod pertamasenaraiberpaut ( mengandungialamatbg nod pertamatersebut) Senaraiberpautkosongapabilaiatidakmengandungisebarang nod ataubersaiz 0. Nod kepalanyamengandunginilai NULL (bgimplementasipenuding) atau -1 (bgimplementasitatasusunan)
CIRI-CIRI SENARAI BERPAUT • Jikasenaraiberpauttidakkosong, iamestilahmempunyai : • satu nod kepala (kepala!=NULL) • sekurang-kurangnyasatumedan data • sekurang-kurangnyasatumedanpautan
KATEGORI SENARAI BERPAUT • Senaraiberpautbolehdikategorikanmengikutbeberapakriteriadenganberdasarkankepadakombinasikriteriaberikut : • SenaraiBerpaut Tunggal • SenaraiBerpautBerganda • SenaraiBerpaut Linear • SenaraiBerpautMembulat • SenaraiBerpautTerisih • SenaraiBerpautTidakTerisih
OPERASI SENARAI BERPAUT • operasi-operasiasasbgsenaraiberpaut : • menciptasenaraiberpaut • menentukansamadasesuatusenaraiberpautituadalahkosongatautidak • menambah nod barukedalamsenaraiberpaut • menghapuskan nod ygterdapatdlmsenaraiberpaut. • mencari nod dengannilaitertentudlmsenaraiberpaut • mengisih nod mengikutturutanmenaikataumenurun
MENGISYTIHARKAN SENARAI BERPAUT TUNGGAL #include <iostream.h> typedefint ELEM; class nod { //class untuk nod public: ELEM elemen; nod *paut; nod(const ELEM &item); ~nod (); }; class SenaraiPaut { //class untuksenarai private: nod *kepala; nod *sblm; nod *semasa; intbil; public: SenaraiPaut(); ~SenaraiPaut(); void setPos(const ELEM &); void input(const ELEM &); void papar(); ELEM hapus (const ELEM&); intpanjang() const; boolkosong() const; boolcari(const ELEM&); };
MENGISYTIHARKAN SENARAI BERPAUT TUNGGAL • Berdasarkanaturcaradiatas : ahlibg class nod adalah: • elemen – objek data berjenis integer • paut– penudingberjenis nod ygakanmenudingkpd nod berikutnyadlmsenarai • konstruktordandistruktor (bgkelas nod) • Bagiahlidlm class SenaraiPautdibahagian private: • kepala- penudingberjenis nod, menudingkpd nod pertamadlmsenarai • sblm- penudingberjenis nod, menuding nod sebelum • semasa- penudingberjenis nod, menuding nod semasa • bil- pu integer ygmemegangbilangan nod semasadlmsenarai
MENCIPTA SENARAI BERPAUT TUNGGAL // Meletakkannilaiawal NULL kepadakepaladansemasa // Bil nod = 0 SenaraiPaut::SenaraiPaut() { kepala = NULL; bil = 0; } semasa kepala Gambaransenaraikosongygdicipta
MEMUSNAHKAN SENARAI BERPAUT (DISTRUKTOR) SenaraiPaut::~SenaraiPaut() { while (kepala !=NULL) { semasa = kepala; kepala = kepala -> paut; delete semasa; saiz--; } semasa = NULL; sebelum = NULL; } Untukmenghapuskanobjekpenudingdanmemulangkanmemoriygtelahdigunakanolehpenuding. Distruktorakandipanggilsecaraautomatiksebelumaturcaratamat.
OPERASI TENTU KEDUDUKAN item>semasa->elemen Untukmengenalpastikedudukan item ygingindimasukkandlmsenarai. Pernyataan : membolehkan item yglebihbesardr item semasadlmsenaraidiperiksasecaramenaik. Dipanggildalamfungsi input danhapusuntukmenentukankedudukan item tersebut
OPERASI TENTU KEDUDUKAN void SenaraiPaut::setPos(const ELEM & item) { sblm=NULL; //muladariawalsenarai semasa=kepala; while (semasa!=NULL && item>semasa->elemen) { sblm=semasa; semasa=semasa->paut; //tuding pd nod seterusnya } }
FUNGSI TAMBAH coding • Terdapattigakeadaanuntukoperasiselit(tambah) iaitu: • senaraimasihkosong – sblmadalah NULL, nod baruakanmenjadi nod pertamadlmsenarai • senaraitidakkosong – sblmadalah NULL, ttpkepalatidaksamadgn NULL, nod baruakanmenjadi nod kepalakeranakeadaaninibermakna nod baruadalahlebihkecildari nod pertama(ygasal). • senaraitidakkosong – sblmdankepalatidaksamadengan NULL, nod baruakandiselitsamaadaditengahataudihujungsenarai
FUNGSI TAMBAH item paut n item paut sblm n kepala Gambaranoperasitambah/selitpadasenaraibarpautapabila input dilaksanakansebanyaktiga kali (berturutandengannilaiadalah 5, 10 dan 8) Keadaan 1:Senarai masihkosong SenaraiPaut L; //istiharobjek L.input(5); //nilai 5 dimasukkandalamsenarai (i) nod barudicipta (ii)nod barudiselitdihadapansenarai
FUNGSI TAMBAH n item paut kepala item paut sblm kepala item paut item paut sblm Keadaan 2: nod diselitdihujungsenarai L.input(10); //nilai 10 dimasukkandalamsenarai (i) nod barudicipta (ii) senaraisediaada (iii) nod diselitdihadapansenarai
FUNGSI TAMBAH n item paut sblm item paut item paut kepala sblm item paut item paut item paut semasa kepala Keadaan 3 : nod diselitditengahsenarai L.input(8); //nilai 8 dimasukkandalamsenarai (i) nod barudicipta (ii) senaraisediaada (iii) nod barudiselitditengahsenarai
FUNGSI HAPUS coding • Langkahuntukhapus: • tentukankedudukan item denganmemanggilfungsisetPos • Tigakedudukan item ygberlakujika item wujuddlmsenarai: i. Item beradadihadapan ii. Tengah atau iii. Hujungsenarai • hapusakandapatmemulangkan item yang dapatdihapuskandansebaliknyamemaparkanmesej “Tiadadalamsenarai” jika item ygingindihapuskantiadadalamsenarai.
FUNGSI HAPUS Gambaransenaraisediaadaygingindilaksanakandgnoperasihapuskepadanya (*Keadaan 1-3 tidakberkait, rujuksenaraiasaluntuksetiappembuangan nod)
FUNGSI HAPUS • kepala, semasamenuding nod 5 • sblmadalah NULL kepala sblm semasa • kepala = semasa->paut sblm semasa Keadaan 1 :hapus nod dihadapansenarai L.hapus(5); //nilai 5 hendakdihapuskan (i) setPosdilaksanakan – kedudukanpenudingkepala, sblmdansemasaadalahsepertiberikut: (ii) nod 5 diputuskandarisenarai
FUNGSI HAPUS • semasamenuding nod 8 • sblmmenuding nod 5 kepala sblm semasa • sblm->paut=semasa->paut; kepala sblm semasa Keadaan 2 : Hapus nod ditengahsenarai L.hapus(8); //nilai 8 hendakdihapuskandarisenarai (rajah asal) (i) selepassetPosdilaksanakan, keadaanpenudingkepala, sblmdansemasaadalahsepertiberikut : (ii) nod 8 diputuskandarisenarai
FUNGSI HAPUS kepala sblm semasa • sblm->paut=semasa->paut kepala sblm semasa Keadaan 3 : hapus nod dihujungsenarai L.hapus(10); // nilai 10 hendakdihapuskandarisenarai (rajah asal) (i) selepassetPosdilaksanakandidalamfungsihapus, kedudukanpenudingkepala, sblmdansemasaadalahsepertiberikut: (ii) nod 10 diputuskandarisenarai
FUNGSI LAIN UNTUK SENARAI BERPAUT • Terdapatbeberapafungsipenting yang lain yang diperlukandalammengimplemenkansenaraiberpaut, iaitu : • Fungsipapar nod • Fungsipanjangsenarai • Fungsisemaksenaraikosong • FungsiCarian
FUNGSI PAPAR NOD void SenaraiPaut::papar() { nod *n; n=kepala; while (n!=NULL) { cout<<n->elemen<<"\n"; n=n->paut; //menuding nod seterusnya } } Fungsipapar – membolehkankandungandalamsenaraiberpautdipaparkaniaitubermuladari nod awal/pertamahinggalah nod terakhirdalamsenarai.
FUNGSI PANJANG SENARAI intSenaraiPaut::panjang() const {return bil;} Fungsipanjang – dapatmemulangkansaizsenaraiataubilangan nod semasa yang adadalamsenarai.
FUNGSI SEMAK SENARAI KOSONG boolSenaraiPaut::kosong() const {return kepala==NULL;} Fungsikosong – berperananmemulangkannilai true jikasenaraiadalahkosong, dannilai false jikasenaraitidakkosong.
FUNGSI CARIAN boolSenaraiPaut::kosong() const {return kepala==NULL;} boolSenaraiPaut::cari(const ELEM &val) { nod *n; n=kepala; booljumpa=false; while (n!=NULL) { if (n->elemen==val) jumpa=true; n=n->paut; //tudingkepada nod seterusnya } return jumpa; } Fungsicari – membolehkanprosescariandilakukankepadasenaraiberpaut. Fungsiiniakanpulangkannilai true jika item yang dicariberadadalamsenarai, sebaliknyaakanpulangnilai false jika item tiadadalamsenarai.