Saturday, July 21, 2012

Struktur Data


Rangkuman Struktur Data


1.      Pemetaan atau Skema Stuktur Data



2.      Pengertian Struktur data
Struktur data adalah cara menyimpan atau merepresentasikan data di dalam komputer agar bisa dipakai secara efisien.
-        Sedagkan data adalah representasi dari fakta dunia nyata
-        Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau dipresentasikan
dalam bentuk tulisan, suara.
#catatan : hanya teks yang kita pakai.

Dalam teknik pemrograman, struktur data berarti tata letak data yang berisi kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user) atau pun kolom yang hanya digunakan untuk keperluan pemrograman yang tidak tampak oleh pengguna. Setiap baris dari kumpulan kolom-kolom tersebut dinamakan catatan (record). Lebar kolom untuk data dapat berubah dan bervariasi.
Ada kolom yang lebarnya berubah secara dinamis sesuai masukan dari pengguna, dan juga ada kolom yang lebarnya tetap. Dengan sifatnya ini, sebuah struktur data dapat diterapkan untuk pengolahan database (misalnya untuk keperluan data keuangan) atau untuk pengolah kata (word processor) yang kolomnya berubah secara dinamis. Contoh struktur data dapat dilihat pada berkas-berkas lembar-sebar (spreadsheet), pangkal-data (database), pengolahan kata, citra yang dipampat (dikompres), juga pemampatan berkas dengan teknik tertentu yang memanfaatkan struktur data.


Struktur Data Umum
1.      ARRAY / RECORD
Array adalah struktur data ayang terdiri dari kumpulan – kumpulan elemen (nilai ataau variable) masing – masing diidentifikasi oleh satu indeks array atau kunci. Array juga salah satu struktur data yang palingtua dan paling penting dan digunakan oleh hampir setiap program. Banyak yang menerapkan struktur data dalam pembuatan daftar dan string.
Array merupakan kumpulan dari nilai-nilai data yang bertipe sama dalam urutan tertentu yang menggunakan sebuah nama yang sama. Nilai-nilai data dari di suatu array disebutelemen-elemen array. Letak urutan dari suatu elemen array ditunjukkan oleh suatu indeks. Array dapat berdimensi, satu, dua, tiga atau lebih. Bentuk dimensi array berupa:Dimensi satu (one-dimensional array) mewakili bentuk vektor Dimensi dua (two-dimensional array) mewakili bentuk dari suatu matriks atau tabel Dimensi tiga (three-dimensional array) mewakili bentuk ruang.
Array biasa digunakan dalam setiap bahasa pemrograman termasuk bahasa C, C++, pascal , java , dll.
          Logika sederhananya array itu bisa disamakan dengan dua orang dengan nama yang sama didalam suatu komunitas, untuk membedakan antara nama yang satu atau dengan nama yang lain maka diberikan initial tambahan untuk setiap nama.
Deklarasi Array
Didalam penulisan bahasa pemograman setiap penggunaan array harus dideklarsikan terlebih dahulu. Pendeklarasian array diawali dengan nama variabel array diikuti dengan indeks array yang dituliskan didalam tanda “[ ]” , diikuti dengan kata cadangan of dan tipe data yang dibutuhkan.
Bentuk Umum Penulisan
Tanda_pengenal : array [..tipe index ..] of tipe data;
Contoh :
Var
A       :           array[1..4]
_of_integer;
B       :           array[1..5]
_of_string;
C       :           array[1..10] of real;
Keterangan :
A,B,C merupakan tanda pengenal/ nama variabel dari array;
1..4 : merupakan tipe indek dari array, yang menunjukan banyaknya data yang mampu disimpan.
Integer : menunjukan bahwa data yang diinput berupa bilangan bulat.

ü  Perbedaan Array statis dan dinamis
Array statis itu tidak dapat diubah lagi banyaknya tempat penyimpananan. Array statis merupakan pointer. Sedangkan array dinamis bisa mengubah banyaknya elemen yang dapat disimpan dan dapat mengembangkan array dinamis dengan menggunakan pointer.
Pemanfaatan Array adalah struktur data yang sering digunakan dalam pemrograman untuk menyimpan data yang akan diolah atau diproses seperti proses sorting aaray adalah struktur data yang terdiri dari kumpulan variable yang bertipe sama.


ü  Array 1 dimensi :
Elemen – elemen array dapat diakses oleh program menggunakan suatu indeks tertentu. Pengaksesan elemen array dapat dilakukan berurutan atau random berdasarkan indeks tertentu secara langsung. Pengisian dan pengambilan nilai pada indeks tertentu dapat dilakukan dengan mengeset nilai atau menampilakna nilai pada indeks yang dimaksud.

Memori statis / variabel statis adalah variabel yang dideklarasikan dan dinamai pada saat penulisan program. Memori yang dipakai oleh variabel ini akan tetap ada (dianggap terpakai) selama program dimana variabel tersebut di deklarasikan sedang dijalankan.

ü  Perbedaan memori dinamis dan statis adalah :
Memori Dinamis :
-   Variabel yang dibuat dan mungkin juga dihapus / rusak selama eksekusi program.
-   Variabel dinamis belum nyata ada pada saat program di komplikasi.
-   Variabel tidak dapat dinamai pada saat program dibuat / ditulis.
-   Cara mengakses menggunakan pointer.

Memori Statis :
-  Tidak dapat dibuat atau pun dihapus pada saat eksekusi program dan variabel pointer tidak   dapat digunakan sebagai  menunjuk kepada variabel statis.
-   Dapat diakses hanya dengan menggunakan namanya.
-   Bila ingin menunjuk pada satu posisi dalam array maka dapat melakukan nya dengan menggunakan indeks / variabel yang bertype seperti indeks dari array.

Sebagai contoh di sini saya akan membahas tentang pengalokasian array, dimana kita harus menggunakan array 1 dimensi dan dimana kita menggunakan array 2 dimensi.
Array adalah kumpulan data – data bertype sama dengan menggunakan nama yang sama. Dengan menggunakan array, sejumlah variabel dapat memakai nama yang sama. Antara satu variabel dengan variabel yang lain di dalam array dibedakan berdasarkan subscript. Sebuah subscipt berupa bilangan di dalma tanda kurung siku. Melalui subscipt inilah masing – masing elemen array dapat di akses. Nilai subscript pertama adalah 0.
Deklarasi :



Array dibagi menjadi dua bagian, yaitu array 1 dimensi dan array 2 dimensi .
1.              Array 1 dimensi yaitu hanya ad baris / hanya ada kolom (satu axis (y/x) )
2.              Array 2 dimensi yaitu ada baris dan kolom (dua axis , x & y).

Penggunaan array 1 dimensi contohnya :
Program di bawah adalah untuk penginputan nama dengan menggunakan array 1 dimensi.
#include<constream.h>
void main()
{
 clrscr();
 char nama[5], x ;
 cout<<"Nama : "; cin>>nama;
 cout<<endl;
 for (x=0; x<=4; x++)
 {
  cout<<nama[x];
 }
 getch();
}

Penggunaan array dengan menggunakan 2 dimensi :
#include <constream.h>
void main()
{
 clrscr();
 int x;
 char nrp[5][7];
 int nil[5],total, jumdat;
 int rata;
 cout<<"=============================="<<endl;
 cout<<"| No  |              NRP    |   Nilai |"<<endl;
 cout<<"=============================="<<endl;
 cout<<"|     |            |         |"<<endl;
 cout<<"|     |            |         |"<<endl;
 cout<<"|     |            |         |"<<endl;
 cout<<"|     |            |         |"<<endl;
 cout<<"|     |            |         |"<<endl;
 cout<<"=============================="<<endl;
 cout<<"Mau Berapa Data(max 20):"; cin>>jumdat;
  for (x=1; x<=5; x++)

  {
   gotoxy(3,x+3);
   cout<<x;
   gotoxy(11,x+3);
   cin>>nrp[x];
   gotoxy(25,x+3);
   cin>>nil[x];
   total=total+nil[x];
  }
  gotoxy (1,10);
  cout<<"totalnya adalah :" <<total<<endl;
  cout<<"Rata - Rata adalah :"; cin>>rata;
  rata=
 getch();
}

Selain itu , array 2 dimensi digunakan pada pertambahan matriks, perkalian matriks, dll. Array 2 dimensi memiloiki dua buah tanda kurung [ ] [].
Contoh :
Char pahlawan [3] [15];
Char pahlawan [0] [15] = “Soekarno”;
Char pahlawan [1] [15] = “Diponegoro”;
Char pahlawan [2] [15] = “Soedirman”;
Array seperti itu lah yang disebut dengan array 2 dimensi.

2.      LINKED LIST
Linked list merupakan salah satu struktur data fundamental dalam membangun program. Sesuai namanya, linked list terdiri dari deretan node (yang berisikan data) dan link ke_node_lainnya.
Merupakan suatu struktur data pengembangan dari konsep ADT (Abstrak Data Type) yang bersifat dinamis. Linked List dapat dimanfaatkan secara effektif sesuai dengan keperluan. Linked List juga dapat benar – benar dihapus / dibersihkan dari memory.Linked List sebenarnya merupakan suatu typedata tersendiri. Ciri – ciri utama dari Linked List adalah, dia mempunyai minimal dua elemen utama. Elemen – elemen itu adalah data dan pointer untuk menunjukkan ke list berikutnya.
Linked List


Kita akan lebih efektif jika kita menggunakan konsep Linked List jika kita memerlukan suatu pengaksesan pada struktur data yang lebih dinamis. Konsep yang lebih cocok menggunakan linked list adalah : Stack, Queue, Tree, dan Graph.
Hal ini dikarenakan oleh sifat dinamis dari Linked List. Kita tidak perlu untuk mengetahui berapa block memory yang akan kita akses. Jadi, jika kita butuh block baru pada memory, tinggal menyisipkan pada kanan atau kiri list yang telah ada.
Untuk deretan node yang memiliki satu link ke node lain, kita menyebutnya sebagai singly-linked list, atau single linked list. Singly-linked list bisa diilustrasikan dengan barisan di mana setiap anggota barisan (node) berbaris menghadap ke satu arah dan anggota barisan memegang bahu anggota di depannya (link). Anggota paling depan cukup memegang udara kosong (null).

Untuk deretan node yang memiliki dua link ke node-node lain, kita menyebutnya sebagai doubly-linked list atau double linked list. Doubly-linked list bisa diilustrasikan dengan deretan orang di mana tangan kiri setiap anggota memegang tangan kanan anggota di sebelah kiri, dan tangan kanannya memegang tangan kiri anggota di sebelah kanan. Tangan kiri anggota paling kiri memegang udara kosong. Demikian juga dengan anggota paling kanan yang memiliki nasib sama: tangan kanannya memegang udara kosong.

Linked list bisa disusun linear atau circular. Ketika disusun circular, pada singly-linked list, anggota barisan yang tadi kita bahas tidak lagi memegang udara kosong, namun memegang bahu anggota paling belakang. Jadi, tidak pegel. Untuk circular doubly-linked list (atau doubly circularly linked list), nasib anggota paling kiri dan paling kanan juga berubah. Tangan kanan anggota paling kanan memegang tangan kiri anggota paling kiri.

Struktur data fundamental ini sangat berguna. Jadi, mahasiswa ilmu komputer yang mempelajari struktur data ini harus sungguh-sungguh mempelajarinya, walaupun harus berpusing-pusing. Linked list sendiri sudah berumur cukup tua dan dikembangkan_sejak_tahun_1955-56.


Struktur Linked List dalam Bahasa C
Struktur Data – Macam – macam Linked List, berikut merupakan macam – macam linked list :
ü  Singly Linked List :
Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya dan juga memiliki field yang berisi data.
Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang akan digunakan sebagai kondisi berhenti saat pembacaan linked list.
ü  Double Linked List :
Linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu: 1 field pointer yang menunjuk ke pointer berikutnya, 1 field pointer yang menunjuk ke pointer sebelumnya dan field yang berisi data dari node tersebut. Pointer next dan prev-nya menunjuk ke null.
ü  Single Circular Linked List :
Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri dari beberapa node maka pointer terakhirnya akan menunjuk ke pointer terdepannya.
ü  Double Circular Linked List :
Double Linked List yang pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular.
Jika dilihat pengaksesannya, Linear dan Circular Linked List dapat dibedakan sebagai berikut :
Linear Linked List
Circular Linked List
Tail.next dihubungkan ke null
Tail.next dihubungkan ke head
Pada perulangan, akan break pada now = null
Pada perulangan, akan break pada now = null
Method lebih sederhana
Method lebih sulit debandingkan dengan Linear linked list
Algoritma akan lebih sulit jika kita melakukan penyelesaian masalah dengan menggunakan konsep circular queue
Akan lebih mudah pada konsep – konsep tertentu salah satunya seperti konsep queue.

Apa itu Simpul dan Ekor
Daftar linier (Linear List)  adalah suatu struktur data umum yang terbentuk dari barisan hingga (yang terurut) dari satuan data, atau pun dari record.
Elemen dari daftar linier disebut simpul atau node. Daftar ini disebut linier karena susunan elemennya adalah linier, yaitu bahwa bagi setiap elemen selalu ada elemen setelah dan sebelumnya, kecuali pada elemen pertama dan terakhir.











Banyaknya simpul dalam suatu daftar linier dapat berubah-ubah, berbeda dengan array yang jumlah elemennya selalu tetap.
Penyisipan simpul berarti menambah suatu simpul/elemen baru ke dalam sebuah list.

Kamar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Nama
G

D
A


C

B
F
E



Usia
21

24
13


19

15
26
25



Link


11
9


3

7
0
10



                                                      
Dengan Head dan tail
ü  Menggunakan 2 pointer, head dan tail.
ü  Head selalu menunjuk node pertama dan tail selalu menunjuk node terakhir
Sebelumnya kita harus mendeklarasikan dulu pointer head :           
TNode *head, *tail;
Setelah kita mendeklarasikan pointer head, kita belum bisa secara langsung mendeklarasikan node yang dituju. Sehingga pointer head harus dibuat bernilai null terlebih dahulu :
head = NULL;
tail = NULL;
untuk mengetahui apakah suatu Linked List kosong atau tidak, kita dapat mengetahuinya dengan mengecek nilai dari pointer Tail-nya.
Int isEmpty()
{
If (tail == NULL)
Return 1;
Else
Return 0;
}
Kelebihandari Single Linked List dengan Head & Tail adalahpadapenambahan data di belakang, hanyadibutuhkan tail yang mengikat node baru saja tanpa harus menggunakan perulangan pointer bantu

Penambahan Data di belakang
void tambahBelakang(int databaru){
     TNode *baru,*bantu;
     baru = new TNode;
     baru->data = databaru;
     baru->next = NULL;
     if(isEmpty()==1){
     head=baru;
     tail=baru;
     tail->next = NULL;
     }
     else {
                 tail->next = baru;
                 tail=baru;
     }
     printf("Data masuk\n“);
}





3.      STACK
Stack atau tumpukan merupakan sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First Out), yaitu data yang terakhr kali dimasukkan akan pertama kali keluar dari stack tersebut. Stack dapat diimplementasikan sebagai representasi berkait atau kontigu (dengan tabel fix).

Ciri Stack :
·                 Elemen TOP (puncak) diketahui
·                 penisipan dan penghapusan elemen selalu dilakukan di TOP
·                 LIFO
Pemanfaatan Stack :
·                 Perhitungan ekspresi aritmatika (posfix)
·                 algoritma backtraking (runut balik)
·                 algoritma rekursif
Operasi Stack yang biasanya :
1.              Push (input E : typeelmt, input/output data : stack): menambahkan sebuah elemen ke stack
2.              Pop (input/output data : stack, output E : typeelmt ) : menghapus sebuah elemen stack
3.              IsEmpty ()
4.              IsFull ()
5.              dan beberapas selektor yang lain


Contoh programnya :

#include<conio.h>
#include<iostream.h>
#include<string.h>
struct simpul
{
char phn[20];
char nma[20];
struct simpul *next;
};

class senarai
{
private:
          simpul *awal;
          simpul *hps;
          char phone[20];
          char name[20];
          char jawab;
public:
          senarai();
          void tambah(char ph[20],char nm[20]);
          void isi();
          void tampil();
          void cari();
          void hapus();
}data;

senarai::senarai()
{
awal=NULL;
}

void senarai::tambah(char ph[20], char nm[20])
{
struct simpul *baru;
baru= new simpul;
strcpy(baru->phn,ph);
strcpy(baru->nma,nm);
baru->next=awal;
awal=baru;
}

void senarai::isi()
{
 do
 {
  clrscr();
  cout<<"Data Nama dan No Telpon"<<endl;
  cout<<endl<<"Nama    : ";
  cin>>name;
  cout<<endl<<"Telepon : ";
  cin>>phone;
  data.tambah(phone,name);
  cout<<endl<<"Apakah Akan Menambah Data (Y/N) : ";
  cin>>jawab;
 }
 while (jawab=='Y' || jawab=='y');
}

void senarai::tampil()
{
 struct simpul *baca;
 int i;
 baca=awal;
 i=1;
 cout<<"ÄÄÄÄÄÄÄDAFTARÄÄÄÄÄÄÄ"<<endl;
 while (baca!=NULL)
  {
   cout<<endl<<i<<". Nama    : "<<baca->nma;
   cout<<endl<<ends<<ends<<ends<<"Telepon : "<<baca->phn;
   i++;
   baca=baca->next;
  }
}

void senarai::cari()
{
 char n[10];
 simpul *car;
 car=awal;
 data.tampil();
 cout<<endl<<endl<<"Pencarian Berdasarkan Nama"<<endl;
 cout<<endl<<"Masukan Nama: ";
 cin>>n;
 cout<<endl;
 while(car!=NULL)
 {
  if(strcmp(n,car->nma)==0)
  {
  cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
  cout<<" Nama    : "<<car->nma<<endl<<endl;
  cout<<" Telepon : "<<car->phn<<endl;
  cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
  }
  car=car->next;
 }
}

void senarai::hapus()
{
 hps=NULL;
 char n[10];
 simpul *car;
 simpul *posisi;
 car=awal;
 cout<<endl<<endl<<"Penghapusan"<<endl;
 cout<<endl<<"Masukan Nama Yang Akan Di Hapus: ";
 cin>>n;
 cout<<endl;
 while(car!=NULL)
 {
  if(strcmp(n,car->nma)==0)
  {
 // cout<<"Nama    : "<<car->nma<<endl<<endl;
  //cout<<"Telepon : "<<car->phn<<endl;
  car->nma;
  car->phn;
  posisi=car;
  }
  car=car->next;
 }
 if(posisi==NULL)
  cout<<"Nama Data Yang Akan Anda Hapus Tidak Ada Dalam List"<<endl;
 else
 {
/*  if(hps==NULL)
  {
   awal=awal->next;
  } */
 // else
//  {
   hps->next=posisi->next;
//  }
  delete posisi;
 }
 cout<<endl<<endl;
 data.tampil();
}



void main()
{
char opt1;
char opt2;
menu:
 clrscr();
 cout<<"ÄÄÄÄÄÄMENU UTAMAÄÄÄÄÄÄÄ"<<endl;
 cout<<endl<<endl;
 cout<<"1. Input Data Nama Dan Nomor Telepon"<<endl;
 cout<<"2. Tampilkan Data"<<endl;
 cout<<"3. Cari Data No Telepon By Nama"<<endl;
 cout<<"4. Hapus Data"<<endl;
 cout<<"5. Exit"<<endl;
 cout<<endl<<"Silakan Masukan Pilihan Anda (Misal.1): ";
 cin>>opt1;
 if (opt1=='1')
 goto a;
 else if (opt1=='2')
 goto b;
 else if (opt1=='3')
 goto c;
// else if (opt1=='4')
 //goto d;
 else
 goto e;
 a:
 {
 clrscr();
 data.isi();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto e;
 }
 b:
 {
 clrscr();
 data.tampil();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto e;
 }
 c:
 {
 clrscr();
 data.cari();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto e;
 }
/* d:
 {
 clrscr();
 data.hapus();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto e;
 }*/

 e:
 getch();
}



4.      QUEUE
Queue berarti antrian, queue merupakan salah satu contoh aplikasi dari pembuatan double linked list yang cukup sering kita temui dalam kehiduypan sehari-hari, misalnya saat Anda mengantri di loket untuk membeli tiket. Istilah yang cukup sering dipakai seseorang masuk dalam sebuah antrian adalah enqueue. Dalam suatu antrian, yang dating terlebih dahulu akan dilayani lebih dahulu.

Contoh programnya :

#include<conio.h>
#include<iostream.h>
#include<string.h>
struct simpul
{
char phn[20];
char nma[20];
struct simpul *next;
};

class senarai
{
private:
          simpul *awal;
          simpul *akhir;
          simpul *hps;
          char phone[20];
          char name[20];
          char jawab;
public:
          senarai();
          void tambah(char ph[20],char nm[20]);
          void isi();
          void tampil();
          void cari();
          void hapus();
}data;

senarai::senarai()
{
awal=NULL;
akhir=NULL;
}

void senarai::tambah(char ph[20], char nm[20])
{
struct simpul *baru;
baru= new simpul;
strcpy(baru->phn,ph);
strcpy(baru->nma,nm);
if (awal==NULL)
 {
 awal=baru;
 }
else
 {
 akhir->next=baru;
 }
akhir=baru;
akhir->next=NULL;
//baru->next=awal;
//awal=baru;
}

void senarai::isi()
{
 do
 {
  clrscr();
  cout<<"Data Nama dan No Telpon"<<endl;
  cout<<endl<<"Nama    : ";
  cin>>name;
  cout<<endl<<"Telepon : ";
  cin>>phone;
  data.tambah(phone,name);
  cout<<endl<<"Apakah Akan Menambah Data (Y/N) : ";
  cin>>jawab;
 }
 while (jawab=='Y' || jawab=='y');
}

void senarai::tampil()
{
 struct simpul *baca;
 int i;
 baca=awal;
 i=1;
 cout<<"ÄÄÄÄÄÄÄDAFTARÄÄÄÄÄÄÄ"<<endl;
 while (baca!=NULL)
  {
   cout<<endl<<i<<". Nama    : "<<baca->nma;
   cout<<endl<<ends<<ends<<ends<<"Telepon : "<<baca->phn;
   i++;
   baca=baca->next;
  }
}

void senarai::cari()
{
 char n[10];
 simpul *car;
 car=awal;
 data.tampil();
 cout<<endl<<endl<<"Pencarian Berdasarkan Nama"<<endl;
 cout<<endl<<"Masukan Nama: ";
 cin>>n;
 cout<<endl;
 while(car!=NULL)
 {
  if(strcmp(n,car->nma)==0)
  {
  cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
  cout<<" Nama    : "<<car->nma<<endl<<endl;
  cout<<" Telepon : "<<car->phn<<endl;
  cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
  }
  car=car->next;
 }
}

void senarai::hapus()
{
 hps=NULL;
 char n[10];
 simpul *car;
 simpul *posisi;
 car=awal;
 cout<<endl<<endl<<"Penghapusan"<<endl;
 cout<<endl<<"Masukan Nama Yang Akan Di Hapus: ";
 cin>>n;
 cout<<endl;
 while(car!=NULL)
 {
  if(strcmp(n,car->nma)==0)
  {
 // cout<<"Nama    : "<<car->nma<<endl<<endl;
  //cout<<"Telepon : "<<car->phn<<endl;
  car->nma;
  car->phn;
  posisi=car;
  }
  car=car->next;
 }
 if(posisi==NULL)
  cout<<"Nama Data Yang Akan Anda Hapus Tidak Ada Dalam List"<<endl;
 else
 {
/*  if(hps==NULL)
  {
   awal=awal->next;
  } */
 // else
//  {
   hps->next=posisi->next;
//  }
  delete posisi;
 }
 cout<<endl<<endl;
 data.tampil();
}



void main()
{
char opt1;
char opt2;
menu:
 clrscr();
 cout<<"ÄÄÄÄÄÄMENU UTAMAÄÄÄÄÄÄÄ"<<endl;
 cout<<endl<<endl;
 cout<<"1. Input Data Nama Dan Nomor Telepon"<<endl;
 cout<<"2. Tampilkan Data"<<endl;
 cout<<"3. Cari Data No Telepon By Nama"<<endl;
 cout<<"4. Hapus Data"<<endl;
 cout<<"5. Exit"<<endl;
 cout<<endl<<"Silakan Masukan Pilihan Anda (Misal.1): ";
 cin>>opt1;
 if (opt1=='1')
 goto a;
 else if (opt1=='2')
 goto b;
 else if (opt1=='3')
 goto c;
// else if (opt1=='4')
 //goto d;
 else
 goto e;
 a:
 {
 clrscr();
 data.isi();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto e;
 }
 b:
 {
 clrscr();
 data.tampil();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto e;
 }
 c:
 {
 clrscr();
 data.cari();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto e;
 }
/* d:
 {
 clrscr();
 data.hapus();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto e;
 }*/

 e:
 getch();
}

5.      TREE
Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan hubungan yang bersifat hierarkis (hubungan one to many) antara elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan elemen khusus yang disebut root atau akar.
Jenis-jenis Tree salah satunya adalah binnary tree dengan syarat bahwa setiap node hanya boleh memiliki maksimal 2 subtree dan kedua subtree tersebut harus terpisah.

Kita ambil contoh nama saya, maka binnary treenya adalah :


6.      POINTER

Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat lokasi suatu memori tertentu. Jadi isi dari variabel pointer merupakan alamat dari lokasi memori yang digunakan untuk menyimpan data dan bukan nilai data itu sendiri. Misalnya X adalah suatu variabel biasa yang berisi nilai karakter ‘J’. X bukan variabel pointer. Nilai dari X ini oleh kompiler C++ akan diletakkan di suatu lokasi memori tertentu. Nilai ini dapat diakses jika diketahui alamat memorinya. Untuk mengetahui alamat memori yang digunakan oleh variabel X dalam menyimpan nilai datanya dapat diketahui dengan ungkapan &X. Alamat tersebut dapat ditulis dengan mengambil sebuah variabel lagi yang disebut dengan variabel pointer, misalnya: Alamat_X = &X. Alamat_X adalah variabel pointer karena variabel ini menunjuk ke lokasi memori di mana nilai data dari variabel X disimpan.
Contoh pada sebuah baris program berikut:
char *Alamat_X, X;                                                 
X = ‘J’;
Alamat_X = &X;
Dari baris program di atas, dapat ditemukan bahwa:
Nilai X = ‘J’
Nilai Alamat_X = 2527:24C7


Dengan ilustrasi sebagai berikut : 

Ini berarti variabel X menyimpan nilai datanya yaitu ‘J’ pada alamat lokasi memori 2527:24C7. Alamat_X adalah variabel pointer yang menunjuk pada alamat lokasi memori yang digunakan oleh variabel X. Sebelum digunakan, variabel pointer harus dideklarasikan terlebih dahulu dengan diawali suatu asterisk (“*”).
Bahasa C/C++ menyediakan dua buah operator pointer, yaitu operator ‘&’ dan operator ‘*’. Operator ‘&’ digunakan untuk mendapatkan alamat lokasi memori yang digunakan oleh sebuah variabel biasa (dalam contoh di atas, &X digunakan untuk mendapatkan alamat memori yang digunakan oleh variabel X). Sedangkan operator ‘*’ digunakan untuk mendapatkan nilai data yang ditunjuk oleh variabel pointer pada alamat memori tersebut.
Contoh 1:
#include
#include
void main()
{
char *Alamat_X, X, Y, Z;
X = 'J';
Alamat_X = &X;
Y = X;
Z = *Alamat_X;
cout<<"Nilai variabel X adalah "<<
cout<<"Nilai variabel Y adalah "<<
cout<<"Nilai variabel Z adalah "<<
cout<<"Nilai variabel X berada di alamat memori ";printf("%p",Alamat_X);
}
Jika program ini dijalankan, akan didapatkan hasil: 

Pada contoh-contoh di atas, kita mengalokasikan alamat lokasi memori yang digunakan oleh sebuah variabel pointer dengan menggunakan variabel bantu (dalam hal ini adalah variabel X). Jika kita ingin menciptakan sebuah variabel pointer tanpa menggunakan bantuan variabel biasa, kita harus terlebih dahulu mengalokasikan alamat lokasi memori variabel pointer yang akan digunakan. Kompiler C++ tidak dapat mengalokasikan secara otomatis alamat lokasi memori sebuah variabel pointer pada saat pertama kali variabel tersebut dideklarasikan. Untuk mengatasi hal ini, kita dapat menggunakan alokasi dinamis yang dapat dilakukan dengan pemanggilan fungsi standar malloc() dengan prototipenya berada pada file malloc.h. Cara alokasi dinamis ini akan menggunakan memori yang masih kosong. Fungsi malloc() akan mengalokasikan secara dinamis blok memori yang masih kosong untuk digunakan oleh variabel pointer.


ü  Tujuan Penggunaan Pointer Dalam Bahasa C
Segala hal pasti memiliki tujuan tersendiri, begitu pula dengan pointer. Ada 2 tujuan penggunaan pointer di dalam bahasa C, yaitu :
1.      Mengirimkan “Parameter yang berupa variabel” ke dalam fungsi, artinya nilai variabel bisa diubah di dalam fungsi
int nama fungsi (int *b) {
*b = *b + 1;
}
main () {
int x=1;
nama_fungsi (&x);
printf (“%d”, x); // output :2, karena x diubah di dalam fungsi menjadi x=x+1;
}

2. Untuk membuat variabel DINAMIS (Bukan variabel Statis)
Contoh variabel STATIS dalam bahasa C :
#include <stdio.h>
main () {
int a[2], i;
for (1=0; i<2; i++) {
scanf (“%d”, &a[i]);
}
printf (“Anda mengetikkan :”);
for )i=0; i<2; i++) {
printf (“\n%d”, a[i]);
}
}
Contoh variabel DINAMIS dalam bahasa C :

Program dibuat lebih fleksibel, artinya… apabila kita belum mengetahui berapa banyak jumlah data yg akan diinput oleh operator, maka kita akan membuat program sedemikian rupa sehingga program menjadi fleksibel terhadap data yg akan diinput oleh operator.

ü  Bahaya Pointer
Ternyata pointer bisa menimbulkan bahaya, beberapa bahaya yang mungkin ada dengan menggunakan pointer :
1.              Sebagai_moniker.
Memory_leak, double delete, invalid memory access. Semuanya dapat dihindari dengan ownership analysis yang bagus (pada setiap saat, harus diketahui pihak  mana yang bertanggung jawab mendelete sebuah object). Jika hal ini sulit dilakukan, misalnya karena shared ownership, anda dapat menggunakan smart_pointer_atau_garbage_collector.
2.              Sebagai_iterator.
Array_out_of bound. Salah satu cara yang efektif menghindari hal ini
adalah dengan menggunakan_standard_algorithm.
3.              Sebagai_abstraksi_fixed_memory.
Tidak tahu, tetapi ini bukan mainan sembarang programmer.


ü  Bahasa_Pemrograman_tanpa_pointer_?
Tidak semua program menggunakan pointer, diantaranya yg tidak menggunakan pointer yaitu :
1.        Semua Bahasa pemrograman Fungsional, terutama yang murni , tidak
mengenal pointer atau memerlukan pointer. Akan tetapi bahasa ini
menggunakan model komputasi yang jauh berbeda, bukan abstract C machine.
2.        Beberapa bahasa pemrograman dengan reference semantik dapat mengklaim
mereka tidak memiliki pointer, akan tetapi setiap variabel sebenarnya
adalah pointer. Secara fisik mungkin reference tidak memiliki struktur
seperti pointer (biasanya merupakan data struktur yang lebih kompleks
sehingga lebih friendly terhadap garbage collector) tapi reference
tersebut memiliki fungsi yang mirip dengan pointer di C atau C++. Ada
yang bilang bahwa reference dalam bahasa - bahasa ini menyebabkan
optimasi lebih mudah karena tidak menyebabkan aliasing, tetapi optimasi
tersebut juga mungkin dilakukan di C dan C++ ( dengan restrict pointer,
sayangnya belum merupakan bagian dari standard C++).

Sebagai contoh, saya buat contoh program sederhana :
#include<conio.h>
#include<iostream.h>
void main()
{

clrscr();
float *a,*t,*Ls;
float alas,tinggi,luas;

a=&alas;
t=&tinggi;
Ls=&luas;

cout<<"Masukan nilai alas                                       : ";
cin>>alas;
cout<<"Masukan nilai tinggi                                    : ";
cin>>tinggi;
*Ls=(*a)*(*t)/2;

cout<<"Jadi luas segitiga adalah   : "<<*Ls<<endl;
cout<<"Alamat hasil perhitungannya : "<<Ls;
getch();
}



Pertama kali program dijalankan , maka program akan meminta inputan nilai alas terlebih dahulu.
Setelah nilai alas diinputkan lalu selanjutnya inputkan nilai tinggi.
Dan secara otomatis akan keluar Luas segitiganya dan alamat hasil perhitungannya di layar .
Seperti di bawah ini :






7.      STRUCTURE


Struct adalah tipe data yang dapat melakukan penyimpanan beberapa data yang saling terkait (seperti Nama, NRP, Alamat), sebagai suatu kesatuan, sehingga data-data tersebut seakan-akan menjadi suatu data tunggal. Pembuatan tipe data baru dalam C dilakukan dengan menggunakan kata kunci struct, yang merupakan kependekan dari structure (struktur).
Struktur merupakan pengelompokan variabel-variabel yang bernaung dalam satu nama yang sama.  Berbeda dengan array yang berisi kumpulan variabel-variabel yang bertipe sama dalam satu nama, maka suatu struktur dapat terdiri atas variabel-variabel yang berbeda tipenya dalam satu nama struktur.  Struktur biasa dipakai untuk mengelompokkan beberapa informasi yang berkaitan menjadi sebuah kesatuan (dalam bahasa PASCAL, struktur disebut dengan record).


Syntax :
Struct [<struct type name>]{
[<type><variabel-name[,variabel-name, ...]>]..
} [<structure variabels>];
Contoh :
typedef struct
{
int NIP ;
char nama[30]
} pegawai_t;
Perbedaan dengan Tipe data lain : Tipe data yang lain hanya terdiri dari 1 element, sehingga hanya dapat menyimpan sebuah nilai atau sebuah string saja, sedangkan tipe data struct dapat menyimpan beberapa elemen, dengan berbagai macam tipe seperti int, char, long, dll.
Operator titik digunakan sebagai pemisah antara variabel struktur dengan elemennya, penulisan ini sebaiknya tidak dipisahkan oleh spasi. Operator ini berfungsi untuk mengakses suatu element dari variabel struktur.
Operator panah digunakan untuk pengaksesan operasi pointer, atau menggunakan operator bintang (’*’), untuk pengaksesan element-element suatu struktur yang berupa pointer. Contoh : typedef struct { int NIP ; char nama[30] } pegawai_t, *peg_t; Pengaksesan dengan operator titik dan panah: pegawai_t.NIP pegawai_t.nama (*peg_t).NIP == peg_t -> NIP
Struct merupakan suatu struktur data yang menggabungkan beberapadata dengan berbagai tipe data yang memiliki ukuran yang berbeda(heterogen) di kelompokan dalam satu deklarasi unik dan saling berkaitan,dengan format sbb :
struct model_name {
type1 element1;
type2 element2;
type3 element3;
.
.
} object_name;

dimana model_name adalah nama untuk model tipe stukturnya dan parameter optional object_name merupakan identifier yang valid untuk objek struktur. Diantara kurung kurawal { } berupa tipe dan sub-identifier yang mengacu ke elemen pembentuk struktur. Jika pendefinisian stuktur menyertakan parameter model_name (optional), maka parameter tersebut akan menjadi nama tipe yang valid ekuivalen dengan struktur. Contoh :

struct products {
char name [30];
float price;
} ;

products apple;
products orange, melon;

Didefinisikan model struktur products dengan dua field : name dan
price, dengan tipe yang berbeda. Kemudian tipe struktur tadi (products)
digunakan untuk mendeklarasikan tiga objek : apple, orange dan melon.

Ketika dideklarasikan, products menjadi nama tipe yang valid seperti tipe
dasar int, char atau short dan dapat mendeklarasikan objects (variables)
dari tipe tersebut. Optional field yaitu object_name dapat dituliskan pada
akhir deklarasi struktur untuk secara langsung mendeklarasikan object
dari tipe struktur. Contoh :

struct products {
char name [30];
float price;
} apple, orange, melon;


Sangat penting untuk membedakan antara structure model, dan structureobject. model adalah type, dan object adalah variable. Kita dapat membuat banyak objects (variables) dari satu model (type).

Struct dapat dideklarasikan secara bertingkat, yaitu salah satu field struct bertipe struct lainnya (nested Structure) . Selain itu struct juga dapat digabungkan dengan array, struct yang field-nya berupa array atau array yang setiap elemennya berupa structure.

Structure sebagai parameter
Structure dapat dikirim ke function sebagai parameter, jika structure ini hanya merupakan data masukan, maka dapat dikirimkan dengan call by value, tetapi bila structure yang dikirimkan akan mengalami perubahan nilai maka pengiriman parameter harus dengan call by reference dengan mengirimkan pointer to struct. Struct juga dapat menjadi return type
sebuah function.

struct <nama struct > {
<deklarasi data type>;
} [<nama variabel struct>]





Contoh :

struct record_saya
{
char nama[20];
char alamat[30];
int jumlah_anak;
} data_rec[100];

atau

struct record_saya
{
char nama[20];
char alamat[30]; /* mendeklarasikan tipe record*/
int jumlah_anak;
};

struct record_saya data_rec[100];

/*mendeklarasikan variabel record sebanyak 100 data*/

#include <stdio.h>
struct record_saya
{
char nama[20];
char alamat[30]; /* mendeklarasikan tipe record*/
int jumlah_anak;
};

main()
{
struct record_saya data_saya[100];
int i,jumlah_data;
clrcscr();
printf(“Masukan jumlah data yang di input :
“);scanf(“\n%d”,&jumlah_data);
for (i=0;i<jumlah_data;i++)
{
printf(“\nInput Data Ke - %d”,i+1);
printf(“Nama Karyawan :
“);scanf(“\n%s”,data_saya[i].nama);
printf(“Alamat Karyawan : “);gets(data_saya[i].alamat);
printf(“Jumlah Anak : “);scanf(“\n%d”,
&data_saya[i].jumlah_anak);

}
clrscr();
for (i=0;i<jumlah_data;i++)
{
printf(“\nOutput Data Ke - %d”,i+1);
printf(“Nama Karyawan : %s“,data_saya[i].nama);
printf(“Alamat Karyawan : %s“,data_saya[i].alamat);
printf(“Jumlah Anak : %d“,data_saya[i].jumlah_anak);
}


Operasi File

Operasi file itu ada dua yang pertama ofsream dan ifstream. Ofstream adalah nama kelas untuk output nya file. Menghasilkan file dari yang kita buat. Di dalamnya ada open, dan close. Sedangkan ifstream adalah untuk mengambil file. Di dalam ifstream ada open, readline dan close.

Ada 5 cara untuk membuat operasi file :
-          Include headernya
-          Buat objek
-          Open
-          Gunakan
-          Close

Contoh progrm ofstream :

#include ‘constream.h”
#include “fstream.h”
void main ()
{
clrscr ();
            ofstream data;
data << ” Selamat Datang “;
data.close();
getch();
}


Contoh progrm ifstream :

#include ‘constream.h”
#include “fstream.h”
void main ()
{
clrscr ();
char tmp [100];
ifstream data (“d”\coba.ded”;
while (data)
{
            data.read (tmp, 100);
cout<<tmp<<endl;
}
Data.close();
}

Manfaat class yaitu menyimpan formula, agar formula (algoritma) dapat digunakan di program lain, dilain waktu dan di lain tempat.
Kesimpulan :
·         *  Mempermudah penggunaan class
·         *   Dengan menggunakan public dan class kita bisa merahasiakan formula – formula agar dirahasiakan.














7 comments: