Pengertian Struktur Data

1.PENGERTIAN STRUKTUR DATA
Struktur data adalah cara menyimpan dan data - data pada memori komputer maupun file secara efektif sehingga dapat digunakan dengan efisien, termasuk operasi operasi didalamnya.
Contoh coding :
#include<constream.h>
#include<stdlib.h>
#include<ctype.h>
#include<stdio.h>

struct mahasiswa
{
int nrp ;
char nama[20];
}:

Struktur data disini menpunyai 2 sifat .yakni:
1. Sederhana, -> kita menggunakan Array
2. Majemuk -> linier, non Linear
Yang dimaksud dengan sederhana & Majemuk disini yaitu susunanya.

* PENGERTIAN ARRAY

Array adalah suatu tipe data terstruktur yang berupa sejumlah data sejenis (bertipe data sama) yang jumlahnya tetap dan diberi suatu nama tertentu.Setiap komponen atau elemen array dapat diaksesdan dibedakan melalui indeks yang spesifik dimana jumlahnya sebanyak ukuran array tersebut dikurangisatu (karena perhitungan indeks dimulai darinol).Jumlah elemen terbatas, dan semua elemenmempunyai tipe yang sama.
untuk menghitung indeks array misalnya array dengan indeks 5, maka memori yang tersedia dihitung dari indeks ke 0 .

contoh program array :
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>

char kode[10]; //program isi & Cetak data
int harga[10];
char nm_brg[10][20];

void menu();
void isi_data();
void cetak_data();

void main()
{
menu();
}

void menu()
{
int pilihan;
clrscr();
cout<<"----------------------------"<<endl;
cout<<" MENU UTAMA "<<endl;
cout<<"----------------------------"<<endl;
cout<<"1.Isi Data"<<endl;
cout<<"2.Cetak Data"<<endl;
cout<<"3.Keluar"<<endl;
cout<<"----------------------------"<<endl;
cout<<"----------------------------"<<endl;
cout<<"Pilihan Anda [1/2/3] :";cin>>pilihan;
cout<<"----------------------------"<<endl;
cout<<"----------------------------"<<endl;


switch(pilihan)
{
case 1: isi_data();
getch();
menu();
break;

case 2: cetak_data();
getch();
menu();
break;
case 3: exit;
break;

}
}

void isi_data()
{
for(int i=1;i<=10;i++)
{
clrscr();
cout<<"Masukan Kode Barang ke "<<i<<" : ";
cin>>kode[i];
cout<<"Masukan Nama Barang ke "<<i<<" : ";
cin>>nm_brg[i][20];
cout<<"Masukan Harga ke "<<i<<" : ";
cin>>harga[i];
}

}

void cetak_data()
{
clrscr();
gotoxy(5,5);cout<<"-------------------------------";
gotoxy(5,6);cout<<"No";
gotoxy(8,6);cout<<"Kode";
gotoxy(15,6);cout<<"Nama";
gotoxy(40,6);cout<<"Harga";
gotoxy(5,7);cout<<"-------------------------------";

for(int x=0;x<10;x++)
{
gotoxy(5,8+x);cout<<x+1;
gotoxy(8,8+x);cout<<kode[x];
gotoxy(14,8+x);cout<<nm_brg[x];
gotoxy(40,8+x);cout<<harga[x];
}

gotoxy(5,9+x);cout<<"------------------------------";

}

Array juga ada 2 jenis,yakni:
*Array 1 dimensi: kenapa ada Array 1 dimensi,karena membutuhkan hanya 1 baris saja
Sebagai langkah efisiensi penggunan memori komputer,sebab dataelemen array dialokasikan pada suatu deretan sel memori tertentu. Halini jauh lebih efisien dibandingkan dengan jika kita mendefinisikan masing -masing data pada suatu variabel tersendiri yang pastinya akan banyak menyita memori.

contoh array 1 dimensi:

# include <constream.h>
main()

{

int a [5]={10,15,20,25,30};

int b[5]={10,20};

intc[5]={5,0,30};

int j;

//menampilkan nilai dari element array
cout << endl;

For (j = 0;j<5;j++)

{

cout <<”A[“<<j<<”j=”<<a[j]<<”b[“<<”<<j<<”]=”<<b[j]<<”,c[“<<j<<”]=”<<c[j]<<endl;

}

getch();

}

*Array 2 dimensi: kenapa ada Array 2 dimensi karena membutuhkan baris & kolom.
Keuntungan penggunaan array sebagai tipe data dibandingkan dengan penggunaan tipe data yang lain adalah kemampuannya yang dapat mengumpulkan beberapa data yang bertipe sama dalam satu variabel, sehingga dalam pembuatan program yang terdiri dari beberapa tipe yang sama, tidak membutuhkan banyak variabel.

Contoh array 2 dimensi:

#include<iostream.h>
#include<conio.h>
void main()
{
int a[2][3], i, j;

for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
cout<<"Masukan angka pada baris ke "<<i<<" kolom ke "<<j<<" : ";
cin>>a[i][j];
}
cout<<endl;
}
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
getch();
}

