Anda di halaman 1dari 31

Name of

presentatio
n
Company name

Definisi
Linked List adalah salah satu bentuk struktur data, berisi
kumpulan data (disebut node atau simpul) biasanyadalam bentuk
struct, yang tersusun secara sekuensial dan saling menyambung.
Linked List sering disebut juga Senarai Berantai.
Linked List diimplementasikan menggunakan variabel pointer.

Struct

Struct atau structure dalam C++digunakan untuk


membentuk tipe data dengan anggota (member)
dengan tipe data tertentu.
Berikut cara
deklarasi dari sebuah struct:
struct tgl {
int hari;
int bulan;

Contoh di atas memperlihatkan bagaimana mendeklarasi sebuah struct dengan nama


struct tgl yang memiliki tiga member bertipe int yaitu hari, bulan dan tahun.
Kemudian sebuah variabel Tanggal dibuat bertipe struct tgl. Untuk mempersingkat
.
dan menyederhanakan pendeklarasian sebuah struct, kata cadang typedef dapat
digunakan. Sesuai namanya, typedef digunakan untuk mendefinisikan sebuah tipe
data menjadi suatu alias

Dengan cara yang sama, pendeklarasian struct tgl di


atas dapat disederhanakan menggunakan kata cadang
typedef.
Perhatikan statemen berikut ini:

typedef struct tgl {


int hari;
int bulan;
int tahun;
} Date;
Date tanggal;

Single Linked List Non Circular


Single: field pointer-nya hanya satu buah dan satu arah.
Linked List: node-node tersebut saling terhubung satu sama lain.
Setiap node pada linked list mempunyai field yang berisi pointer
ke node berikutnya, dan juga memiliki field yang berisidata.

Non Circular: pada akhir node maka pointernya menunjuk NULL,


digunakan sebagai kondisi berhenti saat membaca A B C isi linked
liDst. NU LL.

Deklarasi

Contoh deklarasi Node


Typedef struct TNode{
Int data;
TNode*next;
};

Penjelasan:
Pembuatan struct bernama Tnode yang berisi 2field, yaitu field data bertipe
integer dan field next yang bertipe pointer dari TNode
Setelah pembuatan struct, buat variabel head yang bertipe pointer yang
berguna sebagai kepala linked list.

Function untuk mengetahui kosong


tidaknya
Single Linked List
Jika pointer head tidak menunjuk
node,maka data masih kosong.
Int is Empty() {
If (head== NULL) return 1;
else return 0;
}

pada

suatu

Menambah data didepan

Pada saat pertama kali (saat data masih kosong), maka penambahan data dilakukan dengan
cara node head ditunjukkan ke node baru tersebut. Untuk menambah data selanjutnya dengan
cara menambah node baru yang akan dikaitkan di node paling depan
Prinsip mengkaitkan node baru dengan head, kemudian head akan menunjuk pada data
baru tersebut sehingga head tetap menjadi data terdepan

Contoh Program
void insertdepan(int n) { //Fungsi untuk menambahkan data baru (n didapat dari input di
program utama (main))
TNode *baru; //Disini menggunakan baru sebagai pointer TNode nya
baru=new TNode;
baru->data=n; //pointer baru->data berisi nilai variabel n
baru->next=NULL; // pointer baru->next berisi NULL
if(IsEmpty()==1){ //periksa apakah linked list bernilai, jika return 1(tidak bernilai), maka
akan
mengeksekusi perintah hingga }
head=baru; //Nilai head= Nilai baru
head->next=NULL;
} else {
// Jika return 0(linked list bernilai), maka akan mengeksekusi perintah
berikut hingga }
baru->next=head;
head=baru;
} cout<<"Data Terisi";

Menambah data dibelakang


Pada saat pertama kali (saat data masih kosong), maka
penambahan data dilakukan dengan cara node head
ditunjukkan ke node baru tersebut.
Untuk menambah data berikutnya, menambah data
dibelakang lebih sulit karena butuh pointer bantuuntuk
mengetahui node paling belakang. Selanjutnya pointer
bantu dikaitkan dengan node baru.
Catatan untuk mengetahui data paling belakang perlu
digunakan proses perulangan.

Menampilkan seluruh
isi list
Menampilkan seluruh isi list dengan
cara menelusuri linked list satupersatu
dari
awal
sampai
akhir
node
menggunakan pointer bantu.
Catatan pointer head yang
menjadi tanda awal linked list tidak
bolehberubah atau berganti posisi.
Penelusuran dilakukan terus sampai
dengan node terakhir menunjuk kenilai
NULL. Jika tidak NULL.

Contoh Program
void tampil() { //Fungsi untuk menampilkan linked list yang telah di input /
di delete
TNode *bantu; //p o inter yang digunakan yaitu bantu
bantu=head; // Nilai bantu= Nilai yang ada di head
if(IsEmpty()==0){ // periksa apakah return 0(bernilai)
while(bantu!=NULL){ //Selama bantu tidak sama dengan NULL, maka di
eksekusi
cout<<bantu->data<<endl; // tampilkan di monit o r nilai bantu->data
bantu=bantu->next; //Nilai bantu= nilai bantu selanjutnya
}} else
cout<<"Masih Kosong"<<endl;
}

Menghapus Node
Menghapus node/data pertama (terdepan) yang
ditunjuk oleh head pada linked list.
Menghapus node terdepan tidakboleh dilakukan
jika node sedang ditunjuk oleh pointer, sehingga
harus menggunakan pointer lain untuk menunjuk
node yang akan dihapus,
contoh pointer hapus, kemudian menghapus pointer
hapus menggunakan perintah delete.

