0% menganggap dokumen ini bermanfaat (0 suara)
889 tayangan18 halaman

Single Linked List Circular

Dokumen tersebut memberikan penjelasan tentang struktur data single linked list circular (SLLC) yang merupakan single linked list dimana pointer next-nya akan menunjuk pada dirinya sendiri sehingga berputar. Diberikan ilustrasi dan penjelasan tentang pembuatan, penambahan, penghapusan, dan penampilan data pada SLLC menggunakan pointer head."

Diunggah oleh

androalifrakhman
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
889 tayangan18 halaman

Single Linked List Circular

Dokumen tersebut memberikan penjelasan tentang struktur data single linked list circular (SLLC) yang merupakan single linked list dimana pointer next-nya akan menunjuk pada dirinya sendiri sehingga berputar. Diberikan ilustrasi dan penjelasan tentang pembuatan, penambahan, penghapusan, dan penampilan data pada SLLC menggunakan pointer head."

Diunggah oleh

androalifrakhman
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 18

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.

Kom

# SEVEN

SINGLE LINKED LIST CIRCULAR


PENGANTAR 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. BENTUK NODE SLLC

data

pointer

Menempati alamat memori tertentu 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 A FFF1 B FFF2 C FFF3 D FFF4 Ilustrasi SLLC

- 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. Node terakhir akan menunjuk lagi ke head.

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

PEMBUATAN SINGLE LINKED LIST CIRCULAR Deklarasi node Dibuat dari struct berikut ini:
typedef struct TNode{ int data; TNode *next; };

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

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;

SINGLE LINKED LIST CIRCULAR MENGGUNAKAN HEAD - Dibutuhkan satu buah variabel pointer: head - Head akan selalu menunjuk pada node pertama
A FFF1
head

B FFF2

C FFF3

D FFF4

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

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


void init(){ head = NULL; }

head

NULL

Function untuk mengetahui kosong tidaknya Single LinkedList


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

PENAMBAHAN DATA 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 dengan head, 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.


void insertDepan(int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = baru;

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

if(isEmpty()==1){ head=baru; head->next=head; } else { bantu = head; while(bantu->next!=head){ bantu=bantu->next; } baru->next = head; head = baru; bantu->next = head; } cout<<"Data masuk\n"; }

Ilustrasi: 1. List masih kosong (head=NULL)


NULL

head

2. Masuk data baru, misalnya 5


5

head

baru

3. Datang data baru, misalnya 20 (penambahan di depan)


20 5

baru

head

20

baru

head bantu

20

baru

head

bantu

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

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.
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 masuk\n"; }

Ilustrasi: 1. List masih kosong (head=NULL)


NULL

head

2. Masuk data baru, misalnya 5

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

head

baru

3. Datang data baru, misalnya 20 (penambahan di belakang)


5 20

head

baru

20

head bantu

baru

20

head

baru

bantu

4. Datang data baru, misal 25 (penambahan di belakang)


5 20

25

head

baru

20

25

head

bantu

baru

20

25
baru bantu

head

Bagaimana dengan penambahan di tengah?

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

MENAMPILKAN DATA Function untuk menampilkan isi single linked list


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

head

bantu

- Function di atas digunakan untuk menampilkan semua isi list, di mana linked list ditelusuri satu-persatu dari awal node sampai akhir node. Penelusuran ini dilakukan dengan menggunakan suatu variabel node bantu, karena pada prinsipnya variabel node head yang menjadi tanda awal list tidak boleh berubah/berganti posisi. - Penelusuran dilakukan terus sampai node terakhir ditemukan menunjuk ke head lagi. Jika belum sama dengan head, maka node bantu akan berpindah ke node selanjutnya dan membaca isi datanya dengan menggunakan field next sehingga dapat saling berkait. - Jika head masih NULL berarti data masih kosong!

PENGHAPUSAN DATA Function untuk menghapus data terdepan


