Minggu, 17 April 2016

Single Linked List Pada C++

Apa itu Linked list ? Linked list adalah sejumlah simpul (node) yang dikaitkan dengan simpul yang lain dengan bantuan pointer dalam suatu urutan tertentu. Suatu linked list dikatakan single linked list apabila hanya ada satu pointer yang menghubungkan setiap node (satu arah “next”).

Single linked list dapat dibagi menjadi:
Single linked list non circular
Single Linked List yang pointer next pada node terakhir(tail) -nya menunjuk ke Null.
      1. Deklarasi node dengan struct pada single linked list:
struct tnode
{
      int data;
      struct tnode *next;
}


2. Deklarasi node untuk beberapa keperluan, seperti berikut ini:

struct tnode *head=NULL, *curr=NULL, *node=NULL;
3. Membuat elemen pertama dan menambahkan elemen di belakang Single Linked List



Single Linked List Circular:
Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri dari beberapa node maka pointer terakhirnya(tail) akan menunjuk ke pointer terdepannya(head).
1. Deklarasi Single Linked List Circular:
struct tnode
{
     int data;
     tnode *next;
};
void main()
{
     head = new tnode;
     head->next = head;
}


2. Menambah node dan membuat tail dari single linked list circular
Deklarasi penambahan node baru:
void main()
{
     node = new tnode;
     tail = new tnode;

     //head->next di bawah ini "masih" menunjuk ke head itu sendiri 
     //jadi, kode di bawah ini maksudnya node->next menunjuk ke head
     node->next = head->next;

     //baru di sini head->next diubah menunjuk ke node
     //hasilnya akan seperti "Gambar 6"
     head->next = node;
     tail = node;
}



3. Deklarasi menyisipkan node baru menggunakan sintak berikut:
void main()
{
     node = new tnode;
     node->next = head->next;
     head->next = node;
}

4. Deklarasi menghapus node dari single 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;
     }
}

Contoh Program Single linked list :
//SINGLE LINKED LIST NON CIRCULAR
//IDE VS12 Express
//by [RS]
#include <iostream>
#include <conio.h>
#include <iomanip> //setw()
using namespace std;

struct node
{
      int data;
      node* next; // untuk menghubungkan dengan node lain, tipe data dibuat sama seperi aturan penggunaan pointer.
};

node* head;
node* tail;
node* curr;
node* entry;
node* del;

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

void input(int dt)
{
      entry = (node* )malloc(sizeof(node)); //alokasi memori
      entry->data = dt;
      entry->next = NULL;
      if(head==NULL)
      {
            head = entry;
            tail = head;
      }
      else
      {
            tail->next = entry;
            tail = entry;
      }
}

void hapus()
{
      int simpan;
      if(head==NULL)
      {
            cout<<"\nlinked list kosong, penghapusan tidak bisa dilakukan"<<endl;
      }
      else
      {
            simpan  = head ->data;
            cout<<"\ndata yang dihapus adalah "<<simpan<<endl;
            //hapus depan
            del = head;
            head = head->next;
            delete del;
      }
}

void cetak()
{
      curr = head;
      if(head == NULL)
            cout<<"\ntidak ada data dalam linked list"<<endl;
      else
      {
            cout<<"\nData yang ada dalam linked list adalah"<<endl;
            cout<<setw(6);
            while(curr!=NULL)
            {
                  cout<<curr->data<<"->";
                  curr = curr->next;
            }
            cout<<endl;
      }

}

void menu()
{
      char pilih, ulang;
      int data;

      do
      {
      system("cls");
      cout<<"SINGLE LINKED LIST NON CIRCULAR"<<endl;
      cout<<"-------------------------------"<<endl;
      cout<<"Menu : "<<endl;
      cout<<"1. Input data"<<endl;
      cout<<"2. Hapus data"<<endl;
      cout<<"3. Cetak Data"<<endl;
      cout<<"4. Exit"<<endl;
      cout<<"Masukkan pilihan Anda : ";
      cin>>pilih;

      switch(pilih)
      {
      case '1' :
            cout<<"\nMasukkan data : ";
            cin>>data;
            input(data);
            break;
      case '2' :
            hapus();
            break;
      case '3' :
            cetak();
            break;
      case '4' :
            exit(0);
            break;
      default :
            cout<<"\nPilih ulang"<<endl;
      }
      cout<<"\nKembali ke menu?(y/n)";
      cin>>ulang;
      }while(ulang=='y' || ulang=='Y');
}


int main()
{

      inisialisasi();
      menu();

      return EXIT_SUCCESS;
}

  
Output

Tidak ada komentar:

Posting Komentar

Follow Us @joseandreanhalomoan