chapter 3: list & linked list

31
CHAPTER 3: LIST & LINKED LIST PART 2 : LINKED LIST (MALAY VERSION) BY SUZILA YUSOF

Upload: bernie

Post on 22-Feb-2016

131 views

Category:

Documents


0 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

CHAPTER 3: LIST & LINKED LIST

CHAPTER 3:LIST & LINKED LISTPART 2 : LINKED LIST (MALAY VERSION)

BY SUZILA YUSOFOBJEKTIF Di akhir subtopik ini anda sepatutnya dapat:mendefinisikan senarai berpautMengimplementasikan operasi senarai berpaut linearMenggunakan operasi senarai berpaut linearMenggunakan operasi senarai berpautmencipta senarai berpautMencipta nod dlm senarai berpautMenyemak senarai berpaut : kosongMenambah nod dalam senarai berpautMenghapuskan nod dalam senarai berpautMenganalisa keberkesanan penggunaan senarai berpaut linearPENGENALAN senarai berpaut adalah sejenis struktur data di mana setiap itemnya mempunyai hubungkait antara item yang lain dalam suatu senarai

Segala operasi yg hendak dilaksanakan ke atas sesuatu item perlulah diambilkira item bersebelahannyaDEFINISI SENARAI BERPAUT senarai berpaut adalah satu kump item yg dinamik di mana saiznya akan bertambah dan berkurang bergantung kpd jumlah itemnyaItem di dalam senarai berpaut mempunyai 2 medan iaitu medan data dan medan pepaut contoh 1:senarai berpaut boleh dikaitkan dengan kepala keretapi dan gerabak-gerabaknya. Gerabak-gerabak tersebut membawa muatan yang berlainan (data), setiap gerabaknya disambung kepada gerabak/kepala keretapi yang lain(pepaut).

contoh 2 senarai berpaut boleh dikaitkan dgn satu kump pendaki (senarai) gunung di mana setiap pendaki akan membawa barang-barang berlainan (data), setiap pendaki perlu membantu pendaki yang lain(pepaut)Senarai berpaut boleh diimplemen menggunakan : Penudingstruktur data dinamik saiz senarainya tidak mempunyai had nod-nod boleh ditambah dan dihapuskan dgn mudahDEFINISI SENARAI BERPAUT contoh 2 senarai berpaut boleh dikaitkan dgn satu kump pendaki (senarai) gunung di mana setiap pendaki akan membawa barang-barang berlainan (data), setiap pendaki perlu membantu pendaki yang lain(pepaut)Senarai berpaut boleh diimplemen menggunakan : Penudingstruktur data dinamik saiz senarainya tidak mempunyai had nod-nod boleh ditambah dan dihapuskan dgn mudah contoh

DEFINISI SENARAI BERPAUTkepalapautItem10pautItem20pautItemNULL30 Tatasusunan saiz terhad bil maksima objek dlm senarai berpaut bergantung kpd saiz tatasusunan yg telah diisytiharkan.

DEFINISI SENARAI BERPAUTnextItem-150340230120indeks3210Nod Kepala0CIRI-CIRI SENARAI BERPAUT mempunyai sekurang-kurangnya satu nod kepala nod kepala penuding kpd nod pertama senarai berpaut ( mengandungi alamat bg nod pertama tersebut)Senarai berpaut kosong apabila ia tidak mengandungi sebarang nod atau bersaiz 0. Nod kepalanya mengandungi nilai NULL (bg implementasi penuding) atau -1 (bg implementasi tatasusunan)

Nod kepalaNULLpenudingNod kepala-1tatasusunanJika senarai berpaut tidak kosong, ia mestilah mempunyai : satu nod kepala (kepala!=NULL) sekurang-kurangnya satu medan data sekurang-kurangnya satu medan pautanCIRI-CIRI SENARAI BERPAUTKATEGORI SENARAI BERPAUTSenarai berpaut boleh dikategorikan mengikut beberapa kriteria dengan berdasarkan kepada kombinasi kriteria berikut : Senarai Berpaut Tunggal Senarai Berpaut Berganda Senarai Berpaut Linear Senarai Berpaut Membulat Senarai Berpaut Terisih Senarai Berpaut Tidak TerisihOPERASI SENARAI BERPAUT operasi-operasi asas bg senarai berpaut : mencipta senarai berpaut menentukan samada sesuatu senarai berpaut itu adalah kosong atau tidak menambah nod baru ke dalam senarai berpaut menghapuskan nod yg terdapat dlm senarai berpaut. mencari nod dengan nilai tertentu dlm senarai berpaut mengisih nod mengikut turutan menaik atau menurunMENGISYTIHARKAN SENARAI BERPAUT TUNGGAL#include typedef int ELEM;class nod { //class untuk nodpublic:ELEM elemen;nod *paut;nod(const ELEM &item);~nod ();};class SenaraiPaut { //class untuk senaraiprivate:nod *kepala;nod *sblm;nod *semasa;int bil;public:SenaraiPaut();~SenaraiPaut();void setPos(const ELEM &);void input(const ELEM &);void papar();ELEM hapus (const ELEM&);int panjang() const;bool kosong() const;bool cari(const ELEM&);};MENGISYTIHARKAN SENARAI BERPAUT TUNGGAL Berdasarkan aturcara di atas : ahli bg class nod adalah: elemen objek data berjenis integer paut penuding berjenis nod yg akan menuding kpd nod berikutnya dlm senarai konstruktor dan distruktor (bg kelas nod)Bagi ahli dlm class SenaraiPaut di bahagian private: kepala - penuding berjenis nod, menuding kpd nod pertama dlm senarai sblm - penuding berjenis nod, menuding nod sebelum semasa - penuding berjenis nod, menuding nod semasa bil - pu integer yg memegang bilangan nod semasa dlm senaraiMENCIPTA SENARAI BERPAUT TUNGGAL// Meletakkan nilai awal NULL kepada kepala dan semasa// Bil nod = 0SenaraiPaut::SenaraiPaut(){kepala = NULL;bil = 0;}Gambaran senarai kosong yg dicipta

semasakepalaMEMUSNAHKAN SENARAI BERPAUT (DISTRUKTOR)Untuk menghapuskan objek penuding dan memulangkan memori yg telah digunakan oleh penuding. Distruktor akan dipanggil secara automatik sebelum aturcara tamat.

SenaraiPaut::~SenaraiPaut(){while (kepala !=NULL){ semasa = kepala;kepala = kepala -> paut;delete semasa;saiz--;}semasa = NULL;sebelum = NULL;}OPERASI TENTU KEDUDUKANUntuk mengenalpasti kedudukan item yg ingin dimasukkan dlm senarai. Pernyataan :

membolehkan item yg lebih besar dr item semasa dlm senarai diperiksa secara menaik. Dipanggil dalam fungsi input dan hapus untuk menentukan kedudukan item tersebut