Jadi manfaat kita menggunakan array:

· Mempermudah pengelolaan atau pengembangan program mengingat setiap subrutin memiliki kode yang relatif sedikit jika dibandingkan dengan kode program secara keseluruhan yang disusun tanpa melibatkan subrutin.

· Dapat digunakan untuk mengurangi jumlah kode akibat sejumlah kode yang sama digunakan beberapa kali dalam program.

· Menjadikan program lebih bersifat modular sehingga akan mudah dipahami dan dapat digunakan kembali, baik untuk program itu sendiri maupun untuk program lain yang memiliki proses yang sama.

*POINTER

Pointer adalah suatu variabel penunjuk, berisi nilai yang menunjuk alamat suatu lokasi memori tertentu.
Pointer tidak berisi nilai data, melainkan berisi suatu alamat memori atau null jika tidak berisi data.
Pointer yang tidak diinisialisasi disebut dangling pointer
Lokasi memori tersebut bisa diwakili sebuah variabel atau dapat juga berupa nilai alamat memori secara langsung.

contoh program pointer :

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>

char kata[10]; //program isi & Cetak data

void menu();
void isi_data();
void rubah_data();
void cetak_data();

void main()
{
menu();
}

void menu()
{
int pilihan;
clrscr();
cout<<"----------------------------"<<endl;
cout<<" MENU UTAMA "<<endl;
cout<<"----------------------------"<<endl;
cout<<"1.Isi Data"<<endl;
cout<<"2.Rubah Data"<<endl;
cout<<"3.Cetak Data"<<endl;
cout<<"4.Keluar"<<endl;
cout<<"----------------------------"<<endl;
cout<<"----------------------------"<<endl;
cout<<"Pilihan Anda [1/2/3/4] :";cin>>pilihan;
cout<<"----------------------------"<<endl;
cout<<"----------------------------"<<endl;

switch(pilihan)
{
case 1: isi_data();
getch();
menu();
break;

case 2: rubah_data();
getch();
menu();
break;

case 3: cetak_data();
getch();
menu();
break;

case 4: exit;
break;

}

}

void isi_data()
{
cout<<"Masukan kata / kalimat : ";
cin>>kata[10];
}

void rubah_data()
{

cout<<"input posisi awal perubahan : ";//cin>>
cout<<"input jumlah yang akan dirubah : ";//cin>>

}

void cetak_data()
{
clrscr();
cout<<kata[10];

}

fungsi pointer adalah untuk menyimpan alamat memori dai sebuah variable (data tipe atau object dari class). Selain untuk menyimpan alamat dari variable, pointer juga dapat digunakan untuk menyimpan alamat-alamat dari sebuah fungsi (function pointer). 

*Linked list
Linked list adalah data struktur yang terdiri atas urutan rekor data (data records) dimana di masing masing rekor ada bidang yang berisi surat keterangan (i.e.,link) sampai rekor berikutnya di urutan dengan kata lain linked list adalah sejumlah objek(sering disebut simpul) dimana objek tersebut menggunakan structure atau record yang dihubungkan satu dengan lainnya sehingga membentuk rangkaian. Dengan menggunakan linked list maka programmer dapat menyimpan datanya kapanpun dibutuhkan.

Linked list mirip dangan array, kecuali pada linked list data yang ingin disimpan dapat dialokasikan secara dinamis pada saat pengoperasian program (run-time). Secara umum linked list tersusun atas sejumlah bagian bagian data yang lebih kecil yang terhubung dan tiap - tiap rantai terhubung dengan pointer.Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field.

a.) Double Linklist Circular
Adalah double / single LL yang simpul terakhirnya menunjuk ke simpul awal, dan simpul awalnya menunjuk ke simpul akhir, atau dapat disebut LL yang dibuat seakan-akan merupakan sebuah lingkaran dengan titik awal dan titik akhir saling bersebelahan jika LL tersebut masih kosong, ilustrasi Circular LL :
contoh double linklist circular :
#include <constream.h>
#include <stdio.h>
#include <alloc.h>

int pil;
void pilih();
void buat_baru();
void tambah_belakang();
void tambah_depan();
void hapus_belakang();
void hapus_depan();
void tampil();

struct simpul
{
char nim[8], nama [20];
int umur;
struct simpul *kiri, *kanan;
} mhs, *baru, *awal=NULL, *akhir=NULL,*hapus,*bantu;

int main()
{
do
{
clrscr();
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. Selesai"<<endl;
cout<<"Pilihan Anda : ";
cin>>pil;
pilih();
} while(pil!=6);
return 0;
}

