SENARAI BERANTAI (LINKED LIST)

Linked list adalah sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari dua bagian Linked list juga merupakan suatu cara untuk menyimpan data dengan struktur sehingga dapat secara otomatis menciptakan suatu tempat baru untuk menyimpan data yang diperlukan. Struktur ini lebih dinamis karena banyaknya elemen dengan mudah ditambah atau dikurangi, berbeda dengan array yang ukurannya tetap. Berikut gambaran kecil mengenai linked list.



2.      Jenis-jenis Linked List
Di dalam Linked List terdapat beberapa bagian lagi, yaitu:
a.       Linked List Circular Double Linked List       
Pengertian secara umumnya DLLC itu Linked list yang menggunakan pointer, dimana setiap node memiliki 3 field, yaitu:
 1 field pointer yang menunjuk pointer berikutnya "next",
 1 field menunjuk pointer sebelumnya" prev ", 
 1 field yang berisi data untuk node tersebut .

Double Linked List Circular pointer next dan prevnya menunjuk ke dirinya sendiri secara circular. Bentuk Node DLL
b.      Single Linked List
Single Linked List Circular (SLLC) adalah Single Linked List yang pointer nextnya menunjuk pada dirinya sendiri. Jika Single Linked List tersebut terdiri dari beberapa node, maka pointer next pada node terakhir akan menunjuk ke node terdepannya.
c.       Linked List Non Circular
Double Linked List Non Circular (DLLNC) adalah Double Linked List yang memiliki 2 buah pointer yaitu pointer next dan prev. Pointer next menunjuk pada node setelahnya dan pointer prev menunjuk pada node sebelumnya. Pengertian :
Double artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya.
Linked List artinya node-node tersebut saling terhubung satu sama lain.
Non Circular artinya pointer prevdan next-nyacakan menunjuk pada NULL.
d.      Single Linked List Non Circular (SLLNC)
Single Linked List Non Circular (SLLNC) adalah Linked List yang pointernya selalu mengarah ke Node yang menampung *next bernilai NULL, jadi arahnya tidak menunjuk pointer didepannya sehingga tidak dapat kembali ke pointer - pointer sebelumnya. SLLNC ini juga memiliki 2 bagian, adaTambah dan ada Hapus,  masing – masing bagian ini juga masih meliputi 3 fungsi lainya itu belakang, tengah, dan depan. Untuk Contoh Tambah & Hapus (depan & belakang).

3.      Beberapa jenis operasi yang terdapat di dalamnya
a.       Operasi pada Single Linked List 
1)      Insert = Istilah  Insert berarti menambahkan  sebuah  simpul baru ke dalam suatu linked  list.
2)      Konstruktor = Fungsi ini membuat sebuah  linked  list yang baru dan masih kosong. 
3)      Is Empty = Fungsi ini menentukan apakah  linked list kosong atau tidak.
4)      Find First = Fungsi ini mencari elemen pert amadari linked  list.
5)      Find Next = Fungsi ini mencari  elemen  sesudah elemen yang ditunjuk now.
6)      Retrieve = Fungsi  ini  mengambil  elemen  yang  ditunjuk  oleh  now. Elemen  tersebut  lalu dikembalikan oleh fungsi. 
7)      Update = Fungsi ini mengubah elemen yang ditunjuk oleh  now dengan  isi dari  sesuatu. 
8)      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.
b.      Operasi –operasi pada Double Linked List
1)      Insert Tail = Fungsi  insert  tail  berguna  untuk  menambah  simpul  di belakang (sebelah  kanan)  pada sebuah linked list. 
2)      Insert Head = Sesuai dengan namanya, fungsi Insert Head berguna untuk menambah simpul di depan (sebelah  kiri).   Fungsi  ini  tidak  berada  jauh dengan  fungsi  Insert  Tail    yang  telah dijelaskan  sebelumnya.
3)      Delete Tail = Fungsi  Delete  Tail  berguna  untuk  menghapus simpul dari belakang. Fungsi  ini merupakan kebalikan dari fungsi Insert Tail yang menambah simpul dibelakang. Fungsi Delete  Tail akan  mengarahkan  Now kepada  Tail  dan  kemudian  memanggil fungsi Delete Now.
4)      Delete Head  = Fungsi  Delete  Head  merupakan  kebalikan  dari  fungsi Delete  Tail  yang  menghapus simpul  dari  belakang,  sedangkan  Delete Head  akan  menghapus  simpul  dari  depan (sebelah  kiri).  Fungsi  Delete Head  akan  mengarahkan  Now  kepada  Head  dan kemudian memanggil fungsi Delete Now

4.      Algoritma dan contoh program untuk operasi-operasi di dalamnya

#include
#include
/* membuat linked list */
typedefstructmyLinkedList {
char nim[10];
char nama[35];
intnilai;
myLinkedList *next;
};
myLinkedList *head;
/* keadaanawal */
void init() {
head = NULL;
}
/* fungsiuntukmengecek linked list
* apakahkosongatautidak
* jikakosongmakabernilai 1
* jikatidakkosongmakabernilai 0
*/
intpaKosong() {
if (head == NULL) return 1;
else return 0;
}
/**
* fungsiuntukmenambahkan data daridepan node
*/
void tambahDepan() {
myLinkedList *baru;
baru = new myLinkedList;
cout<< “Masukkan Data lengkap di bawahini : ” <<>>baru->nim;
cout<< “Nama : “; cin>>baru->nama;
cout<< “Nilai : “; cin>>baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
baru->next = head;
head = baru;
}
}
/**
* fungsuuntukmenambahkan data daridepan node
*/
voidtambahBelakang() {
myLinkedList *baru, *bantu;
baru = new myLinkedList;
cout<< “Masukkan Data lengkap di bawahini : ” <<>>baru->nim;
cout<< “Nama : “; cin>>baru->nama;
cout<< “Nilai : “; cin>>baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
bantu = head;
while (bantu->next != NULL) {
bantu = bantu->next;
}
bantu->next = baru;
}
}
/**
* fungsiuntukmenghapusdaridepan node
*/
void hapusDepan() {
myLinkedList *hapus;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
hapus = head;
data = hapus->nim;
head = head->next;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout<<>
/**
* fungsiuntukmenghapusdaribelakang node
*/
void hapusBelakang() {
myLinkedList *hapus, *bantu;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
bantu = head;
while(bantu->next->next != NULL) {
bantu = bantu->next;
}
hapus = bantu->next;
data = hapus->nim;
bantu->next = NULL;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout<<>
cout<< “Tekan Enter untukkembalike Menu!”; getch(); }
/**
* fungsiuntukmenampilkan data linked list
*/
voidtampilData() {
int no = 1;
myLinkedList *bantu;
bantu = head;
if (paKosong() == 0) {
while (bantu != NULL) {
cout<< “No. : ”<<>nim<<>nama<<>nilai<<>
no++;
bantu = bantu->next;
}
cout<<>
} else {
cout<< “Data masihkosong ”<<>
/**
* fungsi Menu, Untukmenentukan linked list mana
* yang dipilih
*/
intmenu() {
intpilihan;
cout<< “+———————-+\n”; cout<< “| MENU PILIHAN |\n”; cout<< “+———————-+\n”; cout<< “| 1. TambahDepan |\n”; cout<< “| 2. TambahBelakang |\n”; cout<< “| 3. HapusDepan |\n”; cout<< “| 4. HapusBelakang |\n”; cout<< “| 5. Tambah Tengah |\n”; cout<< “| 6. Hapus Tengah |\n”; cout<< “| 7. TampilData |\n”; cout<< “| 8. Keluar |\n”; cout<< “+———————-+\n”; cout<< “| PILIHAN ANDA ? [ ] |\n”; cout<< “+———————-+\n”;
cin>>pilihan;
return pilihan;
}
/**
* fungsioperasi data
*/
void operasiData() {
intpilih;
do {
pilih = menu();
switch (pilih) {
case 1 :
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3 :
hapusDepan();
break;
case 4 :
hapusBelakang();
break;
case 5 :
tampilData();
break;
case 6:
cout<< “Terimakasih coy!!!”; break; } } while (pilih != 6); }
/**
* PROGRAM UTAMA
*/
void main() {
init();
operasiData();
}


REFERENSI :

  1. Wantoro, jan dan Sukirman 2017. Algoritma & Struktur Data Dalam Bahasa C++. Surakarta:MUP

Komentar

Postingan Populer