Single Linked List

Pada materi sebelumnya sudah dibahas mengenai pengertian Linked List. Linked List (senarai berantai) terdiri dari simpul (Node),  Pointer, dan data. elemen awal yang diakses dosebit dengan pointer head. guna pointer untuk apa? guna pointer adalah untuk menyimpan alamat memory. data berisi tentang nilai yang dimasukkan.

misalnya ada 3 node dengan data 12, 56 dan 78.

Pada data 1 bernilai 12 maka data tersebut akan tersimpan pada alokasi memori 1003, dan alokasi memori selanjutnya 1005. data 2 bernilai 56 tersimpan pada alokasi memori 1005 dan alokasi memori selanjutnya yaitu 1006. dan yang terakhir data bernilai 78 disimpan pada alamat memory 1006. pada node terakhir tidak ada alokasi memori selanjutnya oleh karena itu pointer selanjutnnya bernilai null.

Elemen-elemen linked list dialokasikan secara dinamis dengan menggunakan malloc.

Deklarasi Single Linked List

struct node
{
      int data;
      node* next; //penghubung dengan node lainnya
};

Inisialisasi di mana head = null dan tail=null

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

Operasi pada Single Linked List ada 3 yaitu:

  1. Mencetak/Menampilkan Node
  2. Menyisipkan Node
  3. Menghapus Node
#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* phead;
node* ptail;
node* pcurr;
node* pinput;
node* del;

void inisialisasi()
{
      phead = NULL;
      ptail = NULL;
}

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

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

}

void cetak()
{
      pcurr = phead;
      if(phead == NULL)
            cout<<"\ntidak ada data dalam linked list"<<endl;
      else
      {
            cout<<"\nData yang ada dalam linked list adalah"<<endl;
            cout<<setw(6);
            while(pcurr!=NULL)
            {
                  cout<<pcurr->data<<"->";
                  pcurr = pcurr->next;
            }
cout<<"NULL";
            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;
}