void 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
cout<<"selesai";
}

void buat_baru()
{
baru=(simpul*)malloc(sizeof(struct simpul));
cout<<"input nim : ";cin>>baru->nim;
cout<<"input nama : ";cin>>baru->nama;
cout<<"input umur : ";cin>>baru->umur;
baru->kiri=NULL;
baru->kanan=NULL;
}

void tambah_belakang()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
akhir=baru;
}
else
{
akhir->kanan=baru;
baru->kiri=akhir;
akhir=baru;
}
cout<<endl<<endl;
tampil();
}

void tambah_depan()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
akhir=baru;
}
else
{
baru->kanan=awal;
awal->kiri=baru;
awal=baru;
}
cout<<endl<<endl;
tampil();
}

void hapus_depan()
{
if (awal==NULL)
cout<<"Kosong";
else if (awal->kanan==NULL)
{
hapus=awal;
awal=NULL;
akhir=NULL;
free(hapus);
}
else
{
hapus=awal;
awal=hapus->kanan;
awal->kiri=NULL;
free(hapus);
}
cout<<endl<<endl;
tampil();
}

void hapus_belakang()
{
if (awal==NULL)
cout<<"Kosong";
else if (awal->kanan==NULL)
{
hapus=awal;
awal=NULL;
akhir=NULL;
free(hapus);
}
else
{
hapus=akhir;
akhir=hapus->kiri;
akhir->kanan=NULL;
free(hapus);
}
cout<<endl<<endl;
tampil();
}

void tampil()
{
if (awal==NULL)
cout<<"Kosong";
else
{
bantu=awal;
while(bantu!=NULL)
{
cout<<"nim : "<<bantu->nim;
cout<<" nama : "<<bantu->nama;
cout<<" umur : "<<bantu->umur<<endl;
bantu=bantu->kanan;
}
}
getch();
}

b.) Double linklist non circular

linklist ini sama dengan linklist di atas, namun yang membuat perbedaan dari linklist tersebut adalah
tidak memiliki head dan tail.

c.) Contoh program Single linklist dengan insert front/ tambah depan
#include<stdio.h>
#include<stdlib.h>
#include<constream.h>
#include<ctype.h>

struct simpul
{
int angka;
struct simpul *berikut;
};

struct simpul *awal=NULL;
int bil;

void tambah_list_didepan(int info);
void isi_list();
void tampil_list();
void hapus_list();

void main()

{
clrscr();

isi_list();

clrscr();

tampil_list();

hapus_list();

getch();
}

void tambah_list_didepan(int info)

{
struct simpul *baru;
baru=(struct simpul *)malloc(sizeof(struct simpul));
baru ->angka=info;


baru->berikut=awal;
awal=baru;

}

void isi_list()
{
char jawab;

do

{
clrscr();

cout<<"\n Input Bilangan :";cin>>bil;

tambah_list_didepan(bil);

cout<<"\nTambah data Y/T : ";cin>>jawab;
}
while (toupper(jawab)!='T');
}

void tampil_list()
{
struct simpul *baca;
int i;

baca=awal;

i=1;

while(baca!=NULL)
{
cout<<"\nBilangan ke-"<<i<<"yang dibaca :"<<baca->angka;
i++;
baca=baca->berikut;
}
}

void hapus_list()
{
struct simpul *hapus;


hapus=awal;
while(hapus!=NULL)
{
awal=hapus->berikut;
free(hapus);
hapus=awal;
}
}

b.) Single LinklistCircular

Adalah sebuah LL yang menggunakan sebuah variabel pointer saja untuk menyimpan banyak data dengan metode LL, suatu daftar isi yang saling berhubungan. 
Contoh single linked list:

#include

#include

struct TNode //deklarasi awal LINKED LIST

{

int data;

TNode *next;

};

TNode *head;

void init()

{

head = NULL;

}

int isEmpty()

{

if(head == NULL) return 1;

else return 0;

}

void insertDepan(int databaru)

{

TNode *baru;

baru = new TNode;

baru->data = databaru;

baru->next = NULL;

if(isEmpty()==1)

{

head=baru;

head->next = NULL;

}

else

{

baru->next = head;

head = baru;

}

cout<

cout<<" Data masuk...\n";

getch();

}

void hapusDepan()

{

TNode *hapus;

int d;

if (isEmpty()==0)

{

if(head->next != NULL)

{

hapus = head;

d = hapus->data;

head = head->next;

delete hapus;

}

else

{

d = head->data;

head = NULL;

}

cout<

cout<<" Data "<<<">

}

else

{

cout<

cout<

cout<<" Linked List Masih kosong...\n";

}

getch();

}

void search(int caridata)

