Kamis, 19 Juli 2012

Rangkuman Mata Kuliah Struktur data


Rangkuman Mata Kuliah Struktur data



A. PEMBUKA
Blog ini dibuat semata mata untuk memenuhi tugas akhir mata kuliah struktur data
adapun data diri saya :

-Nama                        : Donny Setiabudi
-NIM                           : 6311191
-Alamat                       : Jl. Ciateul No 125 blok A
-Kelas saat ini             : 1 TI 6
-Nama Mata Kuliah      : Struktur Data
-Nama Dosen              : Dadan Nurdin Bagenda. ST
-Nama Kampus          : PKN STMIK LPKIA Bandung

B. PEMBAHASAN MATERI


Rangkuman Mata Kuliah Struktur data

A. PEMBUKA
Blog ini dibuat semata mata untuk memenuhi tugas akhir mata kuliah struktur data
adapun data diri saya :

-Nama                        : Donny Setiabudi
-NIM                           : 6311191
-Alamat                       : Jl. Ciateul No 125 blok A
-Kelas saat ini             : 1 TI 6
-Nama Mata Kuliah      : Struktur Data
-Nama Dosen              : Dadan Nurdin Bagenda. ST
-Nama Kampus          : PKN STMIK LPKIA Bandung

B. PEMBAHASAN MATERI

1.Pengertian Struktur Data
    struktur data adalah cara penyimpanan, penyusunan dan pengaturan data di dalam media penyimpanan komputer sehingga data tersebut dapat digunakan secara efisien.
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.

2. Gambaran Struktur Data



     

Array dan Pointer




Array adalah organisasi kumpulan data homogen yang ukuran atau jumlah elemen maksimumnya telah diketahui dari awal. Array umumnya disimpan di memori komputersecara kontigu (berurutan). Deklarasi dari array adalah sebagai berikut: int A[5]; artinya variabel A adalah kumpulan data sebanyak 5 bilangan bertipe integer.
Operasi terhadap elemen di array dilakukan dengan pengaksesan langsung.Nilai di masing-masing posisi elemen dapat diambil dan nilai dapat disimpan tanpa melewati posisi-posisi lain. Terdapat dua tipe operasi, yaitu:
1. Operasi terhadap satu elemen/posisi dari array
2. Operasi terhadap array sebagai keseluruhan

Dua operasi paling dasar terhadap satu elemen/posisi adalah
1. Penyimpanan nilai elemen ke posisi tertentu di array
2. Pengambilan nilai elemen dari posisi tertentu di array
Keunggulan array adalah sebagai berikut:
1. Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array dapat diacu secara langsung tanpa melalui elemen-elemen lain.
2. Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke elemenelemen tetangga, baik elemen pendahulu atau elemen penerus.
Kelemahan array adalah sebagai berikut:
Array mempunyai fleksibilitas rendah, karena array mempunyai batasan sebagai berikut:
1. Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana satu elemen
adalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe lain
2. Kebanyakan bahasa pemrograman mengimplementasikan array statik yang sulit
diubah ukurannya di waktu eksekusi. Bila penambahan dan pengurangan terjadi
terus-menerus, maka representasi statis
• Tidak efisien dalam penggunaan memori
• Menyiakan banyak waktu komputasi
• Pada suatu aplikasi, representasi statis tidak dimungkinkan
Contoh Program Array :
#include<constream.h>
void main()
{
 int n;
 int array[10];
 clrscr();

 cout<<"input data array : "<<endl;
 for (n=0; n<10; n++)
 {
 cout<<"elemen ke "<<n+1<<":"; cin>>array[n];
 }
 cout<<endl;
 cout<<"tampil data array : "<<endl;
 for (n=0; n<10; n++)
 {
 cout<<"elemen ke "<<n+1<<":"<<array[n]<<endl;
 }
 getch();
}

Hasil dari program tersebut adalah variable array menampung 5 kumpulan variable bertipe integer dan hasilnya seperti gambar dibawah.



Pointer
Pointer adalah suatu variabel penunjuk, berisi nilai
yang menunjuk alamat suatu lokasi memori tertentu. Jadi 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.
Misalnya kita ingin membuat beberapa penunjuk ke blok penyimpan yang berisi
integer. Deklarasi pada C adalah:
int *IntegerPointer ;
Tanda asterik (*) yang berada sebelum nama variable IntegerPointer menandakan
‘pointer pada suatu int’. Jadi deklarasi diatas berarti ‘definisikan sebuah tipe yang terdiri
dari pointer bertipe integer yang bernama IntegerPointer’.
Apabila didepannya ditambahkan typedef sebagai berikut
Typedef int *IntegerPointer ;
Berarti IntegerPointer merupakan suatu tipe pointer berbentuk integer.
Apabila akan mendeklarasikan dua variable A dan B sebagai penunjuk ke bilangan
integer :
IntegerPointer A, B ;
Berarti kompiler C akan berisi nilai dari variable A dan B yang ‘menunjuk ke integer’.
Contoh program Luas Persegi menggunakan Pointer :
#include<iostream.h>
#include<conio.h>
void main()
{
   clrscr();
   int L,x,y,*p;
   p=&x;
   cout<<"Panjang : ";
   cin>>*p;
   p=&y;
   cout<<"Lebar   : ";
   cin>>*p;
   L=x*y;
   cout<<"Luasnya : "<<L;
   getch();
}
Hasilnya






STRUKTUR DATA LINIER


STRUKTUR DATA LINIER
Struktur data linear adalah kumpulan komponen-komponen yang tersusun membentuk satu garis linear. Bila komponen-komponen ditambahkan (atau dikurangi), maka struktur-struktur tersebut berkembang (atau menyusut). Pemakaian sturktur data yang tepat di dalam proses pemrogramanakan menghasilkan algoritma yang lebih jelas dan tepat , sehingga menjadikan program secara keseluruhan lebih efisien dan sederhana.
Linked List
Daftar bertaut (bahasa Inggris: linked list) atau kadang-kadang disebut dengan senarai bertaut atau senarai berantai dalam ilmu komputer merupakan sebuah struktur data yang digunakan untuk menyimpan sejumlah objek data biasanya secara terurut sehingga memungkinkan penambahan, pengurangan, dan pencarian atas elemen data yang tersimpan dalam daftar dilakukan secara lebih efektif. Pada praktiknya sebuah struktur data memiliki elemen yang digunakan untuk saling menyimpan rujukan antara satu dengan lainnya sehingga membentuk sebuah daftar abstrak, tiap-tiap elemen yang terdapat pada daftar abstrak ini seringkali disebut sebagai node. karena mekanisme rujukan yang saling terkait inilah disebut sebagai daftar berantai.
Double linked list Circular

Double Linked List Circular adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field yang berisi data untuk node tersebut.
Double Linked List Circular pointer next dan prev nya menunjuk ke dirinya sendiri secara circular.
•          Double: artinya field pointer-nya terdiri dari dua buah dan dua arah, yaitu prev dan next
•          Linked List: artinya node-node tersebut saling terhubung satu sama lain.
•          Circular: artinya pointer next dan prev-nya menunjuk ke dirinya sendiri.

  b) Double linked list Non Circular
Double linked list non circular" adalah Double Linked List yang memiliki 2 buah pointer yaitu pointernext dan prev.
Pointer next menunjuk pada node setelahnya dan pointer prev menunjuk pada node sebelumnya.
Pengertian:
Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Non Circular : artinya pointer prev dan next-nya akan menunjuk pada NULL.
c) Single linked list Circular
SLLC adalah Single Linked List yang pointer nextnya menunjuk pada dirinya sendiri.  Jika Single Linked List tersebut terdiri dari beberapa node, maka pointer next pada node terakhir akan menunjuk ke node terdepannya.
Pengertian:
Single : artinya field pointer-nya hanya satu buah saja dan satu arah.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Circular : artinya pointer next-nya akan menunjuk pada dirinya sendiri sehingga berputar.
Single linked list Non Circular :
SINGLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD

Dibutuhkan satu buah variabel pointer : head yang akan selaku menunjuk pada node pertama
Deklarasi Pointer Penunjuk Head Single Linked List sebagai berikut :

TNode*head

Tambah data Di Depan
Penambahan data baru akan dikaitan di node paling depan, namun pada daat pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara : node head ditunjukan ke node baru tersebut
Prinsipnya adalah mengkaitkan node baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap sekaku menjadi data terdepan.

Menambah Node Di Belakang
Penambahan dilakukan di belakang, namin pada saat pertama kali, node langsung ditunjuk oleh head, membutuhkan pointer bantu untuk mengetahui node terbelakang kemudian dikaitkan dengan node baru, perlu digunakan perulangan.

Menghapus Data Di Depan
Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunaan suatu pointer lain (hapus) yang digunakan untuk menunjuk node yang akan dihapus, barulah kemusian menghapus pointer menggunakan perintah delete. Sebelum data terdepan terhapus, terlebih dahulu head harus menunhuk ke alamat berikutnya agar list tidak putus, jika head masih NULL berarti data masih kosong.

Menghapus Data Di Belakang
Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk menunjuk node yang akan dihapus, Pointer bantu untuk menunjuk node sebelum node yang akan dihapus yang akan menjadi node yang terakhir. Pointer bantu digunakan untuk menunjuk ke nilai NULL selalu bergerak sampai sebelum node yang akan dihapus kemudian pointer hapus diletakan setelah pointer bantu. Selanjutnya pointer hapus akan menunjuk ke NULL.

Struktur data Non linear


Struktur data Non linear:
Tree Binary tree
      - Tree adalah sebuah Pohon adalah suatu struktur data yang digunakan secara luas yang menyerupai struktur pohon dengan sejumlah simpul yang terhubung.
     - Binary tree adalah pohon biner (binary tree) adalah sebuah pohon struktur data dimana setiap simpul memiliki paling banyak dua anak,secara khusunya anaknya dinamakan kiri kanan.

Graph
Graph adalah kumpulan dari simpul dan busur yang secara matematis dinyatakan sebagai :
G = (V, E)
Dimana
G = Graph
V = Simpul atau Vertex, atau Node, atau Titik
E = Busur atau Edge, atau arc
Sebuah graph mungkin hanya terdiri dari satu simpul
Sebuah graph belum tentu semua simpulnya terhubung dengan busur
Sebuah graph mungkin mempunyai simpul yang tak terhubung dengan simpul yang lain
Sebuah graph mungkin semua simpulnya saling berhubungan
Graph tak berarah (undirected graph atau non-directed graph) :
Urutan simpul dalam sebuah busur tidak dipentingkan. Mis busur e1 dapat disebut busur AB atau BA
Graph berarah (directed graph) :
Urutan simpul mempunyai arti. Mis busur AB adalah e1 sedangkan busur BA adalah e8.
Graph Berbobot (Weighted Graph)
Jika setiap busur mempunyai nilai yang menyatakan hubungan antara 2 buah simpul, maka busur tersebut dinyatakan memiliki bobot.

Contoh Program Single List Non Circular


Contoh Program Pertama.
#include <iostream.h>
#include <conio.h>
#include <process.h>
#define null 0


typedef struct tnode
{
    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<<"data masuk\n";
    getch();
}
void insertbelakang(int databaru)
{
    tnode *baru,*bantu;
    baru=new tnode;
    baru->data=databaru;
    baru->next=null;
    if(isempty()==1)
    {
head=baru;
head->next=null;
    }
    else
    {
bantu=head;
while(bantu->next!=null)
{
   bantu=bantu->next;
}
bantu->next=baru;
    }
cout<<"data masuk\n";
getch();
}
void tampil()
{
    tnode *bantu;
    bantu=head;
    if(isempty()==0)
    {
while(bantu!=null)
{
  cout<<bantu->data<<" ";
  bantu=bantu->next;
}
cout<<endl;
    }
    else
    {
cout<<"masih kosong";
    }
    getch();
}

void main()
{
    int pil,bil;
    pil=0;
    while(pil!=3)
    {
clrscr();
cout<<"1. Insertdepan\n";
cout<<"2. Insertbelakang\n";
cout<<"3. tampil\n";
cout<<"Masukkan pilihan anda: ";cin>>pil;

switch(pil)
{
case 1:
cout<<"Masukkan bilangan: ";cin>>bil;
insertdepan(bil);
 break;
case 2:
cout<<"Masukkan bilangan: ";cin>>bil;
insertbelakang(bil);
 break;
case 3:tampil();
 break;
default:cout<<"salah pilih";
}
     }
}

Contoh Program Kedua

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

class list
{
struct data
{
int kode;
char nama[30];
long harga;
struct data *next;
};

public:

typedef struct data node;
typedef node * pnode;

pnode isi();
int  menu(void);
void tambah(pnode *awal,pnode baru);
void hapus(pnode *awal);
void cari(pnode awal,int cari);
void tampil(pnode awal);
void load();
void burung();
};

int list::menu()
{
textcolor(WHITE);
int pilihan;
clrscr();

gotoxy(27,6);
cout<<"----------------------\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,7);
cout<<"     Menu List\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,8);
cout<<"----------------------\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,9);
cout<<"1. Menambah Barang\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,10);
cout<<"2. Menghapus Barang\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,11);
cout<<"3. Mencari Barang\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,12);
cout<<"4. Menampilkan Barang\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,13);
cout<<"5. Keluar Program\n"; delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,14);
cout<<"----------------------\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,15);
cout<<"Pilihan [1-5] : ";delay(75);
cin>>pilihan;
sound(2500);delay(10);nosound();

return(pilihan);
}

void main()
{
nosound();
clrscr();
list elemen;
int pilih=1;
int cari;

pnode awal=NULL;
pnode baru;

elemen.burung();
elemen.load();
nosound();

while(pilih!=5)
{
pilih=elemen.menu();
clrscr();

switch(pilih)
{
case 1 :
{
baru=elemen.isi();
elemen.tambah(&awal,baru);
break;
}
case 2 :
{
elemen.hapus(&awal);
break;
}
case 3 :
{
cout<<"masukan Kode : ";
cin>>cari;
elemen.cari(awal,cari);
break;
}
case 4 :
{
elemen.tampil(awal);
break;
}
case 5 :
{
break;
}
default :
cout<<"The Wrong Choice!";
cout<<"\n\nPress anykey to continue!!!";
getch();
}
}
}

void list::tambah (pnode *awal,pnode baru)
{
if (*awal==NULL)
*awal=baru;
else
{
baru->next=*awal;
*awal=baru;
}
}


void list::hapus(pnode *awal)
{
pnode ph,predph;
ph = *awal;

if(*awal==NULL)
{
cout<<"List Kosong";
}
else
{
if(ph -> next==NULL)
{
*awal=NULL;
free(ph);
}
else
{
while(ph -> next!=NULL)
{
predph = ph;
ph = ph->next;
}
predph -> next=NULL;
free(ph);
}
cout<<"Deleting Data...\n";
}
cout<<"\n\nPress anykey to continue!!!";
getch();
}


void list::cari(pnode awal, int cari)
{
pnode posisi;
posisi=awal;

if(posisi==NULL)
cout<<"List Kosong";
else
{
cout<<"    Data Barang\n";
cout<<"---------------------\n";
cout<<"Kode  "<<"\tNama  "<<"\tHarga \n";
while(posisi!=NULL && posisi -> kode!=cari)
{
posisi=posisi->next;
}
if(posisi!=NULL)
{
cout<<"---------------------\n";
cout<<posisi->kode<<"\t"<<posisi->nama<<"\t"<<posisi->harga<<endl;
cout<<"---------------------\n";
}
else
{
clrscr();
cout<<"Kode Barang Tidak Ada !!";
}
}
cout<<"\n\nPress anykey to continue!!!";
getch();
}

void list::tampil(pnode awal)
{
pnode posisi;
posisi=awal;

if(posisi==NULL)
cout<<"List Kosong";
else
{
cout<<"    Data Barang\n";
cout<<"---------------------\n";
cout<<"Kode  "<<"\tNama  "<<"\tHarga \n";

while(posisi!=NULL)
{
cout<<"---------------------\n";
cout<<posisi->kode<<"\t"<<posisi->nama<<"\t"<<posisi->harga<<endl;
posisi=posisi->next;
}
cout<<"---------------------\n";
}
cout<<"\n\nPress anykey to continue!!!";
getch();
}

pnode list::isi(void)
{
pnode baru;

baru=(node*)malloc(sizeof(node));
cout<<"Masukkan data barang!\n\n";
cout<<"Kode : "; cin>>baru->kode;
cout<<"Nama : "; cin>>baru->nama;
cout<<"Harga: "; cin>>baru->harga;

baru->next=NULL;
cout<<"\nPress anykey to continue!!!";
getch();
return (baru);
}

void list::load()
{
int i, z;
clrscr();

textbackground(BLACK);
textcolor(WHITE);
gotoxy(32,10);
cprintf("Please wait");
gotoxy(29,11);
cprintf("Loading");

for(z=0;z<=100;z++)
{
textcolor(GREEN);
gotoxy(37,11);
cprintf("[ %d %% ]",z);
sound(100+z+z+z+z);
delay(50);

}
nosound();
clrscr();
}

void list::burung()
{
int i;

clrscr();

for(i=1500;i<2000;i++)
{
sound(i);
delay(1);
}

for(i=1500;i<2000;i++)
{
sound(i);
delay(1);
}

for(i=2000;i>1500;i--)
{
sound(i);
delay(1);
}
nosound();
}