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
#include
/* membuat linked list */
typedefstructmyLinkedList {
char nim[10];
char nama[35];
intnilai;
typedefstructmyLinkedList {
char nim[10];
char nama[35];
intnilai;
myLinkedList *next;
};
};
myLinkedList *head;
/* keadaanawal */
void init() {
head = NULL;
}
void init() {
head = NULL;
}
/* fungsiuntukmengecek linked list
* apakahkosongatautidak
* jikakosongmakabernilai 1
* jikatidakkosongmakabernilai 0
*/
intpaKosong() {
if (head == NULL) return 1;
else return 0;
}
* apakahkosongatautidak
* jikakosongmakabernilai 1
* jikatidakkosongmakabernilai 0
*/
intpaKosong() {
if (head == NULL) return 1;
else return 0;
}
/**
* fungsiuntukmenambahkan data daridepan node
*/
void tambahDepan() {
* fungsiuntukmenambahkan data daridepan node
*/
void tambahDepan() {
myLinkedList *baru;
baru = new myLinkedList;
baru = new myLinkedList;
cout<< “Masukkan Data lengkap di
bawahini : ” <<>>baru->nim;
cout<< “Nama : “; cin>>baru->nama;
cout<< “Nilai : “; cin>>baru->nilai;
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
*/
head = baru;
head->next = NULL;
} else {
baru->next = head;
head = baru;
}
}
/**
* fungsuuntukmenambahkan data daridepan node
*/
voidtambahBelakang() {
myLinkedList *baru, *bantu;
baru = new myLinkedList;
baru = new myLinkedList;
cout<< “Masukkan Data lengkap di
bawahini : ” <<>>baru->nim;
cout<< “Nama : “; cin>>baru->nama;
cout<< “Nilai : “; cin>>baru->nilai;
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;
head = baru;
head->next = NULL;
} else {
bantu = head;
while (bantu->next != NULL) {
bantu = bantu->next;
}
bantu->next = baru;
}
}
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;
}
* 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;
}
* 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<<>
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
*/
* fungsiuntukmenampilkan data linked list
*/
voidtampilData() {
int no = 1;
int no = 1;
myLinkedList *bantu;
bantu = head;
if (paKosong() == 0) {
while (bantu != NULL) {
cout<< “No. : ”<<>nim<<>nama<<>nilai<<>
bantu = head;
if (paKosong() == 0) {
while (bantu != NULL) {
cout<< “No. : ”<<>nim<<>nama<<>nilai<<>
no++;
bantu = bantu->next;
}
cout<<>
bantu = bantu->next;
}
cout<<>
} else {
cout<< “Data masihkosong ”<<>
cout<< “Data masihkosong ”<<>
/**
* fungsi Menu, Untukmenentukan linked list mana
* yang dipilih
*/
intmenu() {
intpilihan;
* 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;
}
return pilihan;
}
/**
* fungsioperasi data
*/
void operasiData() {
intpilih;
* fungsioperasi data
*/
void operasiData() {
intpilih;
do {
pilih = menu();
pilih = menu();
switch (pilih) {
case 1 :
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3 :
hapusDepan();
break;
case 1 :
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3 :
hapusDepan();
break;
case 4 :
hapusBelakang();
break;
case 5 :
tampilData();
break;
case 6:
hapusBelakang();
break;
case 5 :
tampilData();
break;
case 6:
cout<< “Terimakasih coy!!!”; break;
} } while (pilih != 6); }
/**
* PROGRAM UTAMA
*/
void main() {
init();
operasiData();
}
REFERENSI :
* PROGRAM UTAMA
*/
void main() {
init();
operasiData();
}
REFERENSI :
- Wantoro, jan dan Sukirman 2017. Algoritma & Struktur Data Dalam Bahasa C++. Surakarta:MUP
Komentar
Posting Komentar