Kamis, 12 April 2018

Program Double link list pada c++

STRUKTUR DATA -Double 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. 
Beda nya dengan single ling list di double link list ini bisa memasukan atau menginput lebih dari satu
  • 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
Untuk lebih lanjut nya langsung ke TKP
Langsung saja ke skript bahasa c++ nya di bawah ini




#include <iostream>
#include <conio.h>
#include <stdio.h>
int pil;
void pilih();
void buat_baru();
void tambah_belakang();
void tambah_depan();
void hapus_belakang();
void hapus_depan();
void tampil();
void tambah_tengah();
void hapus_tengah();
struct node
{
int nama [20];
int umur;
float tinggi;
node *prev, *next;
};
node *baru, *head=NULL, *tail=NULL,*hapus,*bantu,*bantu2;
void main()
{
do
{
system("cls");
cout<<"MENU DOUBLE LINKEDLIST"<<endl;
cout<<"1. Tambah Depan"<<endl;
cout<<"2. Tambah Belakang"<<endl;
cout<<"3. Hapus Depan"<<endl;
cout<<"4. Hapus Belakang"<<endl;
cout<<"5. Tampilkan"<<endl;
cout<<"6. Tambah Tengah"<<endl;
cout<<"7. Hapus Tengah"<<endl;
cout<<"8. Selesai"<<endl;
cout<<"Pilihan Anda : ";
cin>>pil;
pilih();
} while(pil!=8);
}
pilih()
{
if(pil==1)
tambah_depan();
else if(pil==2)
tambah_belakang();
else if(pil==3)
hapus_depan();
else if(pil==4)
hapus_belakang();
else if(pil==5)
tampil();
else if(pil==6)
tambah_tengah();
else if(pil==7)
hapus_tengah();
else
cout<<"selesai";
}
void buat_baru()
{
baru = new(node);
cout<<"input nama : ";cin>>baru->nama;
cout<<"input umur : ";cin>>baru->umur;
cout<<"input tinggi : ";cin>>baru->tinggi;
baru->prev=NULL;
baru->next=NULL;
}
void tambah_belakang()
{
buat_baru();
if(head==NULL)
{
head=baru;
tail=baru;
}
else
{
tail->next=baru;
baru->prev=tail;
tail=baru;
}
cout<<endl<<endl;
tampil();
}
void tambah_depan()
{
buat_baru();
if(head==NULL)
{
head=baru;
tail=baru;
}
else
{
baru->next=head;
head->prev=baru;
head=baru;
}
cout<<endl<<endl;
tampil();
}
void hapus_depan()
{
if (head==NULL)
cout<<"Kosong";
else if (head->next==NULL)
{
hapus=head;
head=NULL;
tail=NULL;
delete hapus;
}
else
{
hapus=head;
head=hapus->next;
head->prev=NULL;
delete hapus;
}
cout<<endl<<endl;
tampil();
}
void hapus_belakang()
{
if (head==NULL)
cout<<"Kosong";
else if (head->next==NULL)
{
hapus=head;
head=NULL;
tail=NULL;
delete hapus;
}
else
{
hapus=tail;
tail=hapus->prev;
tail->next=NULL;
delete hapus;
}
cout<<endl<<endl;
tampil();
}
void tampil()
{
if (head==NULL)
cout<<"Kosong";
else
{
bantu=head;
while(bantu!=NULL)
{
cout<<" nama : "<<bantu->nama;
cout<<" umur : "<<bantu->umur;
cout<<" tinggi : "<<bantu->tinggi<<endl;
bantu=bantu->next;
}
}
getch();
}

void tambah_tengah()
{
     int sisip;
     cout<<"Masukan Posisi Sisip Anda : ";cin>>sisip;
     bantu=head;

     for(int i=1;i<sisip-1;i++)
     {
       bantu=bantu->next;
     }

     buat_baru();

     bantu2=bantu->next;
     bantu->next=baru;
     baru->prev=bantu;
     baru->next=bantu2;
     bantu2->prev=baru;
}

void hapus_tengah()
{
  int sisip;
   cout<<"Masukan Posisi Sisip Anda : ";cin>>sisip;
   bantu=head;

   for(int i=1;i<sisip-1;i++)
   {
    bantu=bantu->next;
   }
   hapus=bantu->next;
   bantu2=hapus->next;
   bantu->next=hapus->next;
   bantu2->prev=bantu;
   delete hapus;

}

