SlideShare a Scribd company logo
BAB 6
                            SINGLY LINKED LIST
                        (SENARAI BERKAIT TUNGGAL)


1. Tujuan Instruksional Umum
    a. Mahasiswa dapat melakukan perancangan aplikasi menggunakan struktur
       Linked List (Senarai Berkait)
    b. Mahasiswa mampu melakukan analisis pada algoritma Linked List yang dibuat
    c. Mahasiswa mampu mengimplementasikan algoritma Linked List pada sebuah
       aplikasi secara tepat dan efisien
2. Tujuan Instruksional Khusus
    a. Mahasiswa dapat menjelaskan mengenai Linked List
    b. Mahasiswa dapat membuat dan mendeklarasikan Abstraksi Tipe Data Linked
       List
    c. Mahasiswa mampu menerapkan operasi Single Linked List Non Circular :
       Insert, update, dan delete
    d. Mahasiswa mampu menerapkan operasi Single Linked List Circular : Insert,
       update, dan delete

Pengertian Linked List
        Salah satubentuk struktur data yang berisi kumpulan data yang tersusun secara
sekuensial, saling bersambungan, dinamis dan terbatas adalah senarai berkait (linked
list). Suatu senarai berkait (linked list) adalah suatu simpul (node) yang dikaitkan
dengan simpul yang lain dalam suatu urutan tertentu. Suatu simpul dapat berbentuk
suatu struktur atau class. Simpul harus mempunyai satu atau lebih elemen struktur atau
class yang berisi data.
        Secara teori, linked list adalah sejumlah node yang dihubungkan secara linier
dengan bantuan pointer. Dikatakan singly (single) linked apabila hanya ada satu pointer
yang menghubungkan setiap node. Singly artinya field pointer-nya hanya satu buah saja
dan satu arah
        Senarai berkait adalah struktur data yang paling dasar. Senarai berkait terdiri
atas sejumlah unsur-unsur dikelompokkan, atau terhubung, bersama-sama di suatu deret
yang spesifik. Senarai berkait bermanfaat di dalam memelihara koleksi-koleksi data,
yang serupa dengan array/larik yang sering digunakan. Bagaimanapun juga, senarai
berkait memberikan keuntungan-keuntungan penting yang melebihi array/larik dalam
banyak hal. Secara rinci, senarai berkait lebih efisien di dalam melaksanakan
penyisipan-penyisipan dan penghapusan-penghapusan. Senarai berkait juga
menggunakan alokasi penyimpanan secara dinamis, yang merupakan penyimpanan
yang dialokasikan pada runtime. Karena di dalam banyak aplikasi, ukuran dari data itu
tidak diketahui pada saat kompile, hal ini bisa merupakan suatu atribut yang baik juga.
Setiap node akan berbentuk struct dan memiliki satu buah field bertipe struct yang
sama, yang berfungsi sebagai pointer. Dalam menghubungkan setiap node, kita dapat
menggunakan cara first-create-first-access ataupun first-create-last-access. Yang
berbeda dengan deklarasi struct sebelumnya adalah satu field bernama next, yang
bertipe struct tnode. Hal ini sekilas dapat membingungkan. Namun, satu hal yang jelas,
variabel next ini akan menghubungkan kita dengan node di sebelah kita, yang juga
bertipe struct tnode. Hal inilah yang menyebabkan next harus bertipe struct tnode.



                                                                                     1
Senarai berkait tunggal (Singly Linked List)
       Senarai berkait yang paling sederhana, di mana unsur-unsur terhubung oleh
suatu pointer. Struktur ini mengizinkan senarai dilintasi dari elemen pertama sampai
elemen terakhir.

Senarai berkait ganda (Doubly Linked List)
       Senarai berkait di mana unsur-unsur yang terhubung oleh dua pointer sebagai
gantinya. Struktur ini mengizinkan senarai untuk dilintasi kedua-duanya secara maju
mundur.

Senarai sirkular (Circular List)
        Senarai berkait di mana elemen yang terakhir terhubung dengan elemen yang
pertama sebagai ganti set ke NULL. Struktur ini mengizinkan senarai untuk dilintasi
secara lingkar.


Abstraksi Tipe Data Singly Linked List Non Circular
        Pembuatan struct bernama tnode berisi 2 field, yaitu field data bertipe integer
dan field next yang bertipe pointer dari tnode.

Deklarasi node dengan struct
       struct tnode
       {
          int data;
          struct tnode *next;
       }                               Gambar 1. Sebuah node pada Singly Linked List

        Asumsikan kita memiliki sejumlah node yang selalu menoleh ke sebelah dalam
arah yang sama. Atau, sebagai alat bantu, Anda bisa mengasumsikan beberapa orang
yang bermain kereta api. Yang belakang akan memegang yang depan, dan semuanya
menghadap arah yang sama. Setiap pemain adalah node. Dan tangan pemain yang
digunakan untuk memegang bahu pemain depan adalah variabel next. Sampai di sini,
kita baru saja mendeklarasikan tipe data dasar sebuah node.
        Selanjutnya, kita akan mendeklarasikan beberapa variabel pointer bertipe struct
tnode. Beberapa variabel tersebut akan kita gunakan sebagai awal dari linked list, node
aktif dalam linked list, dan node sementara yang akan digunakan dalam pembuatan node
di linked list. Berikan nilai awal NULL kepada mereka. Deklarasi node untuk beberapa
keperluan, seperti berikut ini:

       struct tnode *head=NULL, *curr=NULL, *node=NULL;

Dengan demikian, sampai saat ini, telah dimiliki tiga node. Satu sebagai kepala (head),
satu sebagai node aktif dalam linked list (curr) dan satu lagi node sementara (node).
        Sekarang telah siap untuk membuat singly linked list. Untuk itu, akan
dimasukkan nilai tertentu sebagai nilai untuk field data dengan cara melakukan
perulangan sehingga campur tangan user tidak diperlukan.
        Seperti yang diungkapkan sebelumnya, bahwa akan dibuat Singly Linked List
(SLL) dengan cara first-create-first-access. Dengan cara ini, node yang dibuat pertama
akan menjadi head. Node-node yang dibuat setelahnya akan menjadi node-node




                                                                                       2
pengikut. Untuk mempermudah pengingatan, ingatlah gambar anak panah yang
mengarah ke kanan. Head akan berada pada pangkal anak panah, dan node-node
berikutnya akan berbaris ke arah bagian anak panah yang tajam.




                            Gambar 2 Singly Linked List
       Apabila diperhatikan, setiap node memiliki petunjuk untuk node sebelahnya.
Bagaimana dengan node terakhir? Akan diberikan nilai NULL. Dengan demikian, setiap
node kebagian jatah.

       int i;
       for (i=0; i<5; i++)
       {
             node = (struct tnode *)
             malloc (sizeof(struct tnode));
             node -> data = i;
             if (head == NULL)
             {
                   head = node;
                   curr = node;
             }else
             {
                   curr -> next = node;
                   curr = node;
             }
       }
       curr -> next = NULL;

       Berikut adalah penjelasan kode-kode pembuatan singly linked list tersebut.
Pertama-tama, akan dibuat perulangan dari 0 sampai 4, yang dimaksudkan untuk
membuat lima buah node yang masing-masing field data nya berisikan nilai dari 0
sampai 4. Pembuatan node dilakukan dengan fungsi malloc().

       for (i=0; i<5; i++)
       {
       node = (struct tnode *)
       malloc (sizeof(struct tnode));
       node -> data = i;
       ...
       ...
       }

Setelah itu, perlu dibuat node dan penghubung. Pertama-tama, akan diuji apakah head
bernilai NULL. Kondisi head bernilai NULL hanya terjadi apabila belum dimiliki satu
node pun. Dengan demikian, node tersebut akan dijadikan sebagai head. Node aktif
(curr), juga kita dapat dari node tersebut.
         Sekarang, bagaimana kalau head tidak bernilai NULL alias telah dimiliki satu
atau lebih node? Yang pertama dilakukan adalah menghubungkan pointer next dari
node aktif (curr) ke node yang baru saja dibuat. Dengan demikian, baru saja dibuat
penghubung antara rantai lama dengan mata rantai baru. Atau, dalam permainan kereta
api, pemain paling depan dalam barisan lama akan menempelkan tangannya pada bahu



                                                                                   3
pemain yang baru bergabung. Node aktif (curr) kemudian dipindahkan ke node yang
baru dibuat.
       if (head == NULL)
       {
          head = node;
          curr = node;
       }




                                      Gambar 3 Membuat elemen pertama SLL
       else
       {
         curr->next=node;
         curr = node;
       }




                                Gambar 4. Penambahan elemen dibelakang SLL

Setelah semuanya dibuat, sudah saatnya bagi kita untuk menghubungkan pointer next
untuk mata rantai terakhir ke NULL.

       curr -> next = NULL;

Dan selamat! Singly linked list baru saja diciptakan. Ada yang terlupa? Ada. Bagaimana
kita tahu bahwa linked list yang kita ciptakan adalah linked list yang benar? Salah satu
cara untuk mengetahuinya adalah dengan mencetak field x untuk semua node. Dari head
sampai node terakhir.

       curr = head;
       while (curr != NULL)
       {
       printf(“%d “, curr -> data);
       curr = curr -> next;
       }
       printf(“n”);

Pertama-tama, kita meletakkan node aktif (curr) ke posisi head. Setelah itu, kita akan
pindahkan kunjungi satu per satu node dengan memindahkan node aktif (curr) ke posisi
sebelahnya. Semua kunjungan tersebut akan kita lakukan apabila node aktif (curr) tidak
menemui NULL. Anda mungkin ingin menambahkan pemanggilan free() untuk
melakukan dealokasi.
Kode selengkapnya:

       #include <stdio.h>
       #include <stdlib.h>
       int main()
       {
             struct tnode
             {
                   int data;
                   struct tnode *next;
             };
             struct tnode *head=NULL,




                                                                                      4
*curr=NULL, *node=NULL;
              int i;
              for (i=0; i<5; i++)
              {
                    node = (struct tnode *)
                    malloc (sizeof(struct tnode));
                    node -> data = i;
                    if (head == NULL)
                    {
                          head = node;
                          curr = node;
                    }else
                    {
                          curr -> next = node;
                          curr = node;
                    }
              }
              curr -> next = NULL;
              curr = head;
              while (curr != NULL)
              {
                    printf(“%d “, curr -> data);
                    curr = curr -> next;
              }
              printf(“n”);
              free();
              return 0;
       }

Abstraksi Tipe Data Singly Linked List Circular
        Hampir sama dengan singly linked list non circular, bahwa dibutuhkan sebuah
kait untuk menghubungkan node-node data yang ada, dimana pada node terakhir atau
tail yang semula menunjukkan NULL diganti dengan menunjuk ke kepala atau head.
Dimana inisialisasi senarai berkait tunggal sirkular menggunakan struc adalah sebagai
berikut:
Deklarasi Singly Linked List Circular

       Struct tnode
       {
           int data;
           tnode *next;
       };
       void main()
       {
           head = new tnode;                 Gambar 5. Singly Linked List circular
           head->next = head;
       }

Menambah node dan membuat tail dari singly linked list circular

Deklarasi penambahan node baru
       Void main()
       {
       node = new tnode;
       tail = new tnode;
       node->next = head->next;
       head->next = node;
       tail = node;
       }
                                              Gambar 6. Penambahan Node baru



                                                                                     5
Menyisipkan Node baru




                          Gambar 7 Menyisipkan Node Baru

Deklarasi menyisipkan node baru menggunakan sintak berikut:

       Void main()
       {
             node = new tnode;
             node->next = head->next;
             head->next = node;
       }

Menghapus Node dari Singly Linked List Circular




                        Gambar 8. Menghapus node dari SLLC

Deklarasi menghapus node dari singly linked list circular, menggunakan sintaks berikut:

       Void main()
       {
             hapus = new tnode;
             if( head != tail)
             {
                   hapus = head;
                   head = head->next;
                   tail->next = head;
                   delete hapus;
             }else
             {
                   head = NULL;
                   tail = NULL;




                                                                                     6
}
      }

Contoh Soal Singly Linked List Circular dengan menggunakan bahasa C++ dan
berkerja pada kompiler Borland C++.
      #include <windows.h>
      #include <iostream>
      #include <conio.h>
      using namespace std;

      class CL_list
      {
         private:
            struct node
            {
                  int data;
                  node *link;
            };
            struct node *p;
         public:
            CL_list();
            CL_list(CL_list& l);
            ~CL_list();
            void add(int);
            void del();
            void addatbeg(int);
            void display();
            void slideshow(float,int,int);
            int count();
            void wait(float);
            bool operator ==(CL_list);
            bool operator !=(CL_list);
            void operator =(CL_list);
      };
          CL_list::CL_list()
          {
             p=NULL;
          }
          CL_list::CL_list(CL_list& l)
          {
             node *x;
             p=NULL;
             x=l.p;
             if(x==NULL)
                   return;
             for(int i=1;i<=l.count();i++)
             {
                   add(x->data);
                x=x->link;
             }
          }
          CL_list::~CL_list()
          {
             node *q,*t;
             q=p;
             t=p;
             if(p==NULL)
                   return;
             while(q->link!=t)
             {
                   p=q;
                q=q->link;
                delete p;
             }
             p=q;



                                                                       7
delete p;
}
void CL_list::add(int n)
{
   if(p==NULL)
   {
          node *q;
      q=new node;
      q->data=n;
      q->link=q;
      p=q;
      return;
   }
   node *q;
   q=p;
   while(q->link != p)
         q=q->link;

   node *t;
   t=new node;
   t->data=n;
   t->link=p;
   q->link=t;
}
void CL_list::display()
{
   if(p==NULL)
   {
         cout<<"EMPTY LISTn";
      return;
   }
   node *q;
   q=p;
   for(int i=1;i<=this->count();i++)
   {
          cout<<q->data<<endl;
      q=q->link;
   }
}

int CL_list::count()
{
   node *q;
   q=p;
   int c=0;
   if(p==NULL)
         return 0;
   else
         c++;
   while(q->link != p)
   {
      c++;
      q=q->link;
   }
   return c;
}

void CL_list::del()
{
   if(p==NULL)
         return;
   if(p->link==p)
   {
         p=NULL;
   }
   else
   {




                                       8
node *q;
   q=p;
   while(q->link != p )
         q=q->link;
   q->link=p->link;
   q=p;
   p=(q->link == NULL ? NULL : p->link);
   delete q;
   }
}
void CL_list::addatbeg(int n)
{
   node *q,*t;
   q=p;
   while(q->link!=p)
         q=q->link;

   t=new node;
   t->data=n;
   t->link=p;
   q->link=t;
   p=t;
}
void CL_list::slideshow(float dlay,int x,int y)
{
 /* if(p==NULL)
   {
      gotoxy(x,y);
         cout<<"EMPTY LISTn";
      return;
   }
   node *q;
   q=p;
   while(!kbhit())
   {
      gotoxy(x,y);
      cout<<"               ";
      gotoxy(x,y);
      cout<<q->data;
      wait(dlay);
      q=q->link;
   }*/
}

void CL_list::wait(float t)
{
   long time=GetTickCount()+(t*1000L);
   while(GetTickCount()<=time)
   {
   /*        WAIT !!! */
   }
}

bool CL_list::operator ==(CL_list t)
{
   if(t.p==NULL && p==NULL)
         return 1;

   if(this->count() != t.count())
         return 0;
   node *q;
   q=p;
   bool flag;
   flag=1;
   node *a;
   a=t.p;




                                                  9
for(int i=1;i<=count();i++)
               {
                     if(a->data!=q->data)
                    flag=0;
                  a=a->link;
                  q=q->link;
               }
               if(a->data!=q->data)
                     flag=0;
               return flag;
           }

           bool CL_list::operator !=(CL_list t)
           {
              return !(this->operator==(t));
           }


           int main()
           {

               CL_list a;
               a.add(1);
               a.add(2);
               a.add(3);
               a.add(4);
               a.addatbeg(128);
               a.del(); // 128 is deleted
               cout<<"nLIST DATA:n";
               a.display();

               CL_list b=a;
               if(b!=a)
                     cout<<endl<<"NOT EQUAL"<<endl;
               else
                     cout<<endl<<"EQUAL"<<endl;
               a.slideshow(1,13,13);
               return 0;
       }
Soal
        Buatlah program Singly Linked List Circular yang flesibel dan dinamis. Dimana
pengguna dapat menambah node baru beserta datanya, membaca semua data pada
senarai, menghapus node dengan data yang ditentukan oleh pengguna.

Daftar Rujukan
   1. Abdul Kadir. 1991. Pemrograman Dasar Turbo C untuk IBM PC. Yogyakarta:
       Penerbit Andi
   2. Andri Kristanto. 2003. Struktur Data dengan C++. Yogyakarta: Graha Ilmu
   3. Antonius Rachmat C. Handout Struktur Data. Prodi Teknik Informatika
       Universitas Kristen Duta Wacana
   4. Karve, Sanchit. Basic Data Structures in C++. www.dreamincode.net /forums
       /index.php
   5. Noprianto. 2004. Linked List pada C. www.infolinux.web.id




                                                                                  10

More Related Content

What's hot

Bab 7 double_linked_list
Bab 7 double_linked_listBab 7 double_linked_list
Bab 7 double_linked_list
arii_manroe
 
Resume praktikum 5__linked_list
Resume praktikum 5__linked_listResume praktikum 5__linked_list
Resume praktikum 5__linked_list
Deprilana Ego Prakasa
 
Algoritma dan Struktur Data (Python) - Struktur Data
Algoritma dan Struktur Data (Python) - Struktur DataAlgoritma dan Struktur Data (Python) - Struktur Data
Algoritma dan Struktur Data (Python) - Struktur Data
AndiNurkholis1
 
Algoritma dan Struktur Data - list
Algoritma dan Struktur Data - listAlgoritma dan Struktur Data - list
Algoritma dan Struktur Data - list
Georgius Rinaldo
 
Prakt modul 9 sym kriptografi
Prakt modul 9 sym kriptografiPrakt modul 9 sym kriptografi
Prakt modul 9 sym kriptografiKeisha Khairani
 
Modul 3 strukdat
Modul 3 strukdatModul 3 strukdat
Modul 3 strukdat
Vincentius Kristanto
 
Laporan praktikum modul ix
Laporan praktikum modul ixLaporan praktikum modul ix
Laporan praktikum modul ix
Devi Apriansyah
 
Algoritma dan Struktur Data - List
Algoritma dan Struktur Data - ListAlgoritma dan Struktur Data - List
Algoritma dan Struktur Data - List
KuliahKita
 
Pertemuan V
Pertemuan VPertemuan V
Pertemuan V
Putra Andry
 
Implementasi queue
Implementasi queueImplementasi queue
Implementasi queue
Rhe Dwi Yuni
 
FUNGSI – FUNGSI DALAM MYSQL
FUNGSI – FUNGSI DALAM MYSQLFUNGSI – FUNGSI DALAM MYSQL
FUNGSI – FUNGSI DALAM MYSQLIbrahim Naki
 
Fungsi Fungsi Di MySQL
Fungsi Fungsi Di MySQLFungsi Fungsi Di MySQL
Fungsi Fungsi Di MySQL
Achmad Solichin
 

What's hot (20)

Bab 7 double_linked_list
Bab 7 double_linked_listBab 7 double_linked_list
Bab 7 double_linked_list
 
Tistrukdat8 2
Tistrukdat8 2Tistrukdat8 2
Tistrukdat8 2
 
Pertemuan 1 revisijan2013-mhs
Pertemuan 1 revisijan2013-mhsPertemuan 1 revisijan2013-mhs
Pertemuan 1 revisijan2013-mhs
 
11
1111
11
 
Resume praktikum 5__linked_list
Resume praktikum 5__linked_listResume praktikum 5__linked_list
Resume praktikum 5__linked_list
 
Tistrukdat8 1
Tistrukdat8 1Tistrukdat8 1
Tistrukdat8 1
 
Linkedlist
LinkedlistLinkedlist
Linkedlist
 
Algoritma dan Struktur Data (Python) - Struktur Data
Algoritma dan Struktur Data (Python) - Struktur DataAlgoritma dan Struktur Data (Python) - Struktur Data
Algoritma dan Struktur Data (Python) - Struktur Data
 
Modul 2
Modul 2Modul 2
Modul 2
 
Algoritma dan Struktur Data - list
Algoritma dan Struktur Data - listAlgoritma dan Struktur Data - list
Algoritma dan Struktur Data - list
 
Prakt modul 9 sym kriptografi
Prakt modul 9 sym kriptografiPrakt modul 9 sym kriptografi
Prakt modul 9 sym kriptografi
 
Modul 3 strukdat
Modul 3 strukdatModul 3 strukdat
Modul 3 strukdat
 
Laporan praktikum modul ix
Laporan praktikum modul ixLaporan praktikum modul ix
Laporan praktikum modul ix
 
Algoritma dan Struktur Data - List
Algoritma dan Struktur Data - ListAlgoritma dan Struktur Data - List
Algoritma dan Struktur Data - List
 
Tistrukdat7
Tistrukdat7Tistrukdat7
Tistrukdat7
 
Pertemuan V
Pertemuan VPertemuan V
Pertemuan V
 
Implementasi queue
Implementasi queueImplementasi queue
Implementasi queue
 
Laporan tugas struktur data
Laporan tugas struktur dataLaporan tugas struktur data
Laporan tugas struktur data
 
FUNGSI – FUNGSI DALAM MYSQL
FUNGSI – FUNGSI DALAM MYSQLFUNGSI – FUNGSI DALAM MYSQL
FUNGSI – FUNGSI DALAM MYSQL
 
Fungsi Fungsi Di MySQL
Fungsi Fungsi Di MySQLFungsi Fungsi Di MySQL
Fungsi Fungsi Di MySQL
 

Viewers also liked

Linked List dalam Struktur Data
Linked List dalam Struktur DataLinked List dalam Struktur Data
Linked List dalam Struktur Data
Fajar Sany
 
Algoritma dan Struktur Data
Algoritma dan Struktur DataAlgoritma dan Struktur Data
Algoritma dan Struktur Data
As Faizin
 
Struktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listStruktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listSunarya Marwah
 
Linked list
Linked listLinked list
Linked list
Rista Fuji
 
Jurnal kecerdasan buatan
Jurnal kecerdasan buatanJurnal kecerdasan buatan
Jurnal kecerdasan buatan
Nasri Nasri
 
Struktur data pertemuan 1 & 2
Struktur data   pertemuan 1 & 2Struktur data   pertemuan 1 & 2
Struktur data pertemuan 1 & 2biedoen
 
Pemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasPemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi Berkas
KuliahKita
 
Class dan object
Class dan objectClass dan object
Class dan objectHardini_HD
 
Sd pertemuan 5 & 6
Sd   pertemuan 5 & 6Sd   pertemuan 5 & 6
Sd pertemuan 5 & 6
biedoen
 
Sd pertemuan 3 & 4 (edited)
Sd   pertemuan 3 & 4 (edited)Sd   pertemuan 3 & 4 (edited)
Sd pertemuan 3 & 4 (edited)
biedoen
 
Algoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan DestruktorAlgoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan Destruktor
KuliahKita
 
Linked List
Linked ListLinked List
Linked List
said zulhelmi
 
02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo
JinTaek Seo
 
9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circularHitesh Wagle
 
Predavanja 06 Konstruktori i destruktori
Predavanja 06  Konstruktori i destruktoriPredavanja 06  Konstruktori i destruktori
Predavanja 06 Konstruktori i destruktori
Goran Igaly
 
Stack atau tumpukan
Stack atau tumpukanStack atau tumpukan
Stack atau tumpukan
Tenia Wahyuningrum
 
Gerbang Logika Dasar
Gerbang Logika DasarGerbang Logika Dasar
Gerbang Logika Dasar
Arif Hakim
 
Stack
StackStack

Viewers also liked (20)

Linked List dalam Struktur Data
Linked List dalam Struktur DataLinked List dalam Struktur Data
Linked List dalam Struktur Data
 
circular linked list
circular linked listcircular linked list
circular linked list
 
Algoritma dan Struktur Data
Algoritma dan Struktur DataAlgoritma dan Struktur Data
Algoritma dan Struktur Data
 
Struktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listStruktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked list
 
Linked list
Linked listLinked list
Linked list
 
Jurnal kecerdasan buatan
Jurnal kecerdasan buatanJurnal kecerdasan buatan
Jurnal kecerdasan buatan
 
Struktur data pertemuan 1 & 2
Struktur data   pertemuan 1 & 2Struktur data   pertemuan 1 & 2
Struktur data pertemuan 1 & 2
 
Pemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasPemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi Berkas
 
Class dan object
Class dan objectClass dan object
Class dan object
 
Sd pertemuan 5 & 6
Sd   pertemuan 5 & 6Sd   pertemuan 5 & 6
Sd pertemuan 5 & 6
 
Sd pertemuan 3 & 4 (edited)
Sd   pertemuan 3 & 4 (edited)Sd   pertemuan 3 & 4 (edited)
Sd pertemuan 3 & 4 (edited)
 
Algoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan DestruktorAlgoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan Destruktor
 
Linked List
Linked ListLinked List
Linked List
 
02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo
 
9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circular
 
Predavanja 06 Konstruktori i destruktori
Predavanja 06  Konstruktori i destruktoriPredavanja 06  Konstruktori i destruktori
Predavanja 06 Konstruktori i destruktori
 
Stack atau tumpukan
Stack atau tumpukanStack atau tumpukan
Stack atau tumpukan
 
Gerbang Logika Dasar
Gerbang Logika DasarGerbang Logika Dasar
Gerbang Logika Dasar
 
Stack
StackStack
Stack
 
Classes and objects
Classes and objectsClasses and objects
Classes and objects
 

Similar to 5 6 single-linked_list

MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docxMAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
Dikicandra6
 
Persentasi linked list
Persentasi linked listPersentasi linked list
Persentasi linked list
Irsyad Casanova
 
Persentasi linked list
Persentasi linked listPersentasi linked list
Persentasi linked list
Irsyad Casanova
 
MAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docxMAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docx
Dikicandra6
 
Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3azmi007
 
3 Linked List
3   Linked List3   Linked List
3 Linked List
ahmad haidaroh
 
Linked list
Linked listLinked list
Linked list
Tenia Wahyuningrum
 
Algorithms and Data Structures
 Algorithms and Data Structures Algorithms and Data Structures
Algorithms and Data Structures
Noval C. Kesuma
 
Materi linked list dan bubble sort
Materi linked list dan bubble sortMateri linked list dan bubble sort
Materi linked list dan bubble sortYunan Helmi Nasution
 
SINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptxSINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptx
legiafatah
 
Pertemuan 3.pptx
Pertemuan 3.pptxPertemuan 3.pptx
Pertemuan 3.pptx
jonamanalu
 
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docxMAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
Dikicandra6
 
(Adam nelvin) quiz dan jawaban teori algo dan struktur data
(Adam nelvin) quiz dan jawaban teori algo dan struktur data(Adam nelvin) quiz dan jawaban teori algo dan struktur data
(Adam nelvin) quiz dan jawaban teori algo dan struktur data
Mauludin Ahmad
 
Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)
Citra Kapindo
 
Struktur data
Struktur dataStruktur data
Struktur data
yusriren20
 
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTOPOWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
Amalia Puspita Sari
 
Sistem operasi - 10 [Manajemen Memori]
Sistem operasi - 10 [Manajemen Memori]Sistem operasi - 10 [Manajemen Memori]
Sistem operasi - 10 [Manajemen Memori]
beiharira
 

Similar to 5 6 single-linked_list (20)

Stack with linked list(algodat)
Stack with linked list(algodat)Stack with linked list(algodat)
Stack with linked list(algodat)
 
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docxMAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
 
Persentasi linked list
Persentasi linked listPersentasi linked list
Persentasi linked list
 
Persentasi linked list
Persentasi linked listPersentasi linked list
Persentasi linked list
 
MAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docxMAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docx
 
Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3
 
3 Linked List
3   Linked List3   Linked List
3 Linked List
 
Linked list
Linked listLinked list
Linked list
 
Algorithms and Data Structures
 Algorithms and Data Structures Algorithms and Data Structures
Algorithms and Data Structures
 
Materi linked list dan bubble sort
Materi linked list dan bubble sortMateri linked list dan bubble sort
Materi linked list dan bubble sort
 
SINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptxSINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptx
 
Linked list
Linked listLinked list
Linked list
 
Pertemuan 3.pptx
Pertemuan 3.pptxPertemuan 3.pptx
Pertemuan 3.pptx
 
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docxMAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
 
(Adam nelvin) quiz dan jawaban teori algo dan struktur data
(Adam nelvin) quiz dan jawaban teori algo dan struktur data(Adam nelvin) quiz dan jawaban teori algo dan struktur data
(Adam nelvin) quiz dan jawaban teori algo dan struktur data
 
Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)
 
Tistrukdat10
Tistrukdat10Tistrukdat10
Tistrukdat10
 
Struktur data
Struktur dataStruktur data
Struktur data
 
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTOPOWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
 
Sistem operasi - 10 [Manajemen Memori]
Sistem operasi - 10 [Manajemen Memori]Sistem operasi - 10 [Manajemen Memori]
Sistem operasi - 10 [Manajemen Memori]
 

More from Wandi Parlente

Rekayasa perangkat lunak
Rekayasa perangkat lunakRekayasa perangkat lunak
Rekayasa perangkat lunakWandi Parlente
 
rekayasa perangkat lunak
rekayasa perangkat lunakrekayasa perangkat lunak
rekayasa perangkat lunakWandi Parlente
 
11 12 -pengurutan dan-pencarian
11 12 -pengurutan dan-pencarian11 12 -pengurutan dan-pencarian
11 12 -pengurutan dan-pencarianWandi Parlente
 
9 10 - sort-pengurutan-data
9 10 - sort-pengurutan-data9 10 - sort-pengurutan-data
9 10 - sort-pengurutan-dataWandi Parlente
 
1 pengertian-struktur-data
1 pengertian-struktur-data1 pengertian-struktur-data
1 pengertian-struktur-dataWandi Parlente
 
8. modul input & output
8. modul input & output8. modul input & output
8. modul input & outputWandi Parlente
 
7. matherboard & sistem bus
7. matherboard & sistem bus7. matherboard & sistem bus
7. matherboard & sistem busWandi Parlente
 
3. central prosesing unit
3. central prosesing unit 3. central prosesing unit
3. central prosesing unit Wandi Parlente
 

More from Wandi Parlente (20)

Rekayasa perangkat lunak
Rekayasa perangkat lunakRekayasa perangkat lunak
Rekayasa perangkat lunak
 
rekayasa perangkat lunak
rekayasa perangkat lunakrekayasa perangkat lunak
rekayasa perangkat lunak
 
14 graph2
14 graph214 graph2
14 graph2
 
11 12 -pengurutan dan-pencarian
11 12 -pengurutan dan-pencarian11 12 -pengurutan dan-pencarian
11 12 -pengurutan dan-pencarian
 
9 10 - sort-pengurutan-data
9 10 - sort-pengurutan-data9 10 - sort-pengurutan-data
9 10 - sort-pengurutan-data
 
8 algoprog-pointer
8  algoprog-pointer8  algoprog-pointer
8 algoprog-pointer
 
7 Pointer
7 Pointer7 Pointer
7 Pointer
 
4 queue2
4 queue24 queue2
4 queue2
 
3 stack2
3 stack23 stack2
3 stack2
 
2 array n-matriks
2 array n-matriks2 array n-matriks
2 array n-matriks
 
1 pengertian-struktur-data
1 pengertian-struktur-data1 pengertian-struktur-data
1 pengertian-struktur-data
 
13 graph2
13 graph213 graph2
13 graph2
 
10. bahasa rakitan
10. bahasa rakitan10. bahasa rakitan
10. bahasa rakitan
 
8. modul input & output
8. modul input & output8. modul input & output
8. modul input & output
 
7. matherboard & sistem bus
7. matherboard & sistem bus7. matherboard & sistem bus
7. matherboard & sistem bus
 
6. memori sekunder
6. memori sekunder6. memori sekunder
6. memori sekunder
 
5. chace memori
5. chace memori5. chace memori
5. chace memori
 
4. memori komputer
4. memori  komputer4. memori  komputer
4. memori komputer
 
3. central prosesing unit
3. central prosesing unit 3. central prosesing unit
3. central prosesing unit
 
9.sistem operasi
9.sistem operasi 9.sistem operasi
9.sistem operasi
 

5 6 single-linked_list

  • 1. BAB 6 SINGLY LINKED LIST (SENARAI BERKAIT TUNGGAL) 1. Tujuan Instruksional Umum a. Mahasiswa dapat melakukan perancangan aplikasi menggunakan struktur Linked List (Senarai Berkait) b. Mahasiswa mampu melakukan analisis pada algoritma Linked List yang dibuat c. Mahasiswa mampu mengimplementasikan algoritma Linked List pada sebuah aplikasi secara tepat dan efisien 2. Tujuan Instruksional Khusus a. Mahasiswa dapat menjelaskan mengenai Linked List b. Mahasiswa dapat membuat dan mendeklarasikan Abstraksi Tipe Data Linked List c. Mahasiswa mampu menerapkan operasi Single Linked List Non Circular : Insert, update, dan delete d. Mahasiswa mampu menerapkan operasi Single Linked List Circular : Insert, update, dan delete Pengertian Linked List Salah satubentuk struktur data yang berisi kumpulan data yang tersusun secara sekuensial, saling bersambungan, dinamis dan terbatas adalah senarai berkait (linked list). Suatu senarai berkait (linked list) adalah suatu simpul (node) yang dikaitkan dengan simpul yang lain dalam suatu urutan tertentu. Suatu simpul dapat berbentuk suatu struktur atau class. Simpul harus mempunyai satu atau lebih elemen struktur atau class yang berisi data. Secara teori, linked list adalah sejumlah node yang dihubungkan secara linier dengan bantuan pointer. Dikatakan singly (single) linked apabila hanya ada satu pointer yang menghubungkan setiap node. Singly artinya field pointer-nya hanya satu buah saja dan satu arah Senarai berkait adalah struktur data yang paling dasar. Senarai berkait terdiri atas sejumlah unsur-unsur dikelompokkan, atau terhubung, bersama-sama di suatu deret yang spesifik. Senarai berkait bermanfaat di dalam memelihara koleksi-koleksi data, yang serupa dengan array/larik yang sering digunakan. Bagaimanapun juga, senarai berkait memberikan keuntungan-keuntungan penting yang melebihi array/larik dalam banyak hal. Secara rinci, senarai berkait lebih efisien di dalam melaksanakan penyisipan-penyisipan dan penghapusan-penghapusan. Senarai berkait juga menggunakan alokasi penyimpanan secara dinamis, yang merupakan penyimpanan yang dialokasikan pada runtime. Karena di dalam banyak aplikasi, ukuran dari data itu tidak diketahui pada saat kompile, hal ini bisa merupakan suatu atribut yang baik juga. Setiap node akan berbentuk struct dan memiliki satu buah field bertipe struct yang sama, yang berfungsi sebagai pointer. Dalam menghubungkan setiap node, kita dapat menggunakan cara first-create-first-access ataupun first-create-last-access. Yang berbeda dengan deklarasi struct sebelumnya adalah satu field bernama next, yang bertipe struct tnode. Hal ini sekilas dapat membingungkan. Namun, satu hal yang jelas, variabel next ini akan menghubungkan kita dengan node di sebelah kita, yang juga bertipe struct tnode. Hal inilah yang menyebabkan next harus bertipe struct tnode. 1
  • 2. Senarai berkait tunggal (Singly Linked List) Senarai berkait yang paling sederhana, di mana unsur-unsur terhubung oleh suatu pointer. Struktur ini mengizinkan senarai dilintasi dari elemen pertama sampai elemen terakhir. Senarai berkait ganda (Doubly Linked List) Senarai berkait di mana unsur-unsur yang terhubung oleh dua pointer sebagai gantinya. Struktur ini mengizinkan senarai untuk dilintasi kedua-duanya secara maju mundur. Senarai sirkular (Circular List) Senarai berkait di mana elemen yang terakhir terhubung dengan elemen yang pertama sebagai ganti set ke NULL. Struktur ini mengizinkan senarai untuk dilintasi secara lingkar. Abstraksi Tipe Data Singly Linked List Non Circular Pembuatan struct bernama tnode berisi 2 field, yaitu field data bertipe integer dan field next yang bertipe pointer dari tnode. Deklarasi node dengan struct struct tnode { int data; struct tnode *next; } Gambar 1. Sebuah node pada Singly Linked List Asumsikan kita memiliki sejumlah node yang selalu menoleh ke sebelah dalam arah yang sama. Atau, sebagai alat bantu, Anda bisa mengasumsikan beberapa orang yang bermain kereta api. Yang belakang akan memegang yang depan, dan semuanya menghadap arah yang sama. Setiap pemain adalah node. Dan tangan pemain yang digunakan untuk memegang bahu pemain depan adalah variabel next. Sampai di sini, kita baru saja mendeklarasikan tipe data dasar sebuah node. Selanjutnya, kita akan mendeklarasikan beberapa variabel pointer bertipe struct tnode. Beberapa variabel tersebut akan kita gunakan sebagai awal dari linked list, node aktif dalam linked list, dan node sementara yang akan digunakan dalam pembuatan node di linked list. Berikan nilai awal NULL kepada mereka. Deklarasi node untuk beberapa keperluan, seperti berikut ini: struct tnode *head=NULL, *curr=NULL, *node=NULL; Dengan demikian, sampai saat ini, telah dimiliki tiga node. Satu sebagai kepala (head), satu sebagai node aktif dalam linked list (curr) dan satu lagi node sementara (node). Sekarang telah siap untuk membuat singly linked list. Untuk itu, akan dimasukkan nilai tertentu sebagai nilai untuk field data dengan cara melakukan perulangan sehingga campur tangan user tidak diperlukan. Seperti yang diungkapkan sebelumnya, bahwa akan dibuat Singly Linked List (SLL) dengan cara first-create-first-access. Dengan cara ini, node yang dibuat pertama akan menjadi head. Node-node yang dibuat setelahnya akan menjadi node-node 2
  • 3. pengikut. Untuk mempermudah pengingatan, ingatlah gambar anak panah yang mengarah ke kanan. Head akan berada pada pangkal anak panah, dan node-node berikutnya akan berbaris ke arah bagian anak panah yang tajam. Gambar 2 Singly Linked List Apabila diperhatikan, setiap node memiliki petunjuk untuk node sebelahnya. Bagaimana dengan node terakhir? Akan diberikan nilai NULL. Dengan demikian, setiap node kebagian jatah. int i; for (i=0; i<5; i++) { node = (struct tnode *) malloc (sizeof(struct tnode)); node -> data = i; if (head == NULL) { head = node; curr = node; }else { curr -> next = node; curr = node; } } curr -> next = NULL; Berikut adalah penjelasan kode-kode pembuatan singly linked list tersebut. Pertama-tama, akan dibuat perulangan dari 0 sampai 4, yang dimaksudkan untuk membuat lima buah node yang masing-masing field data nya berisikan nilai dari 0 sampai 4. Pembuatan node dilakukan dengan fungsi malloc(). for (i=0; i<5; i++) { node = (struct tnode *) malloc (sizeof(struct tnode)); node -> data = i; ... ... } Setelah itu, perlu dibuat node dan penghubung. Pertama-tama, akan diuji apakah head bernilai NULL. Kondisi head bernilai NULL hanya terjadi apabila belum dimiliki satu node pun. Dengan demikian, node tersebut akan dijadikan sebagai head. Node aktif (curr), juga kita dapat dari node tersebut. Sekarang, bagaimana kalau head tidak bernilai NULL alias telah dimiliki satu atau lebih node? Yang pertama dilakukan adalah menghubungkan pointer next dari node aktif (curr) ke node yang baru saja dibuat. Dengan demikian, baru saja dibuat penghubung antara rantai lama dengan mata rantai baru. Atau, dalam permainan kereta api, pemain paling depan dalam barisan lama akan menempelkan tangannya pada bahu 3
  • 4. pemain yang baru bergabung. Node aktif (curr) kemudian dipindahkan ke node yang baru dibuat. if (head == NULL) { head = node; curr = node; } Gambar 3 Membuat elemen pertama SLL else { curr->next=node; curr = node; } Gambar 4. Penambahan elemen dibelakang SLL Setelah semuanya dibuat, sudah saatnya bagi kita untuk menghubungkan pointer next untuk mata rantai terakhir ke NULL. curr -> next = NULL; Dan selamat! Singly linked list baru saja diciptakan. Ada yang terlupa? Ada. Bagaimana kita tahu bahwa linked list yang kita ciptakan adalah linked list yang benar? Salah satu cara untuk mengetahuinya adalah dengan mencetak field x untuk semua node. Dari head sampai node terakhir. curr = head; while (curr != NULL) { printf(“%d “, curr -> data); curr = curr -> next; } printf(“n”); Pertama-tama, kita meletakkan node aktif (curr) ke posisi head. Setelah itu, kita akan pindahkan kunjungi satu per satu node dengan memindahkan node aktif (curr) ke posisi sebelahnya. Semua kunjungan tersebut akan kita lakukan apabila node aktif (curr) tidak menemui NULL. Anda mungkin ingin menambahkan pemanggilan free() untuk melakukan dealokasi. Kode selengkapnya: #include <stdio.h> #include <stdlib.h> int main() { struct tnode { int data; struct tnode *next; }; struct tnode *head=NULL, 4
  • 5. *curr=NULL, *node=NULL; int i; for (i=0; i<5; i++) { node = (struct tnode *) malloc (sizeof(struct tnode)); node -> data = i; if (head == NULL) { head = node; curr = node; }else { curr -> next = node; curr = node; } } curr -> next = NULL; curr = head; while (curr != NULL) { printf(“%d “, curr -> data); curr = curr -> next; } printf(“n”); free(); return 0; } Abstraksi Tipe Data Singly Linked List Circular Hampir sama dengan singly linked list non circular, bahwa dibutuhkan sebuah kait untuk menghubungkan node-node data yang ada, dimana pada node terakhir atau tail yang semula menunjukkan NULL diganti dengan menunjuk ke kepala atau head. Dimana inisialisasi senarai berkait tunggal sirkular menggunakan struc adalah sebagai berikut: Deklarasi Singly Linked List Circular Struct tnode { int data; tnode *next; }; void main() { head = new tnode; Gambar 5. Singly Linked List circular head->next = head; } Menambah node dan membuat tail dari singly linked list circular Deklarasi penambahan node baru Void main() { node = new tnode; tail = new tnode; node->next = head->next; head->next = node; tail = node; } Gambar 6. Penambahan Node baru 5
  • 6. Menyisipkan Node baru Gambar 7 Menyisipkan Node Baru Deklarasi menyisipkan node baru menggunakan sintak berikut: Void main() { node = new tnode; node->next = head->next; head->next = node; } Menghapus Node dari Singly Linked List Circular Gambar 8. Menghapus node dari SLLC Deklarasi menghapus node dari singly linked list circular, menggunakan sintaks berikut: Void main() { hapus = new tnode; if( head != tail) { hapus = head; head = head->next; tail->next = head; delete hapus; }else { head = NULL; tail = NULL; 6
  • 7. } } Contoh Soal Singly Linked List Circular dengan menggunakan bahasa C++ dan berkerja pada kompiler Borland C++. #include <windows.h> #include <iostream> #include <conio.h> using namespace std; class CL_list { private: struct node { int data; node *link; }; struct node *p; public: CL_list(); CL_list(CL_list& l); ~CL_list(); void add(int); void del(); void addatbeg(int); void display(); void slideshow(float,int,int); int count(); void wait(float); bool operator ==(CL_list); bool operator !=(CL_list); void operator =(CL_list); }; CL_list::CL_list() { p=NULL; } CL_list::CL_list(CL_list& l) { node *x; p=NULL; x=l.p; if(x==NULL) return; for(int i=1;i<=l.count();i++) { add(x->data); x=x->link; } } CL_list::~CL_list() { node *q,*t; q=p; t=p; if(p==NULL) return; while(q->link!=t) { p=q; q=q->link; delete p; } p=q; 7
  • 8. delete p; } void CL_list::add(int n) { if(p==NULL) { node *q; q=new node; q->data=n; q->link=q; p=q; return; } node *q; q=p; while(q->link != p) q=q->link; node *t; t=new node; t->data=n; t->link=p; q->link=t; } void CL_list::display() { if(p==NULL) { cout<<"EMPTY LISTn"; return; } node *q; q=p; for(int i=1;i<=this->count();i++) { cout<<q->data<<endl; q=q->link; } } int CL_list::count() { node *q; q=p; int c=0; if(p==NULL) return 0; else c++; while(q->link != p) { c++; q=q->link; } return c; } void CL_list::del() { if(p==NULL) return; if(p->link==p) { p=NULL; } else { 8
  • 9. node *q; q=p; while(q->link != p ) q=q->link; q->link=p->link; q=p; p=(q->link == NULL ? NULL : p->link); delete q; } } void CL_list::addatbeg(int n) { node *q,*t; q=p; while(q->link!=p) q=q->link; t=new node; t->data=n; t->link=p; q->link=t; p=t; } void CL_list::slideshow(float dlay,int x,int y) { /* if(p==NULL) { gotoxy(x,y); cout<<"EMPTY LISTn"; return; } node *q; q=p; while(!kbhit()) { gotoxy(x,y); cout<<" "; gotoxy(x,y); cout<<q->data; wait(dlay); q=q->link; }*/ } void CL_list::wait(float t) { long time=GetTickCount()+(t*1000L); while(GetTickCount()<=time) { /* WAIT !!! */ } } bool CL_list::operator ==(CL_list t) { if(t.p==NULL && p==NULL) return 1; if(this->count() != t.count()) return 0; node *q; q=p; bool flag; flag=1; node *a; a=t.p; 9
  • 10. for(int i=1;i<=count();i++) { if(a->data!=q->data) flag=0; a=a->link; q=q->link; } if(a->data!=q->data) flag=0; return flag; } bool CL_list::operator !=(CL_list t) { return !(this->operator==(t)); } int main() { CL_list a; a.add(1); a.add(2); a.add(3); a.add(4); a.addatbeg(128); a.del(); // 128 is deleted cout<<"nLIST DATA:n"; a.display(); CL_list b=a; if(b!=a) cout<<endl<<"NOT EQUAL"<<endl; else cout<<endl<<"EQUAL"<<endl; a.slideshow(1,13,13); return 0; } Soal Buatlah program Singly Linked List Circular yang flesibel dan dinamis. Dimana pengguna dapat menambah node baru beserta datanya, membaca semua data pada senarai, menghapus node dengan data yang ditentukan oleh pengguna. Daftar Rujukan 1. Abdul Kadir. 1991. Pemrograman Dasar Turbo C untuk IBM PC. Yogyakarta: Penerbit Andi 2. Andri Kristanto. 2003. Struktur Data dengan C++. Yogyakarta: Graha Ilmu 3. Antonius Rachmat C. Handout Struktur Data. Prodi Teknik Informatika Universitas Kristen Duta Wacana 4. Karve, Sanchit. Basic Data Structures in C++. www.dreamincode.net /forums /index.php 5. Noprianto. 2004. Linked List pada C. www.infolinux.web.id 10