Pengertian, Kegunaan, Tujuan Pembentukan, Tahapan Pembuatan, Jenis - Jenis, dan Kelebihan & Kekurangan Struktur Data
A. PENGERTIAN
Dalam istilah ilmu komputer, sebuah struktur data adalah cara
menyimpan, penyusunan dan pengaturan data dalam media penyimpanan komputer
sehingga data tersebut dapat dapat digunakan secara efisien.
Dalam teknik pemograman, struktur data berarti tata letak data yang
berisi kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user)
ataupun kolom yang hanya digunakan untuk keperluan pemograman 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 mengelolah database (misalnya untuk keperluan data
keuangan)atau untuk pengolah kata (word processor)yang kolomnya berubah secara
dinamis. Contoh struktur data dapat di;ihat 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.
B. KEGUNAAN STRUKTUR
DATA
Struktur data digunakan untuk meningkatkan efisisiensi penggunaan memori
pada saat program komputer sedang bekerja. Penggunaan struktur data yang tepat
pada pemograman dapat membuat algoritma jadilebih mudah, kemudahan ini membuat
program lebih efisien dan sederhana.
Meningkatkan efisiensi merupakan tujuan utama pengaplikasian struktur data.
Dengan struktur data, proses reservasi memori yang tidak perlu akan diminimalisasi.
Selain itu struktur data juga menjamin kemudahan pemahaman algoritma. Sehingga
untuk menyelesaikan permasalahan seperti perkalian matriks, visualisasi matriks
dan tabel, akan menjadi lebih mudah di pahami.
C. TUJUAN PEMBENTUKAN STRUKTUR DATA
Tujuan pembentukan struktur data adalah
information hiding atau encapsulation sebagai berikut :
· Perubahan implementasi struktur data tidak merubah teks program
yang menggunakan struktur data bila interface pada struktur data telah
dirancang baik sehingga tidak berubah
· Pemakaian dan pembuatan struktur data dapat dilakukan secara
terpisah, yang hany perlu kesepakatan mengenai interface pemakai struktur data
tersebut
· Struktur data merupakan sarana pemrograman modular dan menjadi
landasan terbentuknya tim pemrograman
D. TAHAPAN MEMBUAT STRUKTUR DATA
1.
Tahap Pertama
Spesifikasi atau pendeskripsian struktur data
menyatakan apa yang dapat dilakukan struktur data, bukan cara penempatannya.
Pendeskripsian ini melibatkan level logic sehingga dapat digunakan konvensi
matematika untuk menyatakan sifat-sifat struktur data yang dikehendaki.
2
. Tahap Kedua
Implementasi menyatakan cara penerapan
struktur data dengan struktur data yang telah ada. Implementasi struktur data adalah proses pendefinisian tipe data abstark
sehingga semua operasi dapat dieksekusi computer. Implementasi berisi
dekklarasi struktur penyimpanan item data serta algoritma untuk implementasi
operasi, sehingga menjamin terpenuhinya karakteristik struktur data, relasi
item data tau invariant pada struktur data tersebut.
3.
Tahap Ketiga
Pemrograman struktur data adalah
penterjemahan menjadi pernyataan dalam bahasa pemrograman tertentu.struktur
data dibangun menggunakan fasilitas pembentukkan atau pembuatan struktur data
yang disediakan bahasa seperti array, record dan lain-lain.
E. JENIS –
JENIS STRUKTUR DATA
1.
Struktur Data Sederhana
a.
Arrya (larik)
Larik adalah struktur data statik yang menyimpan
sekumpulan elemen bertipe sama. Setipa elemen yang di akses secara langsung
melalui indeksnya. Indeks larik harus tipe data yang menyatakan keturunan,
misalkan : interger atau karakter. Banyak elemen larik harus sudah diketahui
sebelum program dieksekusi. Tipe elemen Lrik dapat berupa tipe sederhana, tipe
terstruktur atau tipe larik lain. Nama lain dari array adalah Larik, tabel,
atau vektor.
Ø Contoh penerapan dalam kehidupan sehari-hari :
Ø Contoh penerapan dalam kehidupan sehari-hari :
a). Menonton bioskop dimana melakukan antri dalam
membeli tiket, mobil-mobil yang antri membeli karcis di pintu jalan tol akan
membentuk antrian, para calon mahasiswa yang mendaftarkan diri
untuk ikut ujian masuk perguruan tinggi
akan membentuk antrian dan contoh-contoh lain yang
banyak dijumpai dalam kehidupan sehari – hari.
b). pemakaian
sistem komputer berbagi waktu (time-sharing computer system) dimana ada
sejumlah pemakai yang menggunakan sistem tersebut
secara serempak. Karena sistem ini biasanya
menggunakan sebuah prosesor dan sebuah
memori utama, maka jika prosesor sedang dipakai oleh
seorang pemakai, pemakai-pemakai yang lain harus antri sampai gilirannya tiba.
Ø Contoh Program :
#include<iostream>
#include<cstring>
using
namespace std;
int main
() {
//mendeklarasikan tipe enumerasi dengan
nama jenis_kelamin
enum jenis_kelamin {Pria,Wanita};
struct biodata {
char nama[50];
char umur[30];
char hobi[50];
jenis_kelamin gender;
}A;
strcpy(A.nama,"Fachry Maulana
Prabowo");
strcpy(A.umur,"18 tahun");
strcpy(A.hobi,"Ngode :v");
A.gender = Pria ;
//menampilkan nilai yang diisikan ke layar
cout << A.nama << endl;
cout << A.umur << endl;
cout << A.hobi << endl;
cout << "Gender : "
<< A.gender << endl << endl;
cout << " 0 = Pria , 1 = Wanita
" ;
return 0;
}
b.
Record (catatan)
Adalah kumpulan data yang terdiri dari beberapa field
(isian) dengan berbagai macam tipe data.
Ø Contoh Program :
#include<iostream>;
#include<cstring>;
using namespace std;
int main () {
//membuat tipe struktur dengan nama biodata
struct
biodata {
char
nama[50];
char umur[30];
char
hobi[50];
};
//menggunakan tipe struktur biodata
//dalam
mendeklarasikan variabel A
biodata
A;
//melakukan pengisian nilai terhadap variabel A
strcpy(A.nama,"Fachry Maulana Prabowo");
strcpy(A.umur,"18 tahun");
strcpy(A.hobi,"Ngode :v");
//menampilkan nilai yang diisikan ke layar
cout
<< A.nama << endl;
cout
<< A.umur << endl;
cout
<< A.hobi << endl;
return
0;
}
2.
Struktur Data Majemuk
a.
Linear
·
Stack (tumpukan)
Adalah list linear yang dikenal berupa elemen puncaknya
(top), aturan penyisipan dan penghapusan elemenya tertentu (penyisipan selalu
dilakukan “diatas” (top) dan penghapusan selalu dilakukan pada “top”).
Karena aturan penyisipan dan penghapusan semacam
itu, “top” adalah satu-satunya alamat
tempat terjadinya operasi. Elemen yang paling akhir di tambahkan akan menjadi
elemen stack akan tersusun secara LIFO (Last In Firs Out).
Ø Penerapan :
a). Dalam kehidupan sehari-hari :
Pengambilan Koran yang tertumpuk di dalam kardus. Hal ini mengandung konsep stack dimana first in – last out, Koran yang pertama ditaruh pada tumpukan akan diambil paling terakhir saat pengurutan pembacaan tumpukan.
b). Dalam lingkup informatika :
Ø Penerapan :
a). Dalam kehidupan sehari-hari :
Pengambilan Koran yang tertumpuk di dalam kardus. Hal ini mengandung konsep stack dimana first in – last out, Koran yang pertama ditaruh pada tumpukan akan diambil paling terakhir saat pengurutan pembacaan tumpukan.
b). Dalam lingkup informatika :
Sistem pengeluaran peluru pada game FPS (first player shooter)
dimana peluru yang ter-load pertama kali maka akan keluar pada saat akhir dan
sebaliknya terjadi pada peluru yang ter-load terakhir kali.
Ø Contoh program:
#include <iostream> //file header standart
#include <stdio.h>
using namespace std; //mengunakan namespace std
struct STACK{ //definisi struct stack
int data[5]; //definisi data
int top; //definisi top
};
STACK tumpukan; //pemangginalan stract struck
void inisialisasi(); //pendeklarasian fungsi inisialisasi
int IsEmpty(); //pendeklarasian fungsi isEmpty
int IsFull(); //pendeklarasian fungsi isFull
void push(int data); //pendeklarasian fungsi push
void pop(); //pendeklarasian fungsi pop
int main(void){//pendeklarasian fungsi main program utama yang di jalankan
program
int pilih, input, i; //pendeklarasian variable pilih input dan i interget
inisialisasi(); //memanggil fungsi inisialisasi
do{ //membuat perulangan
cout<<"1. Push Data"<<endl; //menampilkan text ke
layar
cout<<"2. Pop Data"<<endl; //menampilkan text ke
layar
cout<<"3. Print Data"<<endl; //menampilkan text ke
layar
cout<<"4. Clear Data"<<endl; //menampilkan text ke
layar
cout<<endl; //menampilkan baris baru
cout<<"Pilih : "; //menampilkan text ke layar
cin>>pilih; //input pilihan
switch(pilih){
case 1:{
if(IsFull() == 1){
cout<<"Tumpukan penuh!";
}else{
cout<<"Data yang akan di push: ";
cin>>input;
push(input);
}
cout<<endl;
break;
}
case 2:{
if(IsEmpty() == 1){
cout<<"Tumpukan kosong!";
}else{
cout<<"Data yang akan di pop
:"<<tumpukan.data[tumpukan.top]<<endl;
}
cout<<endl;
break;
}
case 3:{
if(IsEmpty() == 1){
cout<<"Tumpukan Kosong !"<<endl;
}else{
cout<<"Data :"<<endl;
for(i = 0;i<=tumpukan.top;i++){
cout<<tumpukan.data[i]<<" ";
}
cout<<endl;
}
cout<<endl;
break;
}
case 4:{
inisialisasi();
cout<<"Tumpukan sudah kosong!"<<endl;
cout<<endl;
break;
}
default:{
cout<<"Tidak ada dalam pilihan"<<endl;
}
}
}while(pilih >=1 && pilih<=4);
return 0;
}
void inisialisasi(){ //pengisian fungsi inisialisasi
tumpukan.top = -1;
}
int IsEmpty(){ //pengisian fungsi isempty
if(tumpukan.top == -1){
return 1;
}else{
return 0;
}
}
int IsFull(){ //pengisian fungsi
isfull
if(tumpukan.top == 5-1){
return 1;
}else{
return 0;
}
}
void push(int data){ //pengisian fungsi push
tumpukan.top++;
tumpukan.data[tumpukan.top] = data;
}
void pop(){ //pengisian fungsi pop
tumpukan.top = tumpukan.top - 1;
if(tumpukan.top < 0){
tumpukan.top = -1;
}
}
·
Queue (antrian)
Adalah list linear yang dikenali berupa elemen pertama
(head) dan elemen terakhir (tail), dimana aturan penyisipan dan penghapusan elemennya
didefinisikan sebagai penyisipan selalu dilakukan pada elemen pertama dengan
kondisi satu elemen dengen elemen lainya dapat di akses melalui informasi
“next”.
Ø Penerapan :
Ø Penerapan :
a). Dalam kehidupan sehari-hari:
Saat menunggu
antrian dokter umum dimana ada konsep first in – first out atau pertama masuk pertama keluar. jika antrian kita paling pertama maka kitalah yang pertama di panggil oleh dokter.
b). Dalam
lingkup informatika :
Aplikasi pendaftaran yang menggunakan limit waktu dan beberapa
season atau periode. Dimana jika kita mendaftar pada season yang pertama maka
otomatis kita akan tercatat pada database pendaftar pertama.
Ø Contoh program :
#include <stdio.h>
#include <iostream>
#include <conio.h>
#define MAX 8
using namespace std;
typedef struct{
int data[MAX];
int head;
int tail;
}Queue;
Queue antrian;
void Create(){
antrian.head=antrian.tail=-1;
}
int IsEmpty(){
if(antrian.tail==-1)
return 1;
else
return 0;
}
int IsFull(){
if(antrian.tail==MAX-1)
return 1;
else
return 0;
}
Enqueue(int data)
{
if(IsEmpty()==1)
{
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;
printf("%d sudah dimasukan",antrian.data[antrian.tail]);
} else
if(IsFull()==0)
{
antrian.tail++;
antrian.data[antrian.tail]=data;
printf("%d sudah dimasukan",antrian.data[antrian.tail]);
}
}
int Dequeue()
{
int i;
int e = antrian.data[antrian.head];
for(i=antrian.head; i<=antrian.tail-1;i++)
{
antrian.data[i]=antrian.data[i+1];
}
antrian.tail--;
return e;
}
void Clear()
{
antrian.head=antrian.tail=-1;
printf("CLEAR");
}
void Tampil()
{
if(IsEmpty()==0)
{
for(int i=antrian.head;i<=antrian.tail;i++)
{
printf(" %d",antrian.data[i]);
}
}else printf("data kosong!\n");
}
main()
{
int pil;
int data;
Create();
do{
cout<<endl<<endl;
cout<<" =============================="<<endl;
cout<<" =\t PROGRAM QUEUE ="<<endl;
cout<<" =============================="<<endl;
cout<<" = 1. ENQUEUE = "<<endl;
cout<<" = 2. DEQUEUE = "<<endl;
cout<<" = 3. TAMPIL = "<<endl;
cout<<" = 4. CLEAR = "<<endl;
cout<<" = 5. EXIT ="<<endl;
cout<<" =============================="<<endl;
cout<<" Masukan Pilihan : ";cin>>pil;
switch(pil)
{
case 1:
cout<<"Masukan Data : ";cin>>data;
Enqueue(data);
break;
case 2:
Dequeue();
break;
case 3:
Tampil();
break;
case 4:
Clear();
break;
case 5:
break;
}
getch();
}
while(pil!=5);
return 0;
}
#include <iostream>
#include <conio.h>
#define MAX 8
using namespace std;
typedef struct{
int data[MAX];
int head;
int tail;
}Queue;
Queue antrian;
void Create(){
antrian.head=antrian.tail=-1;
}
int IsEmpty(){
if(antrian.tail==-1)
return 1;
else
return 0;
}
int IsFull(){
if(antrian.tail==MAX-1)
return 1;
else
return 0;
}
Enqueue(int data)
{
if(IsEmpty()==1)
{
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;
printf("%d sudah dimasukan",antrian.data[antrian.tail]);
} else
if(IsFull()==0)
{
antrian.tail++;
antrian.data[antrian.tail]=data;
printf("%d sudah dimasukan",antrian.data[antrian.tail]);
}
}
int Dequeue()
{
int i;
int e = antrian.data[antrian.head];
for(i=antrian.head; i<=antrian.tail-1;i++)
{
antrian.data[i]=antrian.data[i+1];
}
antrian.tail--;
return e;
}
void Clear()
{
antrian.head=antrian.tail=-1;
printf("CLEAR");
}
void Tampil()
{
if(IsEmpty()==0)
{
for(int i=antrian.head;i<=antrian.tail;i++)
{
printf(" %d",antrian.data[i]);
}
}else printf("data kosong!\n");
}
main()
{
int pil;
int data;
Create();
do{
cout<<endl<<endl;
cout<<" =============================="<<endl;
cout<<" =\t PROGRAM QUEUE ="<<endl;
cout<<" =============================="<<endl;
cout<<" = 1. ENQUEUE = "<<endl;
cout<<" = 2. DEQUEUE = "<<endl;
cout<<" = 3. TAMPIL = "<<endl;
cout<<" = 4. CLEAR = "<<endl;
cout<<" = 5. EXIT ="<<endl;
cout<<" =============================="<<endl;
cout<<" Masukan Pilihan : ";cin>>pil;
switch(pil)
{
case 1:
cout<<"Masukan Data : ";cin>>data;
Enqueue(data);
break;
case 2:
Dequeue();
break;
case 3:
Tampil();
break;
case 4:
Clear();
break;
case 5:
break;
}
getch();
}
while(pil!=5);
return 0;
}
·
List dan Multi-List (Daftar)
Adalah sekumpulan list linear yang dengan elemen yang
bertype sama, yang memiliki keterurutan tertentu, yang setiap elemenya yang
terdiri dari 2 bagian.
Ø Penerapan :
a). Dalam kehidupan sehari
– hari :
Daftar presensi kelas dimana terdapat list dari siswa yang
berurut sesuai NIM. Selain itu juga ada Daftar menu makanan pada restoran yang
menyajikan menu urut dari harga terendah hingga termahal.Daftar menu makanan
b). Dalam lingkup
informatika:
Penyajian data list lagu dalam pembuatan aplikasi pemutar musik.
Ø Contoh:
#include<iostream>
#include<cstdlib>
#include<conio.h>
using namespace std;
struct TNode{
int data;
TNode *next;
};TNode *head, *tail,*depan,*belakang;
void init(){
head=NULL;
tail=NULL;
depan=NULL;
belakang=NULL;
}
int isEmpty(){
if(tail==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=tail=baru;
tail->next=NULL;
}else{
baru->next=head;
head=baru;
}
cout<<"Input berhasil";
}
void insertBelakang(int data){
TNode *baru;
baru=new TNode;
baru->data=data;
baru->next=NULL;
if(isEmpty()==1){
head=baru;
tail=baru;
tail->next=NULL;
}else
{
tail->next=baru;
tail=baru;
}
cout<<"\n Input berhasil"<<endl;
}
void hapusDepan(){
TNode *hapus;
int d;
if(isEmpty()==0){
if(depan!=belakang){
hapus=depan;
d=hapus->data;
depan=depan->next;
delete hapus;
}else{
d=belakang->data;
depan=belakang=NULL;
}
cout<<d<<"Terhapus";
}else cout<<"Masih kosong\n";
}
void hapusBelakang(){
TNode *bantu,*hapus;
int d;
if(isEmpty()==0){
bantu=depan;
if(depan!=belakang){
while(bantu->next!=belakang){
bantu=bantu->next;
}
hapus=belakang;
belakang=bantu;
d=hapus->data;
delete hapus;
belakang->next=NULL;
}else{
d=belakang->data;
depan=belakang=NULL;
}
cout<<d<<"Terhapus\n";
}else cout<<"Masih kosong\n";
}
void tampil(){
TNode *bantu;
bantu=head;
if(isEmpty()==0){
cout<<"depan :";
while(bantu!=NULL){
cout<<bantu->data<<"->";
bantu=bantu->next;
}
}else if(isEmpty()==0){
cout<<"belakang :";
while(bantu!=NULL){
cout<<bantu->data<<"->";
bantu=bantu->next;
}
cout<<"\n Data masih kosong"<<endl;
}
}
main(){
int pil,data,databaru;
init();
do{
system("cls");
cout<<endl;
cout<<"link list insert"<<endl;
cout<<"-------------------------"<<endl;
cout<<"1. insert depan"<<endl;
cout<<"2. insert belakang"<<endl;
cout<<"3. delete depan"<<endl;
cout<<"4. delete belakang"<<endl;
cout<<"5. tampilkan data"<<endl;
cout<<"0. keluar"<<endl;
cout<<"-------------------------"<<endl;
cout<<"masukkan pilihan :";cin>>pil;
switch(pil){
case 1: system("cls");{
cout<<"\nInsert Depan"<<endl;
cout<<"-------------"<<endl;
cout<<"masukkan data : ";cin>>databaru;
insertDepan(databaru);
break;
}
case 2: system("cls");{
cout<<"\nInsert Belakang"<<endl;
cout<<"-------------"<<endl;
cout<<"masukkan data : ";cin>>data;
insertBelakang(data);
break;
}
case 3: system("cls");{
cout<<"\ndata depan terhapus"<<endl;
hapusDepan();
break;
}
case 4: system("cls");{
cout<<"\nData Belakang terhapus"<<endl;
hapusBelakang();
break;
}
case 5: system("cls");{
cout<<"Tampilkan data"<<endl;
cout<<"-------------"<<endl;
tampil();
break;
}
case 0 : system("cls");{
return 0;
break;
}default:
system ("cls");{
cout<<"pilihan tidak tersedia"<<endl;
}
}getch();
}while(pil!=7);
}
#include<cstdlib>
#include<conio.h>
using namespace std;
struct TNode{
int data;
TNode *next;
};TNode *head, *tail,*depan,*belakang;
void init(){
head=NULL;
tail=NULL;
depan=NULL;
belakang=NULL;
}
int isEmpty(){
if(tail==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=tail=baru;
tail->next=NULL;
}else{
baru->next=head;
head=baru;
}
cout<<"Input berhasil";
}
void insertBelakang(int data){
TNode *baru;
baru=new TNode;
baru->data=data;
baru->next=NULL;
if(isEmpty()==1){
head=baru;
tail=baru;
tail->next=NULL;
}else
{
tail->next=baru;
tail=baru;
}
cout<<"\n Input berhasil"<<endl;
}
void hapusDepan(){
TNode *hapus;
int d;
if(isEmpty()==0){
if(depan!=belakang){
hapus=depan;
d=hapus->data;
depan=depan->next;
delete hapus;
}else{
d=belakang->data;
depan=belakang=NULL;
}
cout<<d<<"Terhapus";
}else cout<<"Masih kosong\n";
}
void hapusBelakang(){
TNode *bantu,*hapus;
int d;
if(isEmpty()==0){
bantu=depan;
if(depan!=belakang){
while(bantu->next!=belakang){
bantu=bantu->next;
}
hapus=belakang;
belakang=bantu;
d=hapus->data;
delete hapus;
belakang->next=NULL;
}else{
d=belakang->data;
depan=belakang=NULL;
}
cout<<d<<"Terhapus\n";
}else cout<<"Masih kosong\n";
}
void tampil(){
TNode *bantu;
bantu=head;
if(isEmpty()==0){
cout<<"depan :";
while(bantu!=NULL){
cout<<bantu->data<<"->";
bantu=bantu->next;
}
}else if(isEmpty()==0){
cout<<"belakang :";
while(bantu!=NULL){
cout<<bantu->data<<"->";
bantu=bantu->next;
}
cout<<"\n Data masih kosong"<<endl;
}
}
main(){
int pil,data,databaru;
init();
do{
system("cls");
cout<<endl;
cout<<"link list insert"<<endl;
cout<<"-------------------------"<<endl;
cout<<"1. insert depan"<<endl;
cout<<"2. insert belakang"<<endl;
cout<<"3. delete depan"<<endl;
cout<<"4. delete belakang"<<endl;
cout<<"5. tampilkan data"<<endl;
cout<<"0. keluar"<<endl;
cout<<"-------------------------"<<endl;
cout<<"masukkan pilihan :";cin>>pil;
switch(pil){
case 1: system("cls");{
cout<<"\nInsert Depan"<<endl;
cout<<"-------------"<<endl;
cout<<"masukkan data : ";cin>>databaru;
insertDepan(databaru);
break;
}
case 2: system("cls");{
cout<<"\nInsert Belakang"<<endl;
cout<<"-------------"<<endl;
cout<<"masukkan data : ";cin>>data;
insertBelakang(data);
break;
}
case 3: system("cls");{
cout<<"\ndata depan terhapus"<<endl;
hapusDepan();
break;
}
case 4: system("cls");{
cout<<"\nData Belakang terhapus"<<endl;
hapusBelakang();
break;
}
case 5: system("cls");{
cout<<"Tampilkan data"<<endl;
cout<<"-------------"<<endl;
tampil();
break;
}
case 0 : system("cls");{
return 0;
break;
}default:
system ("cls");{
cout<<"pilihan tidak tersedia"<<endl;
}
}getch();
}while(pil!=7);
}
b.
Non-Linear
·
Binary-Tree (Pohon
Biner)
Adalah himpunan terbatas yang mungkin kosong atau terdari
dari sebuah simpul yang disebut sebagai akar dan dua buah himpunan lain yang
disjoint yang merupakan pohon biner yang disebut sebagai sub-pohon kiri (left)
dan sub-pohon kanan (right) dari pohon biner tersebut.
Pohon biner merupakan type yang sangat penting dari struktur data yang banyak
dijumpai dalam berbagai terapan. Karakteristik yang dimiliki oleh pohon biner
adalah bahwa setiap simpul yang paling banyak hanya memiliki dua buah anak, dan
mungkin tidak punya anak.
Ø Contoh program:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
/* A <span id="mvuhno2x61oe_1" class="mvuhno2x61oe">binary tree</span> node has data, pointer to left child
and a pointer to right child */
struct node
{
int data;
struct node* left;
struct node* right;
};
/* Prototypes for funtions needed in printPaths() */
void printPathsRecur(struct node* node, int path[], int pathLen);
void printArray(int ints[], int len);
/*Given a binary tree, print out all of its root-to-leaf
paths, one per line. Uses a recursive helper to do the work.*/
void printPaths(struct node* node)
{
int path[1000];
printPathsRecur(node, path, 0);
}
/* Recursive helper function -- given a node, and an array containing
the path from the root node up to but not including this node,
print out all the root-leaf paths.*/
void printPathsRecur(struct node* node, int path[], int pathLen)
{
if (node==NULL)
return;
/* append this node to the path array */
path[pathLen] = node->data;
pathLen++;
/* it's a leaf, so print the path that led to here */
if (node->left==NULL && node->right==NULL)
{
printArray(path, pathLen);
}
else
{
/* otherwise try both subtrees */
printPathsRecur(node->left, path, pathLen);
printPathsRecur(node->right, path, pathLen);
}
}
/* UTILITY FUNCTIONS */
/* Utility that prints out an array on a line. */
void printArray(int ints[], int len)
{
int i;
for (i=0; i<len; i++)
{
printf("%d ", ints[i]);
}
printf("\n");
}
/* utility that allocates a new node with the
given data and NULL left and right pointers. */
struct node* newnode(int data)
{
struct node* node = (struct node*)
malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
/* Driver program to test above functions*/
int main()
{
struct node *root = newnode(5);
root->left = newnode(4);
root->right = newnode(8);
root->left->left = newnode(11);
root->right->left = newnode(13);
root->right->right = newnode(4);
root->left->left->left = newnode(7);
root->left->left->right = newnode(2);
root->right->right->right = newnode(1);
printPaths(root);
double number1 = 0.0;
double number2 = 0.0;
double number3 = 0.0;
double number4 = 0.0;
double answer;
cout <<"masukkan 4 angka dari path di atas"<<endl;
cin>>number1;
cin>>number2;
cin>>number3;
cin>>number4;
answer = (number1 + number2 + number3 + number4) /4;
cout<<"rata-ratanya adalah "<<answer<<endl;
system ("pause");
getchar();
return 0;}
#include<stdlib.h>
#include<iostream>
using namespace std;
/* A <span id="mvuhno2x61oe_1" class="mvuhno2x61oe">binary tree</span> node has data, pointer to left child
and a pointer to right child */
struct node
{
int data;
struct node* left;
struct node* right;
};
/* Prototypes for funtions needed in printPaths() */
void printPathsRecur(struct node* node, int path[], int pathLen);
void printArray(int ints[], int len);
/*Given a binary tree, print out all of its root-to-leaf
paths, one per line. Uses a recursive helper to do the work.*/
void printPaths(struct node* node)
{
int path[1000];
printPathsRecur(node, path, 0);
}
/* Recursive helper function -- given a node, and an array containing
the path from the root node up to but not including this node,
print out all the root-leaf paths.*/
void printPathsRecur(struct node* node, int path[], int pathLen)
{
if (node==NULL)
return;
/* append this node to the path array */
path[pathLen] = node->data;
pathLen++;
/* it's a leaf, so print the path that led to here */
if (node->left==NULL && node->right==NULL)
{
printArray(path, pathLen);
}
else
{
/* otherwise try both subtrees */
printPathsRecur(node->left, path, pathLen);
printPathsRecur(node->right, path, pathLen);
}
}
/* UTILITY FUNCTIONS */
/* Utility that prints out an array on a line. */
void printArray(int ints[], int len)
{
int i;
for (i=0; i<len; i++)
{
printf("%d ", ints[i]);
}
printf("\n");
}
/* utility that allocates a new node with the
given data and NULL left and right pointers. */
struct node* newnode(int data)
{
struct node* node = (struct node*)
malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
/* Driver program to test above functions*/
int main()
{
struct node *root = newnode(5);
root->left = newnode(4);
root->right = newnode(8);
root->left->left = newnode(11);
root->right->left = newnode(13);
root->right->right = newnode(4);
root->left->left->left = newnode(7);
root->left->left->right = newnode(2);
root->right->right->right = newnode(1);
printPaths(root);
double number1 = 0.0;
double number2 = 0.0;
double number3 = 0.0;
double number4 = 0.0;
double answer;
cout <<"masukkan 4 angka dari path di atas"<<endl;
cin>>number1;
cin>>number2;
cin>>number3;
cin>>number4;
answer = (number1 + number2 + number3 + number4) /4;
cout<<"rata-ratanya adalah "<<answer<<endl;
system ("pause");
getchar();
return 0;}
·
Graph (graf)
Merupakan struktur data yang paling umum. Jika struktur
linear memungkinkan pendefinisian keterhubungan sekuensial antar entitas data,
struktur data tree memungkinkan pendefinisian keterhubungan hiraktis, maka
struktur graph memungkinkan pendefinisian keterhubngan tak terbatas antara
entitas data.
Banyak entitas-entitas data dalam masalah-masalah nyata
secara alamiah memiliki keterhubungan langsung (adjacency) secara tak terbatas.
Ø Contoh program :
#include<iostream>
#include<cstdlib>
using namespace std;
int main(){
bool ketemu,nolsemua;
int matrix[10] [10];
int i,j,jumlah_simpul,jumlah_sisi,asal,tujuan;
//inisialisasi matrix
cout<<"jumlah simpul:";
cin>>jumlah_simpul;
cout<<"jumlah_sisi:";
cin>>jumlah_sisi;
for (i=1;i<=jumlah_simpul;i++)
for (j=1;j<=jumlah_simpul;j++)
matrix[i][j]=0;
//isi matrix sesuai input graf
for (i=1;i<=jumlah_sisi;i++){
cout<<"simpul asal:";
cin>>asal;
cout<<"simpul tujuan:";
cin>>tujuan;
matrix[asal][tujuan]=1;
matrix[tujuan][asal]=1; }
//telusuri graf
i=1;nolsemua=false;
while (i<=jumlah_simpul && !nolsemua){
j=1;ketemu=false;
while (j<=jumlah_simpul && !ketemu){
if (matrix[i][j]==1)
ketemu=true;
else j++;
}
if (!ketemu)
nolsemua=true;
else i++;
}
if(nolsemua)
cout<<"graf tidak terhubung";
else cout<<"graf terhubung";
system("PAUSE");
return EXIT_SUCCESS;
}
F. KELEBIHAN DAN KEKURANGAN
STRUKTUR
DATA
|
KELEBIHAN
|
KEKURANGAN
|
Array
|
· Struktur Data paling mudah
· Memori ekonomis, bila semua elemen terisi
· Waktu akses sama ke setiap elemen
· Array sangat cocok untuk pengaksesan
acak. Sembarang elemen di array dapat diacu secara langsung tanpa melalui elemen-elemen
lain.
|
·
Boros memori jika banyak elemen yang tidak
digunakan
·
Kebanyakan bahasa pemrograman
mengimplementasikan array statik yang sulitdiubah ukurannya di waktu
eksekusi. Bila penambahan dan pengurangan
·
terjaditerus-menerus, maka representasi statis
·
Tidak efisien dalam penggunaan memori
·
Menyiakan banyak waktu komputasi
·
Pada suatu aplikasi, representasi statis
tidak dimungkinkan
|
Record (catatan)
|
· Untuk menyimpan suatu sekumpulan elemen data
yang berbeda-beda tipenya (di banding array).
|
|
Struktur data Stack (Tumpukan)
|
· Penambahan dan penghapusan data dapat dilakukan dengan
cepat, yaitu O (1)
· Selama memori masih tersedia, penambahan data bias terus
dilakukan. Dengan demikian tidak ada kekhawatiran terjadinya stack overflow.
|
·
Setiap sel tidak hanya menyimpan value
saja, melainkan juga pointer ke sel berikutnya. Hal ini menyebabkan
implementasi stack memakai linked list akan memerlukan memori yang lebih
banyak dari pada kalau di implementasikan dengan Array.
·
Tiap elemen pada linked list hanya bisa
diakses dengan cara sekuensial, sehingga lambat, yaitu O (n).
|
Struktur data Antrian (Queue)
|
· Data yang pertama masuk maka akan pertama dilayani.
|
· Data yang terakhir masuk, bila waktu pelayanan habis
kemungkinan bisa tidak dilayani.
|
Struktur data Senarai Berantai (linked
list)
|
· Kemudahan dan efektifitas kerja yang lebih baik dalam hal
menambah, mengurangi, serta mencari suatu elemen/node yang terdapat dalam
senarai.
|
· Tidak memungkinkan pengaksesan elemen secara acak
|
Struktur data Pohon Biner (Binary
Tree)
|
· Mudah dalam penyusunan algoritma sorting
· Searching data relatif cepat
· Fleksibel dalam penambahan dan penghapusan data
|
·
Penghapusan Kompleks
|
Struktur data Graph
|
· Tidak akan menemukan jalan buntu
· Jika lebih dari solusi, maka BFS akan solusi minimum akan
ditemukan.
|
· Menyimpan memori yang besar karena menyimpan semua node
yang ada dalam satu pohon.
|
Reference
:
https://www.nusinau.com/dani-struktur-data
http://s1tik.blogspot.com/2015/07/jenis-struktur-data.html
http://muhammadfarizal01.blogspot.com/2015/06/10-contoh-array-dalam-kehidupan-sehari.html
http://nyam.blogs.uny.ac.id/2017/09/13/materi-dan-penerapan-struktur-data/
https://slideplayer.info/slide/3200989/http://muhammadfarizal01.blogspot.com/2015/06/10-contoh-array-dalam-kehidupan-sehari.html
http://nyam.blogs.uny.ac.id/2017/09/13/materi-dan-penerapan-struktur-data/
https://www.nusinau.com/dani-struktur-data