Struktur Data Materi II LINKED LIST / SENARAI BERKAIT List: Koleksi dari obyek-obyek homogen dengan sifat setiap elemen, kecuali yang terakhir pasti memiliki penerus dan setiap elemen, kecuali yang pertama pasti memiliki pendahulu. Setiap elemen list (node) terdiri dari dua komponen yaitu Info dan Next. Elemen list (Node) NEXT INFO INFO : Berfungsi untuk menyimpan data yang harus disimpan. NEXT : Berfungsi untuk menyimpan alamat elemen berikutnya. Suatu list linier dikenali : Alamat elemen pertama (First / Awal) Alamat elemen berikut (Next / Berikut) Setiap elemen list memiliki alamat, jika tidak ada disebut NULL.
Struktur Data Materi II Elemen pertama tidak memiliki pendahulu (predesor) oleh sebab itu alamat elemen pertama digambarkan dengan anak panah dari kotak yang namanya awal. Awal NextInfo Null Contoh List yang Terdiri dari 3 Elemen: Atau Contoh List Kosong Elemen terakhir tidak memiliki penerus (suksesor) oleh sebab itu field Next nya di-Null-kan. Setiap elemen menyimpan alamat elemen penerusnya sehingga elemen list saling berkait, maka list seperti ini disebut dengan Linked List.
Struktur Data Materi II OPERASI-OPERASI PADA LINKED LIST 1. Buat Linked List Mendefinisikan / mendeklarasikan linked list kosong 2. Cek Linked List Mengecek apakah List dalam kedaan kosong atau tidak ? 5. Telusuri Linked List / Cetak Elemen Linked List(List) Menelusuri / mencetak semua node pada linked list. 3. Sisip Node Pada Linked List Menambah / menyisipkan node baru berisi info baru pada linked list. 4. Hapus Node Pada Linked List Menghapus node pada linked list yang sesuai dengan info yang dihapus.
Struktur Data Materi II 1. MEMBUAT LINKED LIST INFO NEXT ALAMAT Pointer Node Integer Untuk membuat sebuah linked list pertama-tama adalah mendefinisikan elemen linked list biasa disebut node. Sebuah node memiliki tipe pointer dengan komponen Info dan Next. Tipe data Info dapat berupa apa saja bah- kan dapat berupa record, sedangkan Next harus memiliki tipe data pointer karena digunakan untuk merekam alamat elemen linked list berikutnya. Misalkan akan dibuat sebuah linked list standar, dimana infonya digunakan untuk merekam data bilangan bulat atau integer pada bahasa C, caranya: Typedef int tipeinfo; typedef struct node *tipeptr; typedef struct node{tipeinfo info; tipeptr next; };
Struktur Data Materi II Mendefinisikan kondisi awal linked list, masih dalam keadaan kosong. void buatlistbaru() { awal=NULL; akhir=NULL; } Awal Akhir
Struktur Data Materi II 2. MENYISIPKAN NODE PADA LINKED LIST Proses menyisipkan node pada linked terjadi pada tiga tempat masing- masing di depan, tengah dan belakang. a.Sisip Node di Depan AwalAkhirNB AwalAkhir 10 Hasil : Sisipnode(10)
Struktur Data Materi II 2. MENYISIPKAN NODE PADA LINKED LIST Fungsi Menyisipkan Node di Depan (bahasa C). void sisipdepan(tipeinfo IB) { tipeptr NB; NB=(node *)malloc(sizeof(node)); NB->info=IB; NB->next=awal; awal=NB; akhir=NB; }
Struktur Data Materi II b.Sisip Node di Tengah AwalAkhir 10 NB 35 Bantu Hasil : Awal Akhir Sisipnode(35)
Struktur Data Materi II 2. MENYISIPKAN NODE PADA LINKED LIST Fungsi Menyisipkan Node di Tengah (bahasa C). void sisiptengah(tipeinfo IB) { tipeptr NB, bantu; NB=(node *) malloc(sizeof(node)); NB->info=IB; NB->next=NULL; bantu=awal; while(bantu->next->info<IB) bantu=bantu->next; NB->next=bantu->next; bantu->next=NB; }
Struktur Data Materi II c.Sisip Node di Akhir AwalAkhir AwalAkhir 10 Hasil : 50 Sisipnode(60) NB 60
Struktur Data Materi II 2. MENYISIPKAN NODE PADA LINKED LIST Fungsi Menyisipkan Node di Belakang (bahasa C). void sisipbelakang(tipeinfo IB) { tipeptr NB; NB=(node *) malloc(sizeof(node)); NB->info=IB; NB->next=NULL; akhir->next=NB; akhir=NB; }
Struktur Data Materi II 3. MENCETAK ISI LINKED LIST Proses mencetak isi linked list dengan cara menelusuri seluruh node pada linked list. Ada dua cara untuk mencetak yaitu mencetak dari depan ke belakang dan dari belakang ke depan. Bantu AwalAkhir Hasil : a. Cetak Dari Depan
Struktur Data Materi II Fungsi Mencetak dari Depan (bahasa C). void cetaklist() { tipeptr bantu; bantu=awal; while (bantu!=NULL) { printf("%d ",bantu->info); bantu=bantu->next; } 3. MENCETAK ISI LINKED LIST
Struktur Data Materi II 3. MENCETAK ISI LINKED LIST Proses mencetak isi linked list dari belakang ke depan dilakukan melalui dua tahap yaitu dengan membalik pointer kemudian mencetak normal AwalAkhir b. Cetak Dari Belakang Contoh: 1. Balikkan arah pointer, sehingga menjadi: AwalAkhir Cetak secara normal, dari depan ke belakang.
Struktur Data Materi II 3. MENCETAK ISI LINKED LIST Ekor AwalAkhir Bantu Awal Akhir Proses Membalik Pointer Putar arah linked list Sederhanakan AwalAkhir 60 10
Struktur Data Materi II Fungsi Mencetak dari Belakang (bahasa C). void cetakterbalik() { tipeptr ekor,bantu; ekor=awal; awal=akhir; do { bantu=ekor; while(bantu->next!=akhir) bantu=bantu->next; akhir->next=bantu; akhir=bantu; } while(akhir!=ekor); akhir->next=NULL; bantu=awal; while(bantu!=NULL) { printf("%d ",bantu->info); bantu=bantu->next; } 3. MENCETAK ISI LINKED LIST
Struktur Data Materi II 4. MENGHAPUS NODE PADA LINKED LIST Proses menghapus node pada linked list terjadi pada tiga tempat, yaitu masing-masing di depan, tengah dan belakang. a.Hapus Node di Depan Awal 10 Hapus 60 Akhir AwalAkhir 20 Hasil : Hapusnode(10)
Struktur Data Materi II b. Hapus Node di Tengah Hapusnode(40) AwalAkhir 10 Bantu 60 Hapus AwalAkhir 10 Hasil :
Struktur Data Materi II c. Hapus Node di Akhir Hapusnode(60) AwalAkhir 10 Bantu 60 Hapus Hasil : AwalAkhir 10 40
Struktur Data Materi II Tugas Buat sebuah linked list dimana infonya berfungsi untuk menyimpan data nilai mahasiswa berupa nomor mahasiswa, nama, kelas dan nilai. Tipe data dan lebar field tentukan sendiri!.