Contoh
Function untuk menghapus data terdepan
void hapusdepan() { //Fungsi untuk menghapus Nilai paling
depan
TNode *hapus;
int d;
if(IsEmpty()==0){ //periksa apakah return 0(ada nilai)
if(head!=NULL){ // jika head tidak sama dengan Null maka :
hapus=head; // pointer hapus= head
d=hapus->data; //nilai dari d = nilai dari hapus->data
head=hapus->next; // Nilai head sekarang berisi nilai hapus>next
delete hapus; //fungsi untuk menghapus nilai yang ada di
pointer hapus
} cout<<d<<" Terhapus"<<endl;
} else
cout<<"Masih Kosong"<<endl;

Menghapus data terakhir(paling


belakang)
Membutuhkan 2 pointer tambahan yaitu: pointer bantu dan pointer
hapus. Pointer hapus untuk menunjuk node yang akan dihapus.
Pointer bantu untuk menunjuk node sebelum node yang dihapus
yang kemudian menjadi node terakhir.Pointer bantu selalu bergerak
sampai sebelum nod yang akan dihapus, kemudian pointer hapus
diletakkan setelah pointer bantu.
Selanjutnya pointer hapus akan dihapus, sedangkan pointer bantu
menunjuk ke NULL.

ILUSTRASI

ILUSTRASI
Function untukmenghapusdata paling
belakang
void hapusBelakang(){
TNode*hapus,*bantu;
Int d;
if (isEmpty()==0){
if(head->next != NULL){
bantu= head;
while(bantu->next->next!=NULL){
bantu= bantu->next;
} hapus= bantu->next;
d = hapus->data;
bantu->next = NULL;
delete hapus;
}
cout<<d<<" Terhapus"<<endl;
} else
cout<<"Masih Kosong"<<endl

Single Link 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.
Pengertian:
Single : artinya field pointer-nya hanya satu buah saja dan satu
arah.
Linked List : artinya node-node tersebut saling terhubung satu sama
lain.
Circular : artinya pointer next-nya akan menunjuk pada dirinya
sendiri sehingga berputar

ILUSTRASI
Setiap node pada linked list mempunyai field yang
berisi pointer ke node berikutnya, dan juga memiliki
field yang berisi data.
Pada akhir linked list, node terakhir akan menunjuk
ke node terdepan sehingga linked list tersebut
berputar.
ABCD

Deklarasi dan node baru SLLC


Deklarasi node
Dibuat dari struct berikut ini:
typedef struct TNode{
int data;
TNode *next;
};
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node
baru
berserta alokasi memorinya.
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;

SLLC dengan HEAD


Dibutuhkan satu buah variabel pointer:
head
Head akan selalu menunjuk pada node
pertama
ABCD
Head

SLLC dengan HEAD


Deklarasi Pointer Penunjuk Kepala Single Linked List
Manipulasi linked list tidak bisa dilakukan langsung ke node
yang dituju, melainkan harus melalui node pertama dalam linked
list.
Deklarasinya sebagai berikut:
TNode *head;
Fungsi Inisialisasi Single LinkedList Circular
void init(){
head = NULL;
}

SLLC dengan HEAD

Function untuk mengetahui kosong tidaknya SLLC


int isEmpty(){
if(head == NULL) return 1;
else return 0;
}
Penambahan data di depan
Penambahan node baru akan dikaitan di node paling depan, namun pada saat
pertama kali (data masih kosong), maka penambahan data dilakukan pada head
nya.
Pada prinsipnya adalah mengkaitkan data baru denganhead, kemudian head akan
menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data
terdepan. Untuk menghubungkan node terakhir dengan node terdepan dibutuhkan
pointer bantu.

Fungsi Penambahan data di Depan


void insertDepan(int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
head->next=head;
}
else {
bantu = head;
while(bantu->next!=head){
bantu=bantu->next;
}
baru->next = head;

ILUSTRASI

Penambahan data di belakang


Penambahan data dilakukan di belakang, namun
pada saat pertama kali data langsung ditunjuk pada
head-nya.
Penambahan di belakang lebih sulit karena kita
membutuhkan pointer bantu untuk mengetahui data
terbelakang, kemudian dikaitkan dengan data baru.
Untuk mengetahui data terbelakang perlu digunakan
perulangan.

Fungsi
Penambahan
belakang
void insertBelakang (int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
head->next=head;
} else {
bantu = head;
while(bantu->next != head){
bantu=bantu->next;
}
bantu->next = baru;
baru->next = head;
}
cout<<Data terinput"<<endl;

data

di

Contoh Program
Function untuk menampilkan isi single linked list
void tampil(){
TNode *b;
b=head; // Nilai bantu= Nilai yang ada di head
if(IsEmpty()==0){ // periksa apakah return 0(bernilai)
do{
cout<<b->data<<endl; // tampilkan di monitor nilai bantu-data
b=b->next; //Nilai bantu= nilai bantu selanjutnya
}while(b!=head);
cout<<endl;
}
else
cout<<"Masih Kosong"<<endl;
}

Fungsi untuk hapus di depan


void hapusDepan (){
TNode *hapus,*bantu;
if (isEmpty()==0){
int d;
hapus = head;
d = head->data;
if(head->next != head){
bantu = head;
while(bantu->next!=head){
bantu=bantu->next;
}
head = head->next;
delete hapus;
bantu->next = head;
}else{
head=NULL;

Fungsi
untuk
belakang
void hapusBelakang(){
TNode *hapus,*bantu;
if (isEmpty()==0){
int d;
hapus = head;
if(head->next == head){
head = NULL;
}else{
bantu = head;
while(bantu->next->next != head){
bantu = bantu->next;
}
hapus = bantu->next;
d = bantu->data;
bantu->next = head;
delete hapus;
}
cout<<Data Terhapus"<<endl;
} else cout<<"Masih Kosong"<<endl;

hapus

di

Anda mungkin juga menyukai