Kamis, 12 April 2018

Linked list Node Insert Kiri, Insert Kanan, Insert Tengah, Delete Kiri, Delete Kanan, Delete Tengah

STRUKTUR DATA - Linked List

Linked List

Linked List atau dikenal juga dengan sebutan senarai berantai adalah struktur data yang terdiri dari urutan record data dimana setiap record memiliki field yang menyimpan alamat/referensi dari record selanjutnya (dalam urutan). Elemen data yang dihubungkan dengan link pada Linked List disebut Node. Biasanya didalam suatu linked list, terdapat istilah head dan tail. 
  • Head adalah elemen yang berada pada posisi pertama dalam suatu linked list
  • Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list
Yang akan di jabarkan di sini adalah
  • Penambahan data di tengah
  • Penghapusan list di depan
  • Penghapusan list di belakang
  • Penghapusam list di tengah
Langsung saja ke skript bahasa c++ nya di bawah ini


Tambah awal
#include <iostream>
#include <cstdlib>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
using namespace std;
struct node
{
  string urut;
  node *next;
};
node *awal_ptr = NULL;
  node *posisi;
  int option = 0;
void tambah_awal_list()
{
  node *baru;
  baru = new node;
  cout << "Masukkan Data Anda     : ";
  cin >> baru->urut;
  baru->next = NULL;
  if(awal_ptr == NULL)
  {
    awal_ptr=baru;
    awal_ptr->next = NULL;
  }
  else
  {
    baru->next = awal_ptr;
    awal_ptr = baru;
  }
}
void menambah_node_di_akhir()
  {
  node *temp, *temp2;
  temp = new node;
  cout << "Masukkan urut data    : ";
  cin >>   temp->urut;
  temp->next = NULL;
  if (awal_ptr == NULL)
  {
    awal_ptr = temp;
    posisi = awal_ptr;
  }
  else
  {
    temp2 = awal_ptr;
 
    while (temp2->next != NULL)
    {
      temp2 = temp2->next;   
    }
  temp2->next = temp;
  }
}
void display_list()
{
  node *temp;
  temp = awal_ptr;
  cout << endl;
cout << "Data [";
  if (temp == NULL)
    cout << "Data Masih kosong" << endl;
  else
  {
    while (temp != NULL)
    {
     cout << "" << temp->urut << ",";
   
     if (temp == posisi)
        cout << "     <<<< posisi node";

     temp = temp->next;
    }
    cout << "] ";
    cout << "end!" << endl;
  }
}
void hapus_awal_node()
{
  node *temp;
  temp = awal_ptr;
  awal_ptr = awal_ptr->next;
  delete temp;
}
void hapus_akhir_node()
{
  node *temp1, *temp2;
  if (awal_ptr == NULL)
    cout << "Data tidak ada!" << endl;
  else
  {
    temp1 = awal_ptr;
    if (temp1->next == NULL)
    {
      delete temp1;
      awal_ptr = NULL;
    }
    else
    {
      while (temp1->next != NULL)
      {
        temp2 = temp1;
        temp1 = temp1->next;
      }
      delete temp1;
      temp2->next = NULL;
    }

   }
}
void pindah_posisi_sebelumnya()
{
  if (posisi->next == NULL)
  cout << "Posisi anda pada akhir list." << endl;
  else
  posisi = posisi->next;
}
void pindah_posisi_berikutnya()
{
  if (posisi == awal_ptr)
    cout << "Posisi pada awal list" << endl;
  else
  {
    node *previous;
    previous = awal_ptr;
    while (previous->next != posisi)
    {
      previous = previous->next;
    }
    posisi = previous;
  }
}
void tambah_tengah_list()
{
  node *baru, *bantu;
  int posisi_sisip;
  if(awal_ptr != NULL)
  {

    cout<<"Disisip setelah Data urut Ke ? : ";
    cin>>posisi_sisip;
    baru =new node;
   bantu=awal_ptr; 
    for(int i=1;i<posisi_sisip-1;i++) {
      if(bantu->next != NULL)
        bantu=bantu->next;
      else
        break;
    }
  cout << "Masukkan data urut     : ";
  cin >> baru->urut;
  baru->next=bantu->next;
  bantu->next=baru;
  }
  else
  {
    cout<<"Data belum tersedia !! Masukan daya yang anda inginkan...\n";
    getch();
  }
}
void Hapus_tengah_list()
{
  int banyakdata,posisi_hapus,poshapus;
  node *hapus, *bantu;
  if(awal_ptr != NULL)
  {
    cout<<" Posisi data yang akan di hapus : ";
    cin>>posisi_hapus;
    banyakdata=1;
    bantu=awal_ptr;
    while(bantu->next != NULL)
    {
      bantu=bantu->next;
      banyakdata++;
    }
    if((posisi_hapus<1)||(posisi_hapus>banyakdata))
    {
      cout<<"Data belum tersedia !! Masukan daya yang anda inginkan...\n";
    }
    else
    {
      bantu=awal_ptr;
      poshapus=1;
      while(poshapus<(posisi_hapus-1))
      {
        bantu=bantu->next;
        poshapus++;
      }
      hapus=bantu->next;
      bantu->next=hapus->next;
      delete hapus;
    }
 }
 else
    cout<<"Data Tidak di temukan, tidak dapat menghapus data di tengah! ";
 getch();
}
int init(int nilai){
 node *baru;
  baru = new node;
  baru->urut=nilai;
  baru->next = NULL;
  if(awal_ptr == NULL)
  {
    awal_ptr=baru;
    awal_ptr->next = NULL;
  }
  else
  {
    baru->next = awal_ptr;
    awal_ptr = baru;
  }
}
int main()
{
   awal_ptr = NULL;
  do
  {
  system("cls");
    display_list();
    cout << endl;
    cout << "Menu Utama ............................. : " << endl;
    cout << "0. Keluar  ............................. :" << endl;
    cout << "1. Tambah di awal ...................... :" << endl;
    cout << "2. Tambah di akhir...................... :" << endl;
    cout << "3. Tambah di tengah .................... :"<< endl;
    cout << "4. Hapus list awal  .................... :" << endl;
    cout << "5. Hapus list akhit .................... :" << endl;
    cout << "6. Hapus list tengah.................... :" << endl;
    cout << "7. Pindah posisi pointer ke berikutnya.. :" << endl;
    cout << "8. Pindah posisi pointer ke sebelumnya.. :" << endl;
    cout << endl <<"Masukan pilihan >>";
    cin >> option;
switch (option)
 {
  case 1 : tambah_awal_list();
    break;
  case 2 : menambah_node_di_akhir();
    break;
  case 3 : tambah_tengah_list();
    break;
  case 4 : hapus_awal_node();
    break;
  case 5 : hapus_akhir_node();
    break;
  case 6 : Hapus_tengah_list();
    break;
  case 7 : pindah_posisi_sebelumnya();
    break;
  case 8 : pindah_posisi_berikutnya();
  }
 }
while (option != 0);
}

Infolebih lanjut anda dapat mengunduh program nya di link berikut ini
Download
Referensi dan sumber :
http://sfandrianah.blogspot.co.id/2015/11/linked-list-node-insert-kiri-insert.html?m=1

Tidak ada komentar:

Posting Komentar