item>semasa->elemenOPERASI TENTU KEDUDUKANvoid SenaraiPaut::setPos(const ELEM & item){sblm=NULL; //mula dari awal senaraisemasa=kepala;

while (semasa!=NULL && item>semasa->elemen){sblm=semasa;semasa=semasa->paut; //tuding pd nod seterusnya}}FUNGSI TAMBAHTerdapat tiga keadaan untuk operasi selit(tambah) iaitu: senarai masih kosong sblm adalah NULL, nod baru akan menjadi nod pertama dlm senarai senarai tidak kosong sblm adalah NULL, ttp kepala tidak sama dgn NULL, nod baru akan menjadi nod kepala kerana keadaan ini bermakna nod baru adalah lebih kecil dari nod pertama(yg asal). senarai tidak kosong sblm dan kepala tidak sama dengan NULL, nod baru akan diselit sama ada di tengah atau dihujung senaraicodingGambaran operasi tambah/selit pada senarai barpaut apabila input dilaksanakan sebanyak tiga kali (berturutan dengan nilai adalah 5, 10 dan 8)Keadaan 1:Senarai masih kosongSenaraiPaut L; //istihar objekL.input(5); //nilai 5 dimasukkan dalam senarai(i) nod baru dicipta

(ii)nod baru diselit di hadapan senaraiFUNGSI TAMBAH5npautitem5sblmnpautitemkepalaKeadaan 2: nod diselit dihujung senaraiL.input(10); //nilai 10 dimasukkan dalam senarai(i) nod baru dicipta

(ii) senarai sedia ada

(iii) nod diselit dihadapan senaraiFUNGSI TAMBAH10nitempaut5kepalaitempautsblm5kepalaitempautsblm10itempautKeadaan 3 : nod diselit di tengah senaraiL.input(8); //nilai 8 dimasukkan dalam senarai(i) nod baru dicipta

(ii) senarai sedia ada

(iii) nod baru diselit di tengah senaraiFUNGSI TAMBAH8nitempaut5sblmitempautkepala10itempaut5sblmitempautkepala8itempaut10itempautsemasaFUNGSI HAPUSLangkah untuk hapus: tentukan kedudukan item dengan memanggil fungsi setPos Tiga kedudukan item yg berlaku jika item wujud dlm senarai:i. Item berada di hadapanii. Tengah atauiii. Hujung senarai hapus akan dapat memulangkan item yang dapat dihapuskan dan sebaliknya memaparkan mesej Tiada dalam senarai jika item yg ingin dihapuskan tiada dalam senarai.

codingGambaran senarai sedia ada yg ingin dilaksanakan dgn operasi hapus kepadanya

(*Keadaan 1-3 tidak berkait, rujuk senarai asal untuk setiap pembuangan nod)

FUNGSI HAPUS5810Keadaan 1 :hapus nod di hadapan senarai

L.hapus(5); //nilai 5 hendak dihapuskan(i) setPos dilaksanakan kedudukan penuding kepala, sblm dan semasa adalah seperti berikut:

(ii) nod 5 diputuskan dari senarai

FUNGSI HAPUS5810kepalasemasasblm5810semasasblm kepala, semasa menuding nod 5 sblm adalah NULL kepala = semasa->pautKeadaan 2 : Hapus nod di tengah senaraiL.hapus(8); //nilai 8 hendak dihapuskan dari senarai (rajah asal)(i) selepas setPos dilaksanakan, keadaan penuding kepala, sblm dan semasa adalah seperti berikut :

(ii) nod 8 diputuskan dari senarai

FUNGSI HAPUS5810kepalasemasasblm semasa menuding nod 8 sblm menuding nod 55810kepalasemasasblm sblm->paut=semasa->paut;Keadaan 3 : hapus nod dihujung senaraiL.hapus(10); // nilai 10 hendak dihapuskan dari senarai (rajah asal)(i) selepas setPos dilaksanakan di dalam fungsi hapus, kedudukan penuding kepala, sblm dan semasa adalah seperti berikut:

(ii) nod 10 diputuskan dari senarai5810kepalasemasasblm5810kepalasemasasblmFUNGSI HAPUS sblm->paut=semasa->pautFUNGSI LAIN UNTUK SENARAI BERPAUT Terdapat beberapa fungsi penting yang lain yang diperlukan dalam mengimplemenkan senarai berpaut, iaitu :Fungsi papar nod Fungsi panjang senarai Fungsi semak senarai kosong Fungsi CarianFUNGSI PAPAR NODFungsi papar membolehkan kandungan dalam senarai berpaut dipaparkan iaitu bermula dari nod awal/pertama hinggalah nod terakhir dalam senarai.

void SenaraiPaut::papar(){nod *n;n=kepala;while (n!=NULL){coutpaut; //tuding kepada nod seterusnya}return jumpa;}