{

TNode *bantu;

bantu = head;

int ketemu = 0;

int index=0;

if(isEmpty()==0)

{

while(bantu!=NULL)

{

bantu->data;

if (caridata == bantu->data)

{

cout<

cout<<" Data Ditemukan..."<

cout<<" Index Ke - "<

ketemu = 1;

break;

}

bantu=bantu->next;

index++;

}

cout<

if (ketemu == 0)

cout<<" Data Tidak Ditemukan..."<

cout<

} else cout<<" Linked List Masih kosong...\n";

getch();

}

void tampil()

{

TNode *bantu;

bantu = head;

if(isEmpty()==0)

{

cout<<" Data Linked List"<

cout<<"================================="<

while(bantu!=NULL)

{

cout<<" --> "<data<<" ";

bantu=bantu->next;

}

cout<<" --> NULL";

cout<

} else cout<<" Linked List Masih kosong...\n";

getch();

}

void main()

{

int pil,dataku,cari;

init(); //inisialisasi awal

do

{

clrscr();

cout<<" SINGLE LINKED LIST"<

cout<<"=========================="<

cout<<" 1. Insert List"<

cout<<" 2. Delete Front"<

cout<<" 3. Show Linked List"<

cout<<" 4. Search Data"<

cout<<" 5. Exit"<

cout<<"=========================="<

cout<

cout<<"Pilihan Anda = "; cin>>pil;

switch (pil)

{

case 1 :

cout<

cout<<" Insert Data --> "; cin>>dataku;

insertDepan(dataku);

break;

case 2 :

hapusDepan();

break;

case 3 :

cout<

cout<

tampil();

break;

case 4 :

cout<

cout<<" Data yg Dicari --> "; cin>>cari;

search(cari);

break;

};

}

while (pil != 5);

}

PENGERTIAN TREE

· Kumpulan node yang saling terhubung satu sama lain dalam suatu
kesatuan yang membentuk layakya struktur sebuah pohon. 

· Struktur pohon adalah suatu cara merepresentasikan suatu struktur hirarki

(one-to-many) secara grafis yang mirip sebuah pohon, walaupun pohon

tersebut hanya tampak sebagai kumpulan node-node dari atas ke bawah.
· Suatu struktur data yang tidak linier yang menggambarkan hubungan

yang hirarkis (one-to-many) dan tidak linier antara elemen-elemennya.
berikut contoh program binary tree :

#include<stdio.h>
#include<conio.h>

typedef struct node{
int data;
node *kiri;
node *kanan;
};

void tambah(node *root,int databaru)
{
if((*root)==NUUL){
node *baru;
baru=new node;
baru->data=databaru;
baru->kiri=NULL;
baru->kanan=NULL;
(*root)=baru;
(*root)->kiri=NULL;
(*root)->kanan=NULL;
cout<<"Data Bertambah";
}
else if(databaru<(*root)->data)
tambah(&(*root)->kiri,databaru);
else if(databaru>(*root)->data)
tambah(&(*root)->kana,databaru);
else if(databaru==(*root)->data)
cout<<"Data Sudah Ada";
}

void preOrder(node *root)
{
if(root!=NULL)
{
cout<<root->data;
preOrder(root->kiri);
preOrder(root->kanan);
}
}

void inOrder(node *root)
{
if(root!=NULL)
{
inOrder(root->kiri);
cout<<root->data;
inOrder(root->kanan);
}
}

void postOrder(node *root)
{
if(root!=NULL)
{
postOrder(root->kiri);
postOrder(root->kanan);
cout<<root->data;
}
}

void main()
{
int pil,x;
node *pohon,*t;
pohon=NULL;
do
{
clrscr();
int data;
cout<<"\n1. MENU";
cout<<"\n2.Lihat preOrder";
cout<<"\n3.Lihat inOrder";
cout<<"\n4.Lihat postOrder";
cout<<"\n5. Exit";
cout<<"Pilihan : "; cin>>pil;
switch(pil)
{
case 1: cout<<"Data Baru : "<<&data;
tambah(&pohon,data);
break;
case 2: if(pohon!=NULL) preOrder(pohon);
else cout<<"Masih Kosong";
break;
case 3: if(pohon!=NULL) inOrder(pohon);
else cout<<"Masih Kosong";
break;
case 4: if(pohon!=NULL) postOrder(pohon);
else cout<<"Masih Kosong";
break;
}
getch();
} while(pil!=5);
}

b.) Graph
Graph adalah kumpulan dari simpul dan busur secara matematis dinyatakan sebagai :

G=(V,E)

dimana :

G = Graph

V = Simpul atau Vertex

E = Busur atau Edge

3 komentar:

  1. Min blog lo keren bgt
    Ajarin donk bikin blog kaya gini,so far blog gw masih ece ece banget
    Respon balik please Nurfhakeith@gmail.com

    BalasHapus