SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
PROGRAM STUDI PENDIDIKAN TEKNIK INFORMASI DAN
        KOMPUTER (PTIK)
        JURUSAN TEKNIK ELEKTRO
        FAKULTAS TEKNIK – UNIVERSITAS NEGERI MAKASSAR




Mata Kuliah : Struktur Data
Pertemuan : V

LINKED LIST (II)
                                       Dyah Darma Andayani, S.T,
                                                     M.Tel.Eng
                                                         2010
DOUBLE LINKED LIST NON CIRCULAR

   DLLNC adalah Double Linked List yang memiliki 2 buah
    pointer yaitu pointer next dan prev. Pointer next menunjuk
    pada node setelahnya dan pointer prev menunjuk pada
    node sebelumnya.
   Pengertian:
      Double : artinya field pointer-nya dua buah dan dua arah,
       ke node sebelum dan sesudahnya.
      Linked List : artinya node-node tersebut saling terhubung
       satu sama lain.
      Non Circular : artinya pointer prev dan next-nya akan
       menunjuk pada NULL.
ILUSTRASI DLLNC




   Setiap node pada linked list mempunyai field yang berisi
    data dan pointer ke node berikutnya & ke node sebelumnya
   Untuk pembentukan node baru, mulanya pointer next dan
    prev akan menunjuk ke nilai NULL.
   Selanjutnya pointer prev akan menunjuk ke node
    sebelumnya, dan pointer next akan menunjuk ke node
    selanjutnya pada list.
DEKLARASI DAN NODE BARU DLLNC
   Deklarasi node
   Dibuat dari struct berikut ini:
   typedef struct TNode{
                 int data;
                 TNode *next;
                 Tnode *prev;
    };
   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 = NULL;
   baru->prev = NULL;
DLLNC DENGAN HEAD

 Dibutuhkan satu buah variabel pointer: head
 Head akan selalu menunjuk pada node
  pertama
Deklarasi Pointer Penunjuk Kepala Double 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;
   }
Function untuk mengetahui kosong tidaknya DLLNC
   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
  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.
DLLNC MENGGUNAKAN HEAD
   void insertDepan(int databaru){
     TNode *baru;
     baru = new TNode;
     baru->data = databaru;
     baru->next = NULL;
     baru->prev = NULL;
     if(isEmpty()==1){
        head=baru;
        head->next = NULL;
        head->prev = NULL;
     }
     else {
        baru->next = head;
        head->prev = baru;
        head = baru;
     }
     cout<<”Data masukn”;
   }
11
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 = NULL;
     baru->prev = NULL;
     if(isEmpty()==1){
       head=baru;
       head->next = NULL;
       head->prev = NULL;
     }
     else {
       bantu=head;
       while(bantu->next!=NULL){
         bantu=bantu->next;
       }
       bantu->next = baru;
       baru->prev = bantu;
     }
     cout<<"Data masukn";
   }
11
Function untuk menampilkan isi DLLNC
   void tampil(){
       TNode *bantu;
       bantu = head;
       if(isEmpty()==0){
              while(bantu!=NULL){
                     cout<<bantu->data<<" ";
                     bantu=bantu->next;
              }
              cout<<endl;
       } else cout<<"Masih kosongn";
   }
   Bagaimana cara membaca data list secara
    terbalik?
   Function untuk menghapus data di depan:
   void hapusDepan (){
       TNode *hapus;
       int d;
       if (isEmpty()==0){
        if(head->next != NULL){
              hapus = head;
              d = hapus->data;
              head = head->next;
              head->prev = NULL;
              delete hapus;
        } else {
              d = head->data;
              head = NULL;
        }
        cout<<d<<" terhapusn";
       } else cout<<"Masih kosongn";
   }
   Function untuk menghapus node terbelakang
   void hapusBelakang(){
       TNode *hapus;
       int d;
       if (isEmpty()==0){
        if(head->next != NULL){
              hapus = head;
              while(hapus->next!=NULL){
                hapus = hapus->next;
              }
              d = hapus->data;
              hapus->prev->next = NULL;
              delete hapus;
        } else {
              d = head->data;
              head = NULL;
        }
        cout<<d<<" terhapusn";
       } else cout<<"Masih kosongn";
   }
 Tidak diperlukan pointer bantu yang
  mengikuti pointer hapus yang berguna
  untuk menunjuk ke NULL
 Karena pointer hapus sudah bisa
  menunjuk ke pointer sebelumnya dengan
  menggunakan elemen prev ke node
  sebelumnya, yang akan diset agar
  menunjuk ke NULL setelah penghapusan
  dilakukan.
11
   Function untuk menghapus semua
    elemen
   void clear(){
      TNode *bantu,*hapus;
      bantu = head;
      while(bantu!=NULL){
          hapus = bantu;
          bantu = bantu->next;
          delete hapus;
      }
      head = NULL;
   }
DLLNC DENGAN 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.
Inisialisasi DLLNC
 TNode *head, *tail;

Fungsi Inisialisasi DLLNC
 void init(){

    head = NULL;

    tail = NULL;

 }

Function untuk mengetahui kosong tidaknya DLLNC
 int isEmpty(){

      if(tail == NULL) return 1;
      else return 0;
 }
   Tambah Depan
   void insertDepan (int databaru){
     TNode *baru;
     baru = new TNode;
     baru->data = databaru;
     baru->next = NULL;
     baru->prev = NULL;
     if(isEmpty()==1){
       head=baru;
       tail=head;
       head->next = NULL;
       head->prev = NULL;
       tail->prev = NULL;
       tail->next = NULL;
     }
     else {
       baru->next = head;
       head->prev = baru;
       head = baru;
     }
     cout<<"Data masukn";
   }
11
Penambahan node di belakang
Penambahan node di belakang akan selalu dikaitkan
  dengan tail dan kemudian
node baru tersebut akan menjadi tail
   void insertBelakang(int databaru){
        TNode *baru;
        baru = new TNode;
        baru->data = databaru;
        baru->next = NULL;
        baru->prev = NULL;
        if(isEmpty()==1){
         head=baru;
         tail=head;
         head->next = NULL;
         head->prev = NULL;
         tail->prev = NULL;
         tail->next = NULL;
        }
        else {
         tail->next = baru;
         baru->prev = tail;
         tail = baru;
          tail->next = NULL;
        }
        cout<<"Data masukn";
   }
11
11
   Function untuk menampilkan isi linked list
   void tampil(){
       TNode *bantu;
       bantu = head;
       if(isEmpty()==0){
              while(bantu!=tail->next){
                     cout<<bantu->data<<" ";
                     bantu=bantu->next;
              }
              cout<<endl;
       } else cout<<"Masih kosongn";
   }
   Function untuk menghapus data di data terdepan
   void hapusDepan(){
       TNode *hapus;
       int d;
       if (isEmpty()==0){
         if(head->next != NULL){
                hapus = head;
                d = hapus->data;
                head = head->next;
                head->prev = NULL;
                delete hapus;
         } else {
                d = head->data;
                head = NULL;
                tail = NULL;
         }
         cout<<d<<" terhapusn";
       } else cout<<"Masih kosongn";
   }
11
   Function untuk menghapus node
    terbelakang
   void hapusBelakang(){
       TNode *hapus;
       int d;
       if (isEmpty()==0){
        if(head->next != NULL){
              hapus = tail;
              d = tail->data;
              tail = tail->prev;
              tail->next = NULL;
              delete hapus;
        } else {
              d = head->data;
              head = NULL;
              tail = NULL;
        }
        cout<<d<<" terhapusn";
       } else cout<<"Masih kosongn";
   }
 Pointer hapus tidak perlu di loop
  untuk mencari node terakhir. Pointer
  hapus hanya perlu menunjuk pada
  pointer tail saja.
 Karena pointer hapus sudah bisa
  menunjuk ke pointer sebelumnya
  dengan menggunakan elemen prev,
  maka pointer prev hanya perlu diset
  agar menunjuk ke NULL. Lalu
  pointer hapus didelete.
11
   Function untuk menghapus semua elemen
    LinkedList
   void clear(){
      TNode *bantu,*hapus;
      bantu = head;
      while(bantu!=NULL){
           hapus = bantu;
           bantu = bantu->next;
           delete hapus;
      }
      head = NULL;
      tail = NULL;
   }
 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-SOAL
   Buatlah program double linked list non circular
    dengan menggunakan head, namun head yang
    ada tidak digunakan untuk menyimpan data,
    melainkan untuk menyimpan jumlah seluruh
    elemen dalam linked list.
       Buatlah fungsi lengkap untuk tambah, hapus, lihat, dan
        edit!
       Buatlah pula function untuk menampilkan data list secara
        terbalik!

Weitere ähnliche Inhalte

Was ist angesagt?

Struktur data (bubble sort)
Struktur data (bubble sort)Struktur data (bubble sort)
Struktur data (bubble sort)Ahmad Irham
 
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_listWandi Parlente
 
Cenadep.org - Tutorial Penomoran Transaksi Otomatis Dengan Delphi Dan MySQL
Cenadep.org - Tutorial Penomoran Transaksi Otomatis Dengan Delphi Dan MySQLCenadep.org - Tutorial Penomoran Transaksi Otomatis Dengan Delphi Dan MySQL
Cenadep.org - Tutorial Penomoran Transaksi Otomatis Dengan Delphi Dan MySQLBuyut Rivai
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 15
Laporan praktikum Algoritma dan Pemrograman pertemuan 15Laporan praktikum Algoritma dan Pemrograman pertemuan 15
Laporan praktikum Algoritma dan Pemrograman pertemuan 15Ekha Cahya Nugraha
 
Pengantar Pointer untuk Pembelajaran Struktur Data (Java)
Pengantar Pointer untuk Pembelajaran Struktur Data (Java)Pengantar Pointer untuk Pembelajaran Struktur Data (Java)
Pengantar Pointer untuk Pembelajaran Struktur Data (Java)Herbert Abdillah
 
FUNGSI – FUNGSI DALAM MYSQL
FUNGSI – FUNGSI DALAM MYSQLFUNGSI – FUNGSI DALAM MYSQL
FUNGSI – FUNGSI DALAM MYSQLIbrahim Naki
 
Membangun perceptron operator and
Membangun perceptron operator andMembangun perceptron operator and
Membangun perceptron operator andRakhmat Aji
 
11 12 -pengurutan dan-pencarian
11 12 -pengurutan dan-pencarian11 12 -pengurutan dan-pencarian
11 12 -pengurutan dan-pencarianWandi Parlente
 
3 adp struktur keputusan
3   adp struktur keputusan3   adp struktur keputusan
3 adp struktur keputusanChabil_Juniar
 
[PUBLIC] quiz-01-midterm-solutions.pdf
[PUBLIC] quiz-01-midterm-solutions.pdf[PUBLIC] quiz-01-midterm-solutions.pdf
[PUBLIC] quiz-01-midterm-solutions.pdfFariz Darari
 
Modul xiii dan xiv algo
Modul xiii dan xiv algoModul xiii dan xiv algo
Modul xiii dan xiv algoSTMIK AKAKOM
 

Was ist angesagt? (16)

Struktur data (bubble sort)
Struktur data (bubble sort)Struktur data (bubble sort)
Struktur data (bubble sort)
 
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_list
 
Cenadep.org - Tutorial Penomoran Transaksi Otomatis Dengan Delphi Dan MySQL
Cenadep.org - Tutorial Penomoran Transaksi Otomatis Dengan Delphi Dan MySQLCenadep.org - Tutorial Penomoran Transaksi Otomatis Dengan Delphi Dan MySQL
Cenadep.org - Tutorial Penomoran Transaksi Otomatis Dengan Delphi Dan MySQL
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 15
Laporan praktikum Algoritma dan Pemrograman pertemuan 15Laporan praktikum Algoritma dan Pemrograman pertemuan 15
Laporan praktikum Algoritma dan Pemrograman pertemuan 15
 
Fungsi Fungsi Di MySQL
Fungsi Fungsi Di MySQLFungsi Fungsi Di MySQL
Fungsi Fungsi Di MySQL
 
Pengantar Pointer untuk Pembelajaran Struktur Data (Java)
Pengantar Pointer untuk Pembelajaran Struktur Data (Java)Pengantar Pointer untuk Pembelajaran Struktur Data (Java)
Pengantar Pointer untuk Pembelajaran Struktur Data (Java)
 
FUNGSI – FUNGSI DALAM MYSQL
FUNGSI – FUNGSI DALAM MYSQLFUNGSI – FUNGSI DALAM MYSQL
FUNGSI – FUNGSI DALAM MYSQL
 
Membangun perceptron operator and
Membangun perceptron operator andMembangun perceptron operator and
Membangun perceptron operator and
 
Resume praktikum 5__linked_list
Resume praktikum 5__linked_listResume praktikum 5__linked_list
Resume praktikum 5__linked_list
 
11 12 -pengurutan dan-pencarian
11 12 -pengurutan dan-pencarian11 12 -pengurutan dan-pencarian
11 12 -pengurutan dan-pencarian
 
3 adp struktur keputusan
3   adp struktur keputusan3   adp struktur keputusan
3 adp struktur keputusan
 
[PUBLIC] quiz-01-midterm-solutions.pdf
[PUBLIC] quiz-01-midterm-solutions.pdf[PUBLIC] quiz-01-midterm-solutions.pdf
[PUBLIC] quiz-01-midterm-solutions.pdf
 
5 method
5 method5 method
5 method
 
tugas algoritma
tugas algoritmatugas algoritma
tugas algoritma
 
Modul xiii dan xiv algo
Modul xiii dan xiv algoModul xiii dan xiv algo
Modul xiii dan xiv algo
 
Pengurutan (sorting )
Pengurutan (sorting )Pengurutan (sorting )
Pengurutan (sorting )
 

Andere mochten auch (6)

12
1212
12
 
Pert.9 input output
Pert.9 input outputPert.9 input output
Pert.9 input output
 
Pert.10 manajemen disk
Pert.10 manajemen diskPert.10 manajemen disk
Pert.10 manajemen disk
 
7
77
7
 
Pert.3 proses dan thread
Pert.3 proses dan threadPert.3 proses dan thread
Pert.3 proses dan thread
 
Pert.11 linux
Pert.11 linuxPert.11 linux
Pert.11 linux
 

Ähnlich wie 11 (20)

Tistrukdat7
Tistrukdat7Tistrukdat7
Tistrukdat7
 
Bab 6 singly_linked_list
Bab 6 singly_linked_listBab 6 singly_linked_list
Bab 6 singly_linked_list
 
Pert.5 linked list
Pert.5 linked listPert.5 linked list
Pert.5 linked list
 
Bab 5 linked list
Bab 5 linked listBab 5 linked list
Bab 5 linked list
 
Tistrukdat6
Tistrukdat6Tistrukdat6
Tistrukdat6
 
Pertemuan 4 revisijan2013-mhs
Pertemuan 4 revisijan2013-mhsPertemuan 4 revisijan2013-mhs
Pertemuan 4 revisijan2013-mhs
 
9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circular
 
SINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptxSINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptx
 
Pertemuan 3.pptx
Pertemuan 3.pptxPertemuan 3.pptx
Pertemuan 3.pptx
 
DOUBLE LINKED LIST..docx
DOUBLE LINKED LIST..docxDOUBLE LINKED LIST..docx
DOUBLE LINKED LIST..docx
 
Materi linked list dan bubble sort
Materi linked list dan bubble sortMateri linked list dan bubble sort
Materi linked list dan bubble sort
 
Stack with linked list(algodat)
Stack with linked list(algodat)Stack with linked list(algodat)
Stack with linked list(algodat)
 
Linked list
Linked listLinked list
Linked list
 
Algorithms and Data Structures
 Algorithms and Data Structures Algorithms and Data Structures
Algorithms and Data Structures
 
Modul 3 strukdat
Modul 3 strukdatModul 3 strukdat
Modul 3 strukdat
 
Single Linked List - Insert .pptx
Single Linked List - Insert .pptxSingle Linked List - Insert .pptx
Single Linked List - Insert .pptx
 
teori Struktur data full
teori Struktur data fullteori Struktur data full
teori Struktur data full
 
Linkedlist
LinkedlistLinkedlist
Linkedlist
 
Queue
QueueQueue
Queue
 
Modul 2
Modul 2Modul 2
Modul 2
 

Mehr von Ical Militanmannojack (20)

Pert.8 memori virtual
Pert.8 memori virtualPert.8 memori virtual
Pert.8 memori virtual
 
Pert.7 memori
Pert.7 memoriPert.7 memori
Pert.7 memori
 
Pert.6 deadlock lanjutan
Pert.6 deadlock lanjutanPert.6 deadlock lanjutan
Pert.6 deadlock lanjutan
 
Pert.5 sinkronisasi dan deadlock
Pert.5 sinkronisasi dan deadlockPert.5 sinkronisasi dan deadlock
Pert.5 sinkronisasi dan deadlock
 
Pert.12 modul kernel linux
Pert.12 modul kernel linuxPert.12 modul kernel linux
Pert.12 modul kernel linux
 
Pert.4 proses dan thread lanjutan
Pert.4 proses dan thread lanjutanPert.4 proses dan thread lanjutan
Pert.4 proses dan thread lanjutan
 
Pert.2 proteksi perangkat keras
Pert.2 proteksi perangkat kerasPert.2 proteksi perangkat keras
Pert.2 proteksi perangkat keras
 
Pert.1 pengantar sistem operasi
Pert.1 pengantar sistem operasiPert.1 pengantar sistem operasi
Pert.1 pengantar sistem operasi
 
10
1010
10
 
8
88
8
 
9
99
9
 
Pert.4 record
Pert.4 recordPert.4 record
Pert.4 record
 
Pert.3 array
Pert.3  arrayPert.3  array
Pert.3 array
 
Pert.6 stack
Pert.6 stackPert.6 stack
Pert.6 stack
 
Pert.2 konsep dan defenisi data
Pert.2  konsep dan defenisi dataPert.2  konsep dan defenisi data
Pert.2 konsep dan defenisi data
 
Analisis desain sistem informasi ppt.12
Analisis desain sistem informasi ppt.12Analisis desain sistem informasi ppt.12
Analisis desain sistem informasi ppt.12
 
Analisis desain sistem informasi ppt.11
Analisis desain sistem informasi ppt.11Analisis desain sistem informasi ppt.11
Analisis desain sistem informasi ppt.11
 
Analisis desain sistem informasi ppt.10
Analisis desain sistem informasi ppt.10Analisis desain sistem informasi ppt.10
Analisis desain sistem informasi ppt.10
 
Analisis desain sistem informasi ppt.8
Analisis desain sistem informasi ppt.8Analisis desain sistem informasi ppt.8
Analisis desain sistem informasi ppt.8
 
Analisis desain sistem informasi ppt.7
Analisis desain sistem informasi ppt.7Analisis desain sistem informasi ppt.7
Analisis desain sistem informasi ppt.7
 

11

  • 1. PROGRAM STUDI PENDIDIKAN TEKNIK INFORMASI DAN KOMPUTER (PTIK) JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK – UNIVERSITAS NEGERI MAKASSAR Mata Kuliah : Struktur Data Pertemuan : V LINKED LIST (II) Dyah Darma Andayani, S.T, M.Tel.Eng 2010
  • 2. DOUBLE LINKED LIST NON CIRCULAR  DLLNC adalah Double Linked List yang memiliki 2 buah pointer yaitu pointer next dan prev. Pointer next menunjuk pada node setelahnya dan pointer prev menunjuk pada node sebelumnya.  Pengertian:  Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya.  Linked List : artinya node-node tersebut saling terhubung satu sama lain.  Non Circular : artinya pointer prev dan next-nya akan menunjuk pada NULL.
  • 3. ILUSTRASI DLLNC  Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya  Untuk pembentukan node baru, mulanya pointer next dan prev akan menunjuk ke nilai NULL.  Selanjutnya pointer prev akan menunjuk ke node sebelumnya, dan pointer next akan menunjuk ke node selanjutnya pada list.
  • 4. DEKLARASI DAN NODE BARU DLLNC  Deklarasi node  Dibuat dari struct berikut ini:  typedef struct TNode{  int data;  TNode *next;  Tnode *prev; };  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 = NULL;  baru->prev = NULL;
  • 5. DLLNC DENGAN HEAD  Dibutuhkan satu buah variabel pointer: head  Head akan selalu menunjuk pada node pertama
  • 6. Deklarasi Pointer Penunjuk Kepala Double 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;  }
  • 7. Function untuk mengetahui kosong tidaknya DLLNC  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 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.
  • 8. DLLNC MENGGUNAKAN HEAD  void insertDepan(int databaru){  TNode *baru;  baru = new TNode;  baru->data = databaru;  baru->next = NULL;  baru->prev = NULL;  if(isEmpty()==1){  head=baru;  head->next = NULL;  head->prev = NULL;  }  else {  baru->next = head;  head->prev = baru;  head = baru;  }  cout<<”Data masukn”;  }
  • 10. 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.
  • 11. void insertBelakang (int databaru){  TNode *baru,*bantu;  baru = new TNode;  baru->data = databaru;  baru->next = NULL;  baru->prev = NULL;  if(isEmpty()==1){  head=baru;  head->next = NULL;  head->prev = NULL;  }  else {  bantu=head;  while(bantu->next!=NULL){  bantu=bantu->next;  }  bantu->next = baru;  baru->prev = bantu;  }  cout<<"Data masukn";  }
  • 13. Function untuk menampilkan isi DLLNC  void tampil(){  TNode *bantu;  bantu = head;  if(isEmpty()==0){  while(bantu!=NULL){  cout<<bantu->data<<" ";  bantu=bantu->next;  }  cout<<endl;  } else cout<<"Masih kosongn";  }
  • 14. Bagaimana cara membaca data list secara terbalik?  Function untuk menghapus data di depan:  void hapusDepan (){  TNode *hapus;  int d;  if (isEmpty()==0){  if(head->next != NULL){  hapus = head;  d = hapus->data;  head = head->next;  head->prev = NULL;  delete hapus;  } else {  d = head->data;  head = NULL;  }  cout<<d<<" terhapusn";  } else cout<<"Masih kosongn";  }
  • 15. Function untuk menghapus node terbelakang  void hapusBelakang(){  TNode *hapus;  int d;  if (isEmpty()==0){  if(head->next != NULL){  hapus = head;  while(hapus->next!=NULL){  hapus = hapus->next;  }  d = hapus->data;  hapus->prev->next = NULL;  delete hapus;  } else {  d = head->data;  head = NULL;  }  cout<<d<<" terhapusn";  } else cout<<"Masih kosongn";  }
  • 16.  Tidak diperlukan pointer bantu yang mengikuti pointer hapus yang berguna untuk menunjuk ke NULL  Karena pointer hapus sudah bisa menunjuk ke pointer sebelumnya dengan menggunakan elemen prev ke node sebelumnya, yang akan diset agar menunjuk ke NULL setelah penghapusan dilakukan.
  • 18. Function untuk menghapus semua elemen  void clear(){  TNode *bantu,*hapus;  bantu = head;  while(bantu!=NULL){  hapus = bantu;  bantu = bantu->next;  delete hapus;  }  head = NULL;  }
  • 19. DLLNC DENGAN 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.
  • 20. Inisialisasi DLLNC  TNode *head, *tail; Fungsi Inisialisasi DLLNC  void init(){  head = NULL;  tail = NULL;  } Function untuk mengetahui kosong tidaknya DLLNC  int isEmpty(){  if(tail == NULL) return 1;  else return 0;  }
  • 21. Tambah Depan  void insertDepan (int databaru){  TNode *baru;  baru = new TNode;  baru->data = databaru;  baru->next = NULL;  baru->prev = NULL;  if(isEmpty()==1){  head=baru;  tail=head;  head->next = NULL;  head->prev = NULL;  tail->prev = NULL;  tail->next = NULL;  }  else {  baru->next = head;  head->prev = baru;  head = baru;  }  cout<<"Data masukn";  }
  • 23. Penambahan node di belakang Penambahan node di belakang akan selalu dikaitkan dengan tail dan kemudian node baru tersebut akan menjadi tail  void insertBelakang(int databaru){  TNode *baru;  baru = new TNode;  baru->data = databaru;  baru->next = NULL;  baru->prev = NULL;  if(isEmpty()==1){  head=baru;  tail=head;  head->next = NULL;  head->prev = NULL;  tail->prev = NULL;  tail->next = NULL;  }  else {  tail->next = baru;  baru->prev = tail;  tail = baru;  tail->next = NULL;  }  cout<<"Data masukn";  }
  • 26. Function untuk menampilkan isi linked list  void tampil(){  TNode *bantu;  bantu = head;  if(isEmpty()==0){  while(bantu!=tail->next){  cout<<bantu->data<<" ";  bantu=bantu->next;  }  cout<<endl;  } else cout<<"Masih kosongn";  }
  • 27. Function untuk menghapus data di data terdepan  void hapusDepan(){  TNode *hapus;  int d;  if (isEmpty()==0){  if(head->next != NULL){  hapus = head;  d = hapus->data;  head = head->next;  head->prev = NULL;  delete hapus;  } else {  d = head->data;  head = NULL;  tail = NULL;  }  cout<<d<<" terhapusn";  } else cout<<"Masih kosongn";  }
  • 29. Function untuk menghapus node terbelakang  void hapusBelakang(){  TNode *hapus;  int d;  if (isEmpty()==0){  if(head->next != NULL){  hapus = tail;  d = tail->data;  tail = tail->prev;  tail->next = NULL;  delete hapus;  } else {  d = head->data;  head = NULL;  tail = NULL;  }  cout<<d<<" terhapusn";  } else cout<<"Masih kosongn";  }
  • 30.  Pointer hapus tidak perlu di loop untuk mencari node terakhir. Pointer hapus hanya perlu menunjuk pada pointer tail saja.  Karena pointer hapus sudah bisa menunjuk ke pointer sebelumnya dengan menggunakan elemen prev, maka pointer prev hanya perlu diset agar menunjuk ke NULL. Lalu pointer hapus didelete.
  • 32. Function untuk menghapus semua elemen LinkedList  void clear(){  TNode *bantu,*hapus;  bantu = head;  while(bantu!=NULL){  hapus = bantu;  bantu = bantu->next;  delete hapus;  }  head = NULL;  tail = NULL;  }
  • 33.  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.
  • 34. SOAL-SOAL  Buatlah program double linked list non circular dengan menggunakan head, namun head yang ada tidak digunakan untuk menyimpan data, melainkan untuk menyimpan jumlah seluruh elemen dalam linked list.  Buatlah fungsi lengkap untuk tambah, hapus, lihat, dan edit!  Buatlah pula function untuk menampilkan data list secara terbalik!