void hapusDepan (){ TNode *hapus,*bantu;

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

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; } cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n"; }

bantu

head

hapus

head

bantu

- Function di atas akan menghapus data teratas (pertama) yang ditunjuk oleh head pada linked list - Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus ditampung dahulu pada variabel hapus dan barulah kemudian menghapus variabel hapus dengan menggunakan perintah delete.

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

- Sebelum data terdepan dihapus, head harus ditunjukkan ke data sesudahnya terlebih dahulu sehingga data setelah head lama akan menjadi head baru (data terdepan yang baru). - Jika head masih NULL maka berarti data masih kosong!

Penghapusan data di 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<<d<<" terhapus\n"; } else cout<<"Masih kosong\n"; }

- Membutuhkan pointer bantu dan hapus. - Pointer hapus digunakan untuk menunjuk node yang akan dihapus, dan pointer bantu digunakan untuk menunjuk node sebelum node yang dihapus. - Pointer bantu akan digunakan untuk menunjuk ke nilai NULL. - Pointer bantu akan selalu bergerak bersama dengan pointer hapus tapi letak pointer bantu harus selalu dibelakang pointer hapus.

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

Ilustrasi:

null

bantu head
hapus

null

bantu head A B C
hapus

null

bantu head
hapus

C null bantu

head

Function untuk menghapus semua elemen Linked List


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

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

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.
A FFF1
head

B FFF2

C FFF3

D FFF4
tail

Inisialisasi LinkedList
TNode *head, *tail;
tail

Fungsi Inisialisasi LinkedList


void init(){ head = NULL; tail = NULL; }

head

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;

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

tail=baru; head->next=head; tail->next=tail; } else { baru->next = head; head = baru; tail->next = head; } cout<<"Data masuk\n"; }

Ilustrasi: 1. List masih kosong (head=tail=NULL)

head tail

2. Masuk data baru, misalnya 5


5
head baru head

3. Datang data baru, misalnya 20


20 5
head

baru

tail

20
baru

head tail

20

head baru

tail

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

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"; }

Ilustrasi: 1. List masih kosong (head=tail=NULL)

head tail

2. Masuk data baru, misalnya 5


5
head baru head

3. Datang data baru, misalnya 20


5 20

head

tail

baru

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

5
head

20

tail

baru

20

head

baru

tail

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<<b->data<<" "; b=b->next; }while(b!=tail->next); cout<<endl; } else cout<<"Masih kosong\n"; } A B C D

head

Pada prinsipnya sama dengan function tampil sebelumnya.

bantu

Function untuk menghapus data di depan


void hapusDepan(){ TNode *hapus; if (isEmpty()==0){ int d;

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

hapus = head; d = head->data; if(head != tail){ hapus = head; head = head->next; tail->next = head; delete hapus; }else{ head=NULL; tail=NULL; } cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n"; } A B C D

head

hapus

tail

head

hapus

tail

hapus

head

tail

- 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 head

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

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<<d<<" terhapus\n"; } else cout<<"Masih kosong\n"; }

Ilustrasi:
A B C D

head

tail

hapus

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

head

tail bantu hapus

head

tail bantu

hapus

- 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;

HANDOUT STRUKTUR DATA PRODI TEKNIK INFORMATIKA UKDW by Antonius Rachmat C, S.Kom

} }

- Menggunakan pointer bantu yang digunakan untuk bergerak sepanjang list, 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.

SOAL LATIHAN - Buatlah program lengkap dari semua algoritma dan function di atas dalam bentuk menu untuk menambah data, melihat data, dan menghapus data! - Buatlah function tambahan yang berguna untuk mencari data yang ada dalam linked list baik secara ber-Head maupun ber-Head dan Tail! - Buatlah function untuk menghapus data tertentu dalam linked list! - Buatlah penyisipan node setelah atau sebelum data tertentu.

NEXT
Double Linked List Non Circular

Anda mungkin juga menyukai