Senin, 14 Agustus 2017

SINGLE LINKED LIST MENGGUNAKAN HEAD DAN TAIL


SINGLE LINKED LIST MENGGUNAKAN HEAD DAN TAIL 

  • Dibutuhkan dua buah variabel pointer: head dan tail 
  • Head akan selalu menunjuk pada node pertama, sedangkan tail akan selalu menunjuk pada node terakhir. 

Inisialisasi LinkedList 


TNode *head, *tail;
Fungsi Inisialisasi LinkedList
void init(){
head = NULL;
tail = NULL;

Function untuk mengetahui kosong tidaknya LinkedList 


int isEmpty(){
if(tail == NULL) return 1;
else return 0;

PENAMBAHAN DATA 
Pengkaitan node baru ke linked list di depan 
Penambahan data baru di depan akan selalu menjadi head. 

void insertDepan(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next=head;
tail->next=tail;
}
else {
baru->next = head;
head = baru;
tail->next = head;
}
cout<<"Data masuk\n";

Penambahan Data di belakang Pada penambahan data di belakang, data akan selalu dikaitkan dengan tail, karena tail terletak di node paling belakang. Setelah dikaitkan dengan node baru, maka node baru tersebut akan menjadi tail. 

void tambahBelakang(int databaru){ TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next=head;
tail->next=tail;
}
else
{
tail->next = baru;
tail = baru;
tail->next = head;
}
cout<<"Data masuk\n";

Kelebihan dari Single Linked List dengan Head & Tail adalah pada penambahan data di belakang, hanya dibutuhkan tail yang mengikat node baru saja tanpa harus menggunakan perulangan pointer bantu. 

Function untuk menampilkan isi linked list: 


void tampil(){ TNode *b;
b = head; if(isEmpty()==0)
{
do
{ cout<data<<" ";
b=b->next;
}
while(b!=tail->next);
cout<<<"Masih kosong\n";

Pada prinsipnya sama dengan function tampil sebelumnya. 

Function untuk menghapus data di depan 


void hapusDepan(){ TNode *hapus;
if (isEmpty()==0){ int d;
hapus = head;
d = head->data;
if(head != tail){
hapus = head;
head = head->next;
tail->next = head;
delete hapus;
}else{
head=NULL;
tail=NULL;
}
cout<<<" terhapus\n";
}
else cout<<"Masih kosong\n";

  • Function di atas akan menghapus data terdepan (pertama) yang ditunjuk oleh head pada linked list 
  • Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variabel hapus pada head, kemudian dilakukan pergeseran ke node berikutnya sehingga data setelah head menjadi head baru, kemudian menghapus variabel hapus dengan menggunakan perintah delete. 
  • Jika tail masih NULL maka berarti data masih kosong! 


Function untuk menghapus data di belakang: 

Dengan menggunakan Single Linked List ber-Head dan Tail, pengahapusan data di belakang akan mudah dilakukan, tidak seperti pada Single Linked List hanya ber-Head saja. 

void hapusBelakang(){ TNode *hapus,*bantu;
if (isEmpty()==0){ int d;
if(head == tail){ d = tail->data;
head = NULL;
tail = NULL;
}
else
{
bantu = head;
while(bantu->next != tail){
bantu = bantu->next;
}
hapus = tail;
tail = bantu;
d = hapus->data;
tail->next = head;
delete hapus;
}
cout<<<" terhapus\n";
}
else cout<<"Masih kosong\n";

  • Function di atas akan menghapus data terbelakang (terakhir) yang ditunjuk oleh tail pada linked list 
  • Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variabel hapus pada tail, kemudian dibutuhkan pointer bantu untuk membantu pergeseran dari head ke node berikutnya sampai sebelum tail, sehingga tail dapat ditunjukkan ke bantu tersebut, dan bantu tersebut akan menjadi tail yang baru. Setelah itu hapus variabel hapus dengan menggunakan perintah delete. 
  • Jika tail masih NULL maka berarti data masih kosong! 


Function untuk menghapus semua elemen LinkedList 


void clear(){ TNode *bantu,*hapus;
if(isEmpty() == 0){ bantu = head;
while(bantu->next!=head){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
tail = NULL;
}

  • Menggunakan pointer bantu yang digunakan untuk bergerak sepanjanglist, dan menggunakan pointer hapus yang digunakan untuk menunjuk node-node yang akan dihapus. 
  • Pada saat pointer hapus menunjuk pada node yang akan dihapus, pointer bantu akan bergerak ke node selanjutnya, dan kemudian pointer hapus akan didelete.


EmoticonEmoticon