Untuk program tuh nya unduh di link berikut INI

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

Program Pointer C++

Pengertian pointer

Pointer adalah penunjuk suatu variabel. Karena menunjuk suatu variabel, maka pointer wajib memiliki alamat dari variabel yang ditunjuknya. Kadangkala dalam program yang besar, penghematan memori wajib untuk dilakukan. Dengan mekanisme copy dan paste nilai variabel satu kedalam variabel lain, akan sangat memboroskan memori. Dengan mekanisme pointer, suatu variabel dalam suatu fungsi dapat diakses oleh fungsi yang lain.

Deference (&)

Deference (&) merupakan suatu operator yang berfungsi untuk menanyakan alamat dari suatu variabel. Apabila kamu memberikan simbol & pada awal variabel dan mencetak hasilnya pada jendela CLI, maka yang akan tercetak adalah alamat dari variabel tersebut bukan nilai yang ditampung oleh variabel tersebut. Berikut contoh programnya:
#include <iostream>
using namespace std;
int main(){
int a = 5;
cout<<"Alamat Variabel a adalah :"<<&a<<endl;
cout<<"Nilai Variabel a adalah :"<<a<<endl;
return 0;
}

Hasil nya sebagai berikut:



Pointer dan array

Tahukah kamu bahwa jika kamu menuliskan sebuah array tanpa tanda kurung kotak ([]) maupun indeksnya, maka array tersebut menunjuk atau bersi alamat elem pertama dari array tersebut. Misalkan kamu membuat sebuah pointer bertipe int dengan nama pointerArray dan sebuah array dengan tipe yang sama yaitu int dengan nama nilaiArray, maka pemberian nilai berikut sah dan dapat dilakukan, Berikut adalah sintak program nya:


#include <iostream>
using namespace std;
int main(){
int nilaiArray[5] = {2,5,4,6,7};
int *pointerArray;
pointerArray = nilaiArray;
cout<<"Nilai pada elemen 0 nilaiArray adalah = "<<nilaiArray[0]<<endl;
cout<<"Nilai pada elemen 0 nilaiArray (Pointer) adalah = "<<*pointerArray<<endl;
pointerArray++; // naikan alamat yang ditunjuk pointer sejauh 1 integer
*pointerArray = 10; //Ubah nilai elemen 1 array (nilaiArray) menjadi 10
cout<<"Nilai pada elemen 1 nilaiArray adalah = "<<nilaiArray[1]<<endl;
cout<<"Nilai pada elemen 1 nilaiArray (Pointer) adalah = "<<*pointerArray<<endl;
pointerArray = nilaiArray; //kembalikan pointer pada elemen pertama
cout<<endl;
cout<<"Akses nilai semua array dengan pointer dan looping for"<<endl;
for (int i=0; i<5; i++){
 cout<<"Nilai indeks ["<<i<<"] adalah = "<<*(pointerArray+i)<<endl;
}
return 0;
}


Maka hasil nya akan seprti berikut:



Dari hasil di atas, dapat kamu lihat bagaimana cara mengakses nilai array dengan menggunakan pointer.
Suatu pointer bertipe int hanya dapat digunakan untuk menunjuk pada variabel int. Sebab, tipe data tersebut akan menentukan sifat pointer ketika alamat pointer tersebut dilakukan increment. Begitu juga untuk tipe data yang lain.
Pointer sebagai parameter fungsi
Seperti halnya dengan array, pointer dapat digunakan sebagai parameter suatu fungsi. Karena sifat pointer yang hanya sebagai penunjuk, maka setiap perubahan yang terjadi pada parameter, sebenarnya terjadi pada variabel yang ditunjuk bukan pada variabel pointer. Berikut Mimin contohkan program sederhananya:
#include <iostream>
using namespace std;
void tambah(int *angka){
*angka +=20;
}
int main(){
int nilai = 10;
cout<<"Nilai variabel nilai adalah = "<<nilai<<endl;
tambah(&nilai); //Memasukkan alamat variabel nilai pada fungsi tambah
cout<<"Nilai variabel nilai adalah = "<<nilai<<endl;
return 0;
}

Dan berikut adalah hasil nya:


Pada program diatas, dimana ketika alama suatu variabel diberikan sebagai parameter fungsi, nilai 20 akan ditambahkan pada alamat tersebut. Perbedaan parameter berupa pointer dan non-pointer adalah, pada variabel non-pointer, ketika kamu ingin memasukkan nilai pada sebuah variabel kedalam parameter, kamu harus memasukkan nilai dari variabel tersebut. Untuk parameter berupa pointer, kamu cukup memasukkan alamat variabel yang menampung nilai dengan operator (&) kedalam parameter fungsi

Referensi : http://www.sinauarduino.com/artikel/pointer-pada-pemrograman-cpp/

Klasemen liga bola program C++

Assalamualaikum WR.WB
Di sini saya akan sedikit menampilkan ( Review) program klasemen liga bola menggunakan bahasa program C++

Langsung saja ke TKP di bawah


do{
club();
system("cls");
cout<<"\t         Program klasemen liga sepak bola"<<endl;
cout<<"=============================================================="<<endl;
cout<<"\t\t           Pilih menu"<<endl;
cout<<"=============================================================="<<endl;
cout<<"\t\t||[1] = Daftar klub        ||"<<endl;
cout<<"\t\t||[2] = Entry Pertandingan ||"<<endl;
cout<<"\t\t||[3] = Klasemen           ||"<<endl;
cout<<"\t\t||[4] = Keluar             ||"<<endl;
cout<<"=============================================================="<<endl;
cout<<"Masukan pilihan anda  : ";cin>>kategori;;cout<<endl;
getch;

Skript di atas Merupakan menu utama untuk program ini sendiri



Itu adalah tampilan dari script di atas

switch(kategori){
case 1 :
system("cls");
cout<<"=========================="<<endl;
cout<<"|----Daftar Nama Klub----|"<<endl;
cout<<"|========================="<<endl;
cout<<"|  1 |  Persib           |"<<endl;
cout<<"|  2 |  Arema            |"<<endl;
cout<<"|  3 |  Bali United      |"<<endl;
cout<<"|  4 |  Semen padang     |"<<endl;
cout<<"|  5 |  Persiba          |"<<endl;
cout<<"|  6 |  Perseru Serui    |"<<endl;
cout<<"|  7 |  SriwijayaFC      |"<<endl;
cout<<"|  8 |  MitraKukar       |"<<endl;
cout<<"|  9 |  Persipura        |"<<endl;
cout<<"| 10 |  Madura United    |"<<endl;
cout<<"| 11 |  Persija          |"<<endl;
cout<<"| 12 |  BorneoFC         |"<<endl;
cout<<"| 13 |  BhayangkaraFC    |"<<endl;
cout<<"| 14 |  BaritoP utera    |"<<endl;
cout<<"| 15 |  PersegresGU      |"<<endl;
cout<<"| 16 |  PSMM akasar      |"<<endl;
cout<<"=========================="<<endl;
getch;
break;



Script dan gambar tampilan di atas merupakan daftar tim yang akan bertanding, daftar tim yang akan bertanding sebelum nya sudah di tentukan.

case 2 :
system("cls");
cout<<"|===============PERINGATAN================|"<<endl;
cout<<"|Jika Anda belum mengetahui nama klub     |"<<endl;
cout<<"|harap melihat terlebih dahulu DAFTAR KLUB|"<<endl;
cout<<"==========================================="<<endl;

cout<<"catatan : masukan angka yang sesuai dengan urutan klub"<<endl;

cout<<"\nTim Tuan rumah : ";cin>>home;cout<<"   "<<klub[home-1];cout<<endl;
cout<<"Goal yang dimasukan : ";cin>>goal[home-1];cout<<endl;
cout<<"Tim tamu : ";cin>>away;cout<<"   "<<klub[away-1];cout<<endl;
cout<<"Goal yang dimasukan : ";cin>>goal[away-1];cout<<endl;

cout<<"\nHOME                  AWAY"<<endl;
cout<<klub[home-1]<<"            "<<klub[away-1]<<endl;
cout<<"       "<<goal[home-1]<<"      vs       "<<goal[away-1]<<endl;

if(goal[home-1]>goal[away-1]){
menang[home-1]=menang[home-1] + 1;
kalah[away-1]=kalah[away-1] + 1;
}

else if(goal[home-1]<goal[away-1]){
menang[away-1]=menang[away-1] + 1;
kalah[home-1]=kalah[home-1] + 1;
}

else if(goal[home-1]==goal[away-1]){
seri[home-1]=seri[home-1] + 1;
seri[away-1]=seri[away-1] + 1;
}

poin[home-1] =  (menang[home-1]*3) + seri[home-1];
poin[away-1] =  (menang[away-1]*3) + seri[away-1];

getch;
break;



Gambar dan script diatas merupakan tampilan menu Entry Pertandingan, dimana anda akan menginputkan atau memasukan nama klub dan jumlah goal yang dihasilkan.


case 3 :
system("cls");
cout<<"=================================================="<<endl;
cout<<"================Tabel Klasemen Liga==============="<<endl;
cout<<"--------------------------------------------------"<<endl;
cout<<"|NO| Nama Klub           |  M  |  S  |  K  |  P  |"<<endl;
cout<<"| 1| Persib                 "<<menang[0]<<"     "<<seri[0]<<"     "<<kalah[0]<<"     "<<poin[0]<<"  |"<<endl;
cout<<"| 2| Arema                  "<<menang[1]<<"     "<<seri[1]<<"     "<<kalah[1]<<"     "<<poin[1]<<"  |"<<endl;
cout<<"| 3| Bali United            "<<menang[2]<<"     "<<seri[2]<<"     "<<kalah[2]<<"     "<<poin[2]<<"  |"<<endl;
cout<<"| 4| Semen Padang           "<<menang[3]<<"     "<<seri[3]<<"     "<<kalah[3]<<"     "<<poin[3]<<"  |"<<endl;
cout<<"| 5| Persiba                "<<menang[4]<<"     "<<seri[4]<<"     "<<kalah[4]<<"     "<<poin[4]<<"  |"<<endl;
cout<<"| 6| Perseru Serui          "<<menang[5]<<"     "<<seri[5]<<"     "<<kalah[5]<<"     "<<poin[5]<<"  |"<<endl;
cout<<"| 7| SriwijayaFC            "<<menang[6]<<"     "<<seri[6]<<"     "<<kalah[6]<<"     "<<poin[6]<<"  |"<<endl;
cout<<"| 8| Mitra Kukar            "<<menang[7]<<"     "<<seri[7]<<"     "<<kalah[7]<<"     "<<poin[7]<<"  |"<<endl;
cout<<"| 9| Persipura              "<<menang[8]<<"     "<<seri[8]<<"     "<<kalah[8]<<"     "<<poin[8]<<"  |"<<endl;
cout<<"|10| Madura United          "<<menang[9]<<"     "<<seri[9]<<"     "<<kalah[9]<<"     "<<poin[9]<<"  |"<<endl;
cout<<"|11| Persija                "<<menang[10]<<"     "<<seri[10]<<"     "<<kalah[10]<<"     "<<poin[10]<<"  |"<<endl;
cout<<"|12| BorneoFC               "<<menang[11]<<"     "<<seri[11]<<"     "<<kalah[11]<<"     "<<poin[11]<<"  |"<<endl;
cout<<"|13| BhayangkaraFC          "<<menang[12]<<"     "<<seri[12]<<"     "<<kalah[12]<<"     "<<poin[12]<<"  |"<<endl;
cout<<"|14| Barito Putra           "<<menang[13]<<"     "<<seri[13]<<"     "<<kalah[13]<<"     "<<poin[13]<<"  |"<<endl;
cout<<"|15| PersegresGU            "<<menang[14]<<"     "<<seri[14]<<"     "<<kalah[14]<<"     "<<poin[14]<<"  |"<<endl;
cout<<"|16| PSMMakasar             "<<menang[15]<<"     "<<seri[15]<<"     "<<kalah[15]<<"     "<<poin[15]<<"  |"<<endl;
cout<<"=================================================="<<endl;
getch;
break;


Gambar diatas merupakan menu dari tampilan dari menu Tabel Klasemen, yang menampilkan berapa jumlah Menang, Seri, Kalah, dan Poin (M, S, K, & P) dari klub yang tertera.
Untuk info lebih lanjut anda bisa unduh link dibawah ini.

Anda bisa unduh program nya Di sini gan