Anda di halaman 1dari 22

Struktur Data

LINKED LIST 
 
Linked List adalah sejumlah obyek yang dikaitkan atau dihubungkan 
satu  dengan  lainnya  sehingga  membentuk  list  (senarai).  Obyek 
tersebut merupakan gabungan beberapa elemen data (variabel) yang 
dijadikan  satu  kelompok  atau  structure  atau  record  (dibentuk 
dengan perintah struct). 
 
Contiguous List 
Contiguous  List  merupakan  List  yang  statis,  seperti  array  satu 
dimensi.  Array  satu  dimensi  merupakan  kumpulam  elemen‐elemen 
yang  alamatnya  saling  bersambung.  Dengan  int[5]  maka  disiapkan 
array satu dimensi dengan 5 elemen. 
Pengalokasian tempat dalam memory dengan cara array berdimensi 
satu  tersebut  merupakan  pengalokasian  yang  bersifat  statis. 
Pengalokasian  ini  dinamakan  statis  karena  selama  proses 
berlangsung  elemen  array  tidak  dapat  ditambah  ataupun  dikurangi. 
Array  ini  adalah  contiguous  list,  alamatnya  disebut  contiguous 
(bersambung/bersisian) 
 
Berikut bukti bahwa array alamatnya contiguous: 
 
#include<stdio.h>
#include<conio.h>

main()
{
int A[5];
int I;
for(I=0;I<=5;I++)
printf("\n%X", &A[I]);
getch();
}

Widodo
1
Strukktur Dataa

 
 
Terlih hat bahw wa alamatt array yaang dibuat bersellisih sam a, yaitu 4 4. 
 
LINKEED LIST 
 
Linked d List dap
pat digam mbarkan n sebagai berikut
 
 
  10      
    1
 
 
72      
    7
 
     
      25 
 
      31      
 
 
Pada  ilustrasi  di atas tterdapat  4 buah  obyek ya ang meruupakan ssimpul 
(nodee/vertex)  yang  dikaitkkan  sattu  deng gan  lai nnya.  Setiap 
S
simpu ul/node  tidak  dib buat  seccara  bersamaan  seperti  array,  namun 
n
dibuat satu peersatu, se ehingga bbersifat ddinamis.
 
Akan dipelajarri 4 macaam strukttur linked list: 
1. Lin near Singgle‐Linked List 
2. Lin near Dou uble‐Linked List 
3. Cirrcular Sin ngle‐Linkked List 
4. Cirrcular Do ouble‐Linnked List

Widoodo
2
Struktur Data
1. Linear Single‐Linked List 
 
First      Link/Next        Last 
 
       Info   
 
    25            10           31           72      
 
        ‐ 1 ‐             ‐  2 ‐      ‐ 3 ‐          ‐ 4 ‐ 
 
 
Keterangan: 
Pada ilustrasi di atas terdapat 4 simpul yaitu simpul no 1, 2, 3, 4. 
Setiap simpul terdapat 2 elemen, yaitu: 
INFO yang berisi data yang disimpan (tipe data disesuaikan). 
LINK  atau  NEXT  merupakan  pointer  (tipe  data  pointer)  yang 
menunjuk alamat simpul berikutnya. 
Simpul pertama ditunjuk oleh pointer First, simpul terakhir ditunjuk 
oleh pointer Last. 
 
Tahap  pertama  untuk  pembuatan  linked  list  adalah  dengan 
mendeklarasikan struktur yang akan digunakan: 
 
typedef struct Node
{ int INFO;
struct Node *LINK;
};
typedef struct Node Simpul;
Simpul *P, *FIRST, *LAST;

atau 
struct Simpul
{ int INFO;
struct Simpul *LINK;
};
Simpul *P, *FIRST, *LAST;
 
Inisialisasi 
Inisialisasi  merupakan  kondisi  awal  yang  menyatakan  Linked  List 
belum ada, yaitu dengan mengisi pointer FIRST dengan NULL. Pointer 

Widodo
3
Struktur Data
FIRST  digunakan  untuk  menunjuk  simpul  awal,  sehingga  jika  simpul 
awal belum ada FIRST akan menunjuk NULL (belum menunjuk simpul 
manapun). 
Jadi instruksi inisialisasi adalah: 
    FIRST=NULL 
 
Jika ditulis dalam fungsi: 
void AWAL()
{ FIRST=NULL;
}
 
Pembuatan Sebuah Simpul 
Instruksi untuk membuat sebuah simpul: 
 
P=(Simpul *) malloc(sizeof(Simpul));
 
Artinya  akan  dialokasikan  sebuah  area  yang  ukurannya  sebesar 
jumlah  byte  yang  digunakan  struktur  Simpul.  Jika  instruksi  tersebut 
berhasil,  maka  akan  terbentuk  sebuah  simpul  yang  alamatnya 
tersimpan dalam pointer P. 
         P 
                          P 
       
          INFO    LINK                 INFO     LINK 
 
                        Atau untuk menyingkat             
 
 
Fungsi untuk membuat sebuah simpul: 
 
void BUAT_SIMPUL(int X)
{ P = (Simpul *) malloc(sizaof(Simpul));
if(P!=NULL)
{
P->INFO=X;
}
else
printf(“Pembuatan simpul gagal”);
}
 

Widodo
4
Struktur Data
Perhatikan cara pemberian nama elemen: 
  P 
 
    INFO   LINK 
 
                
    P‐>LINK  
 
    P‐>INFO 
 
Pointer  P  memang  dipersiapkan  untuk  menunjuk  simpul  yang  akan 
dibuat.  P‐>INFO  maupun  P‐>LINK  di  atas,  dinamakan  demikian 
karena memang simpul tersebut ditunjuk oleh pointer P. 
 
Pembuatan Simpul Awal 
Sebelum membuat sebuah simpul menjadi simpul awal, periksa dulu 
isi pointer FIRST, jika isinya bukan NULL berarti pointer FIRST sudah 
menunjuk sebuah simpul di Linked List. 
 
void AWAL()
{ if(FIRST==NULL)
{
FIRST=P;
LAST=P;
P->LINK=NULL;
}
else
printf(“Linked List sudah ada”);
}

 
Ilustrasi prosesnya adalah sebagai berikut: 
Misalkan sudah terbentuk sebuah simpul dan nilai INFO diisi 15. 
 
 
    15       
 
      #1100 
 
   
  #1100                     15   
 
     P      FIRST      LAST    X 

Widodo
5
Struktur Data
atau 
 
     P 
 
    INFO    LINK 
 
    15         
 
 
Kemudian dengan perintah   FIRST=P; 
 
 
    15       
 
      #1100 
 
   
  #1100        #1100               15   
 
     P      FIRST      LAST    X 
 
 
Atau  
 
 
     FIRST    P 
 
         INFO    LINK 
 
    15         
 
 
Karena simpul ditunjuk oleh 2 buah pointer, maka nama elemennya 
menjadi 2 pula:  
P‐>INFO  atau  FIRST‐>INFO  isinya  15,  dan  P‐>LINK  atau  FIRST‐>LINK 
isinya belum diketahui. 
 
 
 
 
 

Widodo
6
Struktur Data
Selanjutnya dengan perintah  LAST=P; 
 
 
    15       
 
      #1100 
 
   
  #1100        #1100        #1100        15   
 
     P      FIRST      LAST    X 
 
Atau 
 
         LAST  FIRST  P 
 
           INFO    LINK 
 
    15         
 
 
 
Nama untuk tiap‐tiap elemennya pun bertambah 1 yaitu: 
LAST‐>INFO dan LAST‐>LINK. 
 
 
Terakhir dengan perintah  P-LINK=NULL; 
 
 
         LAST  FIRST  P 
 
           INFO    LINK 
 
    15         
 
 
         
 
Karena  baru  punya  satu  simpul  maka  simpul  ini  dianggap  juga 
sebagai simpul terakhir dan Link‐nya harus NULL yang berarti belum 
menunjuk pada simpul manapun. 

Widodo
7
Struktur Data
Insert Kanan (Akhir) 
Insert  kanan  adalah  menambahkan  simpul  baru  di  sebelah  kanan 
atau setelah simpul terakhir yang sudah ada. Syaratnya sudah harus 
ada Linked List dan simpul baru juga telah dibuat. 
 
         LAST  FIRST                      P 
 
           INFO    LINK            INFO    LINK 
 
    15              22         
 
          
 
  Kemudian disambung menjadi:         
 
              FIRST                  LAST     P 
 
           INFO    LINK            INFO    LINK 
 
    15              22        
 
 
 
 
Fungsi untuk proses insert kanan dapat dibuat dengan: 
 
void INSERT_KANAN()
{ if(LAST!=NULL)
{ LAST->LINK=P;
LAST=P;
P->LINK=NULL;
}
else
printf(“Linked List belum ada”);
}
 
 
 
 
 
 

Widodo
8
Struktur Data
Ilustrasi proses untuk insert kanan: 
 
LAST->LINK=P;
 
Perintah ini menyebabkan terhubungnya simpul bau ke dalam Linked 
List,  karena  LAST->LINK  di  arahkan  untuk  menunjuk  alamat  yang 
ditunjuk oleh pointer P. 
 
 
         LAST  FIRST                      P 
 
           INFO    LINK            INFO    LINK 
 
    15              22         
 
          
Untuk  menghubungkan  simpul  lama  dengan  simpul  baru  digunakan 
LAST->LINK=P;  bukan  FIRST->LINK=P;  karena  jika sudah  lebih  dari 
1  simpul,  misalnya  ada  3  simpul  maka  sebenarnya  posisi  yang 
terakhir akan terlihat LAST bukan FIRST. 
 
LAST=P;
 
Perintah ini akan memindahkan pointer LAST agar menunjuk alamat 
seperti yang ditunjuk oleh pointer P. 
              FIRST                  LAST     P 
 
           INFO    LINK            INFO    LINK 
 
    15              22        
 
 
 
P->LINK=NULL;
 
Perintah  ini  akan  mengisi  Link  simpul  terakhir  dengan  NULL.  Ini 
menjadi  perlu  karena  simpul  terakhir  harus  tidak/belum  menunjuk 
alamat simpul manapun. 
 

Widodo
9
Struktur Data
              FIRST                  LAST     P 
 
           INFO    LINK            INFO    LINK 
 
    15              22        
 
 
 
 
Insert Kiri (Awal) 
Insert  kanan  adalah  menambahkan  simpul  baru  di  sebelah  kiri  atau 
sebelum simpul pertama yang sudah dibuat. Syaratnya sudah harus 
ada Linked List dan simpul baru juga telah dibuat. 
 
        P          FIRST          LAST      
 
       INFO    LINK          INFO    LINK       INFO    LINK 
 
    51              15              22        
 
 
 
 
Fungsi untuk proses insert kiri dapat dibuat dengan: 
 
void INSERT_KIRI()
{ if(FIRST!=NULL)
{ P->LINK=FIRST;
FIRST=P;
}
else
printf(“Linked List belum ada”);
}
 
Ilustrasi proses untuk insert kiri: 
 
P->LINK=FIRST;
 
Perintah ini akan menghubungkan simpul baru ke simpul awal pada 
Linked List. 
 

Widodo
10
Struktur Data
        P          FIRST          LAST      
 
       INFO    LINK          INFO    LINK       INFO    LINK 
 
    51              15              22        
 
 
 
 
FIRST=P;
 
Perintah  ini  akan  menggeser  pointer  FIRST  ke  alamat  yang  ditunjuk 
oleh pointer P dan menunjuk pada simpul awal yang baru. 
 
        FIRST  P                LAST      
 
           INFO    LINK        INFO    LINK       INFO    LINK 
 
    51              15              22        
 
 
 
 
Insert Tengah  
Insert tengah adalah menambahkan simpul baru di antara dua buah 
simpul pertama yang sudah ada.  
 
              P 
             INFO   LINK 
      18         
 
                   Q               
 
           INFO    LINK        INFO    LINK        
 
    51              15         
 
         (7)        (8) 
 
 

Widodo
11
Struktur Data
Pada ilustrasi di atas, akan disisipkan sebuah simpul di antara simpul 
ke‐7 dan simpul ke‐8. Syaratnya simpul no.7 (simpul sebelum posisi 
simpul  baru  disisipkan)  harus  sudah  ditunjuk  oleh  sebuah  pointer, 
misalnya pointer Q. Agar pointer Q dapat menunjuk simpul nomor 7, 
maka dilakukan: 
 
Q=FIRST;
for(I=1;I<=6;I++)
Q=Q->LINK;
 
Sedangkan untuk melakukan insert tengah: 
 
void INSERT_TENGAH()
{ P->LINK=Q->LINK;
Q->LINK=P;
}
 
Ilustrasi proses untuk insert tengah: 
 
P->LINK=Q->LINK;
 
Perintah  ini  akan  menghubungkan  simpul  baru  ke  setelah  simpul 
baru tersebut. 
 
              P 
             INFO   LINK 
      18         
 
                   Q               
 
           INFO    LINK        INFO    LINK       
 
    51              15         
 
         (7)                 (8) 
 
 
 
 
 

Widodo
12
Struktur Data
Q->LINK=P;
 
Perintah ini akan menghubungkan simpul sebelumnya ke simpul baru 
pada Linked List. 
 
                    P 
                INFO   LINK 
      18         
 
                   Q         (8)      
 
           INFO    LINK        INFO    LINK       
 
    51              15         
 
         (7)                 (9) 
 
Akibatnya simpul baru menjadi simpul nomor 8 dan simpul nomor 8 
menjadi simpul nomor 9. 
 
 
Delete Kiri (Awal) 
Delete  kiri  adalah  menghapus  simpul  paling  kiri  atau  simpul  awal. 
Perintah untuk menghapus simpul di bahasa C adalah free(). 
 
        FIRST                          LAST      
 
       INFO    LINK    INFO    LINK  INFO    LINK         INFO   LINK 
 
    51              18              15              22        
 
 
 
 
Dari ilustrasi di atas akan dihapus simpul palig kiri yang berisi: 
FIRST‐>INFO=51. 
 
 
 

Widodo
13
Struktur Data
Cara melakukan delete kiri adalah: 
 
void DeleteKiri()
{ Q=FIRST;
FIRST=Q->LINK;
free(Q);
}

atau 
void DeleteKiri()
{ Q=FIRST->LINK;
free(FIRST);
FIRST=Q;
}
 
 
Ilustrasi proses untuk delete kiri: 
 
Q=FIRST;
 
 Q      FIRST                          LAST      
 
       INFO    LINK    INFO    LINK  INFO    LINK         INFO   LINK 
 
    51              18              15              22        
 
 
 
FIRST=Q->LINK;
 
Q           FIRST                     LAST      
 
       INFO    LINK    INFO    LINK  INFO    LINK         INFO   LINK 
 
    51              18              15              22        
 
 
 
 
 
 

Widodo
14
Struktur Data
free(Q);
 
           FIRST                     LAST      
 
               INFO    LINK  INFO    LINK         INFO   LINK 
 
    18              15              22        
 
 
 
Atau cara kedua: 
 
Q=FIRST->LINK;
 
       FIRST       Q                     LAST      
 
       INFO    LINK    INFO    LINK  INFO    LINK         INFO   LINK 
 
    51              18              15              22        
 
 
 
free(FIRST);
FIRST        Q                      LAST      
 
               INFO    LINK  INFO    LINK         INFO   LINK 
 
    18              15              22        
 
 
 
FIRST=Q;
 
FIRST     Q                      LAST      
 
               INFO    LINK  INFO    LINK         INFO   LINK 
 
    18              15              22        
 
 
 

Widodo
15
Struktur Data
 
Delete Kanan (Akhir) 
Delete kanan berarti akan menghapus simpul paling kanan (akhir). 
 
       FIRST                 Q           LAST      
 
       INFO    LINK    INFO    LINK  INFO    LINK         INFO   LINK 
 
    51              18              15              22        
 
      ( 1 )       ( 2 )          ( 3 )        ( 4 ) 
 
Syarat  bisa  dilakukan  delete  kanan  adalah  simpul  sebelum  simpul 
terakhir ditunjuk oleh pointer (misal pointer Q pada ilustrasi di atas). 
Cara menempatkan pointer Q agar menunjuk simpul sebelum simpul 
terakhir adalah: 
 
Q=FIRST;
while(Q->LINK!=LAST)
{Q=Q->LINK;}
 
Sedangkan untuk melakukan delete kanan: 
 
void DeleteKanan()
{ free(LAST);
LAST=Q;
LAST->LINK=NULL;
}
 
Ilustrasi proses untuk delete kanan: 
 
free(LAST);
 
      FIRST               Q           LAST      
 
       INFO    LINK    INFO    LINK  INFO    LINK          
 
    51              18              15         
 
 
 

Widodo
16
Struktur Data
LAST=Q;
 
      FIRST                  LAST     Q      
 
       INFO    LINK    INFO    LINK  INFO    LINK          
 
    51              18              15         
 
 
LAST->LINK=NULL;
 
      FIRST                  LAST     Q      
 
       INFO    LINK    INFO    LINK  INFO    LINK          
 
    51              18              15         
 
 
 
 
 
Delete Tengah 
Delete  tengah  berarti  menghapus  sebuah  simpul  yang  berada 
diantara dua simpul lain. 
 
      Q      
 
       INFO    LINK    INFO    LINK  INFO    LINK          
 
    51              18              15         
 
    ( 7 )      ( 8 )      ( 9 ) 
 
Pada  ilustrasi  di  atas  akan  dihapus  simpul  nomor  8.  Syarat  agar 
simpul  nomor  8  bisa  dihapus,  simpul  sebelumnya  harus  sudah 
ditunjuk  oleh  sebuah  pointer  (pada  ilustrasi  di  atas  ditunjuk  oleh 
pointer Q). Selain itu diperlukan satu lagi pointer pembantu (misal R). 
 
 
 

Widodo
17
Struktur Data
Pointer Q akan menunjuk simpul nomor 7 dengan cara: 
 
Q=FIRST;
for(I=1;I<=6;I++)
Q=Q->LINK;
 
Untuk menghapusnya dengan cara: 
 
void DeleteTengah()
{ R=Q->LINK;
Q->LINK=R->LINK;
free(R);
}
 
Atau 
 
Void DeleteTengah()
{ R=Q->LINK->LINK;
free(Q->LINK);
Q->LINK=R
}
 
Ilustrasi proses untuk delete kanan: 
 
R=Q->LINK;
 
      Q           R 
 
       INFO    LINK    INFO    LINK  INFO    LINK          
 
    51              18              15         
 
    ( 7 )      ( 8 )      ( 9 ) 
 
Q->LINK=R->LINK;
 
      Q           R    INFO  LINK 
 
       INFO    LINK         18             INFO    LINK          
 
    51              15         
 
    ( 7 )      ( 8 )      ( 9 ) 

Widodo
18
Struktur Data
 
free(R);
 
      Q           R   
 
       INFO    LINK          INFO    LINK          
 
    51              15         
 
    ( 7 )            ( 8 ) 
 
 
Atau dengan cara kedua: 
 
R=Q->LINK->LINK;
 
      Q                     R 
 
       INFO    LINK    INFO    LINK  INFO    LINK          
 
    51              18              15         
 
    ( 7 )      ( 8 )      ( 9 ) 
 
 
free(Q->LINK);
 
      Q                     R 
 
       INFO    LINK            INFO    LINK           
 
    51              15         
 
    ( 7 )            ( 8 ) 
 
 
 
 
 
 
 

Widodo
19
Struktur Data
Q->LINK=R;
 
      Q                     R 
 
       INFO    LINK            INFO    LINK           
 
    51              15         
 
    ( 7 )            ( 8 ) 
 
 
 
 
 
 
 
 
 
 
 
Contoh program insert kanan 
 
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

void BUAT_SIMPUL(int X);


void AWAL();
void Inisialisasi();
void InsertKanan();

typedef struct Node {


int INFO;
struct Node *LINK;
};
typedef struct Node Simpul;
Simpul *P, *FIRST, *LAST;
int X;

main()
{
int I;

Widodo
20
Struktur Data
Inisialisasi();

scanf("%i",&X);
BUAT_SIMPUL(X);

AWAL();

for(I=1;I<=3;I++)
{ scanf("%i", &X);
BUAT_SIMPUL(X);
InsertKanan();
}

getch();
}

void Inisialisasi()
{ FIRST=NULL;
LAST=NULL;
}

void BUAT_SIMPUL(int X)
{ P=(Simpul *) malloc(sizeof(Simpul));
if(P!=NULL) {
P->INFO=X;
}
else
printf("Pembuatan Simpul Gagal");
}

void AWAL()
{
if(FIRST==NULL)
{ FIRST=P;
LAST=P;
P->LINK=NULL;
}
else
printf("Linked List Sudah Ada");
}

void InsertKanan()
{
if(LAST!=NULL)
{ LAST->LINK=P;
LAST=P;
P->LINK=NULL;
}
else
printf("Linked List belum ada");
}

Widodo
21
Struktur Data

 
 
 
 
 
 
 
2.  
3.  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Widodo
22

Anda mungkin juga menyukai