Welcome To My blog hope you enjoy ^_^
Powered by Blogger.
RSS

BAB 2 : Link List Implementation 1

Selamat Pagi Semua balik lagi Bersama gue Aurum , Udah lama gak posting di blogger hehehe maap yah semua soalnya gue lagi sibuk banget hehehehe maklum lah anak Kuliah. 
Oke Tema kali ini berkaitan tentang Link List Implementation1 
Penasaran gak apa isinya?
Yuk Check Langsung dan Jangan Lupa Kasih komentar yah

Ada tau gak apa itu Link List?
yup benar jadi 
Linked List adalah suatu struktur data linier. Berbeda dengan array yang juga merupakan struktur data linier dan tipe data komposit, linked list dibentuk secara dinamik. Pada saat awal program dijalankan elemen linked list belum data. Elemen linked list (disebut node) dibentuk sambil jalan sesuai instruksi. Apabila setiap elemen array dapat diakses secara langsung dengan menggunakan indeks, sebuah node linked list diakses dengan menggunakan pointer yang mengacu (menunjuk) ke node tersebut.

 Linked List sering disebut juga Senarai Berantai 
- Linked List saling terhubung dengan bantuan variabel pointer 
- Masing-masing data dalam Linked List disebut dengan node (simpul) yang 
menempati alokasi memori secara dinamis dan biasanya berupa struct 
yang terdiri dari beberapa field. 

Single Linked List adalah sebuah LINKED LIST yang menggunakan sebuah variabel pointer saja untuk menyimpan banyak data dengan metode LINKED LIST, suatu daftar isi yang saling berhubungan.
Ilustrasi single LINKED LIST:

Pada gambar di atas, data terletak pada sebuah lokasi dalam sebuah memory, tempat yang disediakan memory untuk menyimpan data disebut node ? simpul, setiap node memiliki pointer ( penunjuk ) yang menunjuk ke node berikutnya sehingga terbentuk suatu untaian yang disebut single LINKED LIST. Bila dalam single LINKED LIST pointer hanya dapat bergerak ke satu arah saja, maju / mundur, kanan / kiri, sehingga pencarian datanya juga hanya satu arah saja.

Ada 2 Tipe Single Linked List yaitu
·         Single Linked List Circular
·         Single Linked List Non Circular 
1.     Single Linked List Circular
Single Linked List Circular 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. 
Circular : artinya pointer next-nya akan menunjuk pada dirinya sendiri sehingga berputar

Ilustrasi Single Linked List Circular 
- 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.

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 

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; 

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; 

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

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

“Bagaimana dengan penambahan di tengah?” 

MENAMPILKAN DATA 
Function untuk menampilkan isi single linked list 
void tampil(){ TNode *b; 
b = head; 
if(isEmpty()==0) 
do 
cout<data<<" "; 
b=b->next; 
while(b!=head); 
cout<<<"Masih kosong\n"; 

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

Single Link list :
1. buat struct
2. Isi

heterogen : Isinya bisa berbeda . 
contohnya : int value; struct tnode *next

Homogen : Sejenis dan isinya sama
contoh : int a[10]

Ada 2 memory:
1. Static Memory Allocation : boros memory
2. Maloc (Memory Allocation)

ada 3 tipe link List : 
1. Single Link List : hanya searah
2. Double Link List : bisa bolak - balik 
3. Multiple Link List : Bisa banyak arah

Perbedaan array dan link list
1. Ukuran 
2, Memory

Keuntungan array : 
1. berurutan dan cepan 
  • Karena menggunakan Static Memory Allocation
  • Maka array bisa di tulis [*a] + 2
Struct(Link List Single)
  • Berantakan (Random Aksess Memorynya Gak berurutan)
  • Memerlukan Pointer next
  • Ada awal (Head) dan ada akhir(Tail)
  • Maka link list bernahaya jika putus atau error karena tidak dapat mengkoneksikan ke link list yang lain
Struct data *head menunjukan data pertama

ada 2 cara menentukan TAIL(Akhir):
1. Bikin Tail(akhir) dari Link list
2. Dilihat Apakah Tail udah NULL

Kalau data banyak dan dicari dari awal - akhir akan repot bila menggunakan single link list maka cara memudahkannya adalah dengan menggunakan Double Link List , Jadi Data banyak bisa 2 sekaligus Jalan.

cara buat Link list : Dasarnya bikin table

Single Link list di pake saat running . contohnya : Saat kita menjalankan komputer

Cara Bikin Single Link list: 
1. Bikin satu block yang ada nextnya
2. Pesan menggunakan Malloc
  • ada 3 cara buat menggunakan malloc : 
  • 1. void push 
  • 2. insert 
  • 3. void pop(delete)
Push(Masukin Data) terdiri dari 3 macam : 
1. Push Depan
  • Cara membikin Push depan : 
  • 1. Data di check apakah udah ada atau belum (head = tail = NULL)
Contoh codding :
  • Push depan {
    IF(head == NULL){
    curr = (struct * node) malloc (sizeof(struct * node))
    }
    }

  • 2. Setelah bikin allokasi kita kasih nilai : nilai bisa masukin nilainya
  • malloc butuh bintang dan ukuran
  • malloc : Mengembalikan nilai

  • 3. head = tail = node : Masukin / Membua head
  •  curr ; tail -> next = NULL
  • di kasih null biar gak kemana - mana

  • 4. Push depan :
  • caranya : Data udah ada 1 
Codingannya :
Curr -> next = Head;  // Current yang ke next = head
head = Curr; // head pindah ke current

2. Push Belakang
3. Push Tengah
contoh codingannya : 
for(curr ........){
curr -> next < 5;
temp -> next = curr;
//atau bisa pake temp 2
temp 2 = temp -> next;
// gunanya temp ke next : jadi curr bisa di posisikan ke temp 2
curr -> next = temp 2;
}
catatan : 
head : Awal
Tail : Akhir
curr : Dimana aja letaknya
next ->null


Pop (delete) terdiri dari 3 macam :
1. Pop depan
head diselamatin 
head = head -> next
free curr

kalau tail :
curr = curr -> next;
curr -> next = del -> next;
free(del);


2. Pop Belakang
3. Pop Tengah

Double Link List :
Supaya incase didelete bisa mundur
berurutan, dll

Circular Single Link List : 
ketika butuh yang muter - muter , tergantung header link list beda . 
contohnya : dalam kehidupan kita sehari - hari 




2.  Single Linked List Non Circular
Pengertian: 
Single : artinya field pointer-nya hanya satu buah saja dan satu arah. 
Linked List : artinya node-node tersebut saling terhubung satu sama lain. 
Ilustrasi Linked List 
- 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 NULL yang akan 
digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list

Contoh program single linked list non circular tambah list di depan :
# include<stdio.h>
# include<stdlib.h>
# include<conio.h>
# include<iostream.h>
# include<ctype.h>
# include<string.h>

struct simpul
{
            int angka;
            struct simpul*berikut;
} ;

struct simpul *awal=NULL;
int bil;

void tambah_list_didepan(int info);
void isi_list();
void tampil_list();
void hapus_list();

void main ()
{

            clrscr();
            isi_list();
            clrscr();
            tampil_list();
            hapus_list();
            getch();
}
void tambah_list_didepan(int info)
{
            struct simpul *baru;
            baru=(struct simpul *)malloc(sizeof(struct simpul));
            baru->angka=info;

            baru->berikut=awal;


            awal=baru;
}

void isi_list()
{
            char jawab;
            do
            {
            clrscr();
            cout<<"\ninput bilangan :";
            cin>>bil;
            tambah_list_didepan(bil);
            cout<<"\ntambah data Y/T :"  ;
            cin>>jawab;
            }
            while (toupper(jawab)!='T');

}
void tampil_list()
{
            struct simpul* baca;
            int i;
            baca=awal;
            i=1;

            while(baca!=NULL)

            {
                        cout<<"\nbilangan ke-"<<i<<"yang dibaca :"<<baca->angka;
                        i++;
                        baca=baca->berikut;
            }

}

void hapus_list()

{
            struct simpul*hapus;
            hapus=awal;
            while(hapus!=NULL)
            {
                        awal=hapus->berikut;
                        free(hapus);
                        hapus=awal;
            }
}

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS