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;
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.
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;
}
*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]);
}
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]);
}
}
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.
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++).
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.
mantap bung
ReplyDeleteMy blog
Terimakasih :)
Deletesiap min flux cody ori
ReplyDeletebagus nih blognya, sering" mba
ReplyDeletesiap ,, makasih mas :)
Deleteyuhuuu...bermanfaat sekali
ReplyDeletekaca pembesar lampu led
alhamdulillah jika bermanfaat, terimakasih :)
Delete