Kamis, 19 Juli 2012

Rangkuman Struktur Data




Muqadimah
                Nama Kampus                   : Politeknik Komputer Niaga LPKIA Bandung
                Program Studi                   : Manajemen Informatika
                Konsentrasi                        : Teknik Informatika
                Kelas                                 : 1TI-5
                Nama Mahasiswa              : Adji Kristiawan
                NRP                                 : 6311163
                Mata Kuliah                       : Teori Struktur Data
                Nama Dosen                     : Dadan Nurdin Bagenda, ST.

Pengertian Struktur Data.

Struktur Data adalah suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya. Pemakaian Struktur Data yang tepat didalam proses pemrograman, akan menghasilkan Algoritma yang lebih jelas dan tepat sehingga menjadikan program secara keseluruhan lebih sederhana.

Pada garis besarnya, Data dapat dikategorikan menjadi :
A. Type Data Sederhana / Data Sederhana
Terdiri dari :
1. Data Sederhana Tunggal
Misalnya : Integer, Real/Float, Boolean dan Character

2. Data Sederhana Majemuk
Misalnya : String

B. Struktur Data
Terdiri dari :
1. Struktur Data Sederhana
Misalnya Array dan Record

2. Struktur Data Majemuk
Terdiri dari :
A. Linier
Misalnya : Stack, Queue dan Linear Linked List.
B. Non Linier
Misalnya : Pohon (Tree), Pohon Biner (Binary Tree), Pohon Cari Biner (Binary Search Tree), General Tree serta Graph.

Array di C++ adalah  kumpulan  data  yang  terdiri  dari  tipe  data  yang  sama.  Setiap  nilai  yang berada   dalam   array   disebut   elemen.   Letak   atau   posisi   dari   dari   elemen   array ditunjukkan  oleh  suatu  index.  Berdasarkan  dimensinya,  array  dapat  dibagi  menjadi array dimensi satu, array multi-dimensi.
contoh program array 1 dimensi:

#include<iostream.h>
#include<conio.h>
main()
{
int a[5]={10,15,20,25,30};
int b[5]={10,20};
int c[5]={15,0,30};
int j;

// Menampilkan nilai dari element array
cout<<endl;
for(j=0;j<5;j++)
{
cout<<"A ["<<j<<"] = "<<a[j]<<" , B ["<<j<<"] = "<<b[j]<<" , C ["<<j<<"] = "<<c[j]<<endl;
}
getch();
}

Setelah dieksekusi :


program array dua dimensi:
//array dua dimensi
#include<iostream.h>
#include<conio.h>
main()
{
int matrix[3][3];
int i,j;

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

Pointer adalah variable yang berisi alamat memory sebagai nilainya dan berbeda dengan variable biasa yang berisi nilai tertentu. Dengan kata lain, pointer berisi alamat dari variable yang mempunyai nilai tertentu.
Dengan demikian, ada variabel yang secara langsung menunjuk ke suatu nilai tertentu, dan variabel yang secara tidak langsung menunjuk ke nilai.
Contoh Program Pointer:

#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: 
Nilai variable X adalah J
Nilai variable Y adalah J
Nilai variable Z adalah J
Nilai variable X berada di alamat memori 2527:24C7

Linked list hampir mirip dengan array, hanya saja linked list lebih bersifat dinamis jika dibandingkan dengan array. Seperti yang kita ketahui, saat memakai array, besarnya array tersebut bersifat statis, misalnya kita mendeklarasikan array yang besarnya 5 indeks maka dari program dimulai sampai berakhir ukuran array tersebut tidak akan berubah meskipun yang dipakai dalam memory hanya 2 indeks saja. Dan kita tidak bisa menginputkan data lebih dari 5 indeks. Linked list ada untuk menutupi kelemahan-kelemahan array yang tadi disebutkan.
Secara umum linked list tersusun atas sejumlah bagian-bagian data yang lebih kecil yang terhubung (biasanya melalui pointer). Linked list dapat divisualisasikan seperti kereta, bagian kepala linked list adalah mesin kereta, data yang disimpan adalah gerbong, dan pengait antar gerbong adalah pointer.

Linked list memiliki beberapa jenis, di antaranya :
A. Single linked list
B. Double linked list
C. Multiply linked list
D. Linear linked list
E. Circular Linked List

Contoh program Single linked list :
#include <iostream.h>
#include <conio.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 *next;
} mhs, *baru, *awal=NULL, *akhir=NULL,*hapus,*bantu;


int main()
{
    do
    {
        clrscr();
        cout<<"MENU SINGLE 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->next=NULL;
}

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

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

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

void hapus_belakang()
{
    if (awal==NULL)
        cout<<"Kosong";
    else if(awal==akhir)
    {
         hapus=awal;
         awal=awal->next;
         free(hapus);
    }
    else
    {
        hapus=awal;
        while(hapus->next!=akhir)
             hapus=hapus->next;
        akhir=hapus;
        hapus=akhir->next;
        akhir->next=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->next;
         }
     }
     getch();
}

Contoh program Double Linked List :

#include “stdio.h”
#include “stdlib.h”
#include “conio.h”
struct node{
struct node *previous;
int info;
struct node *next;
};
typedef struct node *simpul;

void main()
{
simpul baru, head=NULL, tail=NULL, temp;
int pilih;

do
{
printf(“MENU\n”);
printf(“1. Insert Depan\n”);
printf(“2. View\n”);
printf(“3. Search\n”);
printf(“4. Delete Depan\n”);
printf(“PILIH: “);
scanf(“%d”, &pilih);
switch(pilih)
{
case 1:
int data;
printf(“Data Masuk: “);
scanf(“%i”, &data);
baru = (simpul) malloc(sizeof (struct node));
baru->info = data;
baru->next = NULL;        //tidak menuju simpul mana2
baru->previous = NULL;
if (head == NULL)             //khusus simpul pertama LL
{
head = baru;      //pointer head, tail, baru sama
tail = baru;
}
else        //untuk simpul2 berikutnya
{
baru->next = head;
head->previous = baru;
head = baru;
}
break;
case 2:
printf(“Dari HEAD\n”);
temp = head;     //tampilkan mulai dr depan
while(temp!=NULL)        //ulangi sampai temp bernilai NULL
{
printf(“%i “, temp->info);
temp = temp->next;      //geser temp ke belakang
}
printf(“\nDari Tail\n”);
temp = tail;         //tampilkan mulai dr depan
while(temp!=NULL)        //ulangi sampai temp bernilai NULL
{
printf(“%i “, temp->info);
temp = temp->previous;              //geser temp ke belakang
}
printf(“\n”);
break;
case 3:
int cari;
printf(“Cari Angka: “);
scanf(“%i”, &cari);
temp = head;
while((temp!=NULL)&&(temp->info!=cari))
{
temp = temp->next;
}
if(temp != NULL && temp->info == cari)
printf(“Data Ditemukan”);
else //if(temp == NULL)
printf(“Data Tidak Ditemukan”);
printf(“\n”);
break;
case 4://hapus depan
temp = head;
head = head->next;
if (head != NULL)
head->previous = NULL;
if (head == NULL)
tail = NULL;
free(temp);
break;
}
}while (pilih!=5);
}

Contoh Program Multiply Linked List :

#include <stdio.h>
#include <stdlib.h>
#include "tp5.c"

int main()
{
    int pil;
    InfoParent x,cari;
    InfoChild y;
    char dump;
    List A;
    addressParent p;
    addressChild q;
    CreateList(&A);

    do
    {
        system("cls");
        printf("Menu Multi List\n");
        printf("1. Insert First\n");
        printf("2. Insert Child\n");
        printf("3. Delete Parent\n");
        printf("4. View\n");
        printf("5. Exit\n");
        printf("PILIHAN <1-5> : ");
        scanf("%d",&pil);
        scanf("%c",&dump);
        switch(pil)
        {
            case 1 :
                        printf("Masukan Parentnya : ");
                        scanf("%s",&x);
                        p=alokasiParent(x);
                        InsertFirstParent(&A,p);
                        break;
            case 2 :
                        printf("Masukan Parentnya : ");
                        scanf("%s",&cari);
                        p=search(A,cari);
                        if(first(A)==nil)
                        {
                            printf("List Kosong");
                        }
                            else
                            {
                                if(p==nil)
                                {
                                    printf("Parent tidak ada");
                                }
                                    else
                                    {
                                        printf("Masukan Childnya : ");
                                        scanf("%s",&y);
                                        q=alokasiChild(y);
                                        InsertFirstChild(&p,q);
                                    }
                            }
                        break;
            case 3 :
                        DeleteFirstParent(&A);
                        break;
            case 4 :
                        system("cls");
                        View(A);
                        break;
            case 5 :

                        printf("Terima Kasih");
                        break;
            default :
                        printf("Keyword Salah");
        }getche();
    }while(pil!=5);
    return 0;
}

Contoh Program Circular Linked List :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct node{
int data;
struct node *next;
};

typedef struct node node;

node *pList = NULL;

node *alokasiNodeBaru(){
node *pNew = NULL;
pNew = (node *) malloc(sizeof(node));
return(pNew);
}

void tambahAwal(node *pNew){
node *temp;
if(pList == NULL){
pNew->next = pNew;
pList = pNew;
}
else{
//mencari node yang menunjuk pList
temp = pList;
while(temp->next != pList){
temp = temp->next;
}
temp->next = pNew;
pNew->next = pList;
pList = pNew;
}
}

void cetak(){
node *pWalker = pList;
node *pNext = NULL;
while(pNext != pList){
printf(“pWalker = %d, “, pWalker->data);
pNext = pWalker->next;
pWalker = pNext;
printf(“pWalker->next = %d \n”, pWalker->data);
}
}

void tambahTengah(node *pNew){
node *pWalker;
pWalker=pList;
int nilai,sisip;
printf(“masukkan nilai yang ingin ditambahkan: “); scanf(“%d”,&nilai);
pNew->data = nilai;
cetak();
printf(“data disisipkan setelah nilai : “); scanf(“%d”,&sisip);
while(pWalker!=NULL && pWalker->data!=sisip){
pWalker=pWalker->next; }

if(pWalker->next==pList) printf(“\ndata tidak ditemukan”);
else {pNew->next=pWalker->next;
pWalker->next=pNew; }
cetak();

}

void tambahAkhir(node *pNew){
node *pPre;
pPre=pList;
int nilai;
printf(“masukkan nilai yang ingin ditambahkan: “); scanf(“%d”,&nilai);
pNew->data = nilai;
while(pPre->next!=pList){
pPre=pPre->next; }
pNew->next=pList;
pPre->next=pNew;

}

void hapusAwal(){
node *pEnd, *pHapus;
pEnd=pList;
pHapus=pList;
while(pEnd->next!=pList){
pEnd=pEnd->next;}
pEnd->next=pHapus->next;
pList=pList->next;
free(pHapus);
}

void hapusTengah(){
node *pCari,*pPre;int hapus;
pPre=pList;
pCari=pList;
cetak();
printf(“Masukkan bilangan yang ingin dihapus: “); scanf(“%d”,&hapus);
while(pCari->data!=hapus){
pCari=pCari->next; }
while(pPre->next!=pCari){
pPre=pPre->next;}
pPre->next=pCari->next;
free(pCari);

}

void hapusAkhir(){
node *pEnd,*pPre;
pEnd=pList;
pPre=pList;
while(pEnd->next!=pList){
pEnd=pEnd->next;}
while(pPre->next!=pEnd){
pPre=pPre->next;}
pPre->next=pList;
free(pEnd);
}

int main(int argc, char *argv[])
{
node *pNew; int pilih,bil;
do{
system(“cls”);
printf(“====================”);
printf(“======= MENU =======”);
printf(“====================”);
printf(“\n\n”);
printf(“\n1.tambah di awal”);
printf(“\n2.tambah di tengah”);
printf(“\n3.tambah di akhir”);
printf(“\n4.hapus di awal “);
printf(“\n5.hapus di tengah”);
printf(“\n6.hapus di akhir”);
printf(“\n7.cetak”);
printf(“\n8.exit”);
printf(“\nMasukkan pilihan : “);scanf(“%d”,&pilih);

if(pilih==1){pNew=alokasiNodeBaru();
printf(“masukkan bilangan: “);
scanf(“%d”,&bil);
pNew->data=bil;
tambahAwal(pNew);
}
else if(pilih==2){pNew=alokasiNodeBaru();
tambahTengah(pNew);
}
else if(pilih==3){pNew=alokasiNodeBaru();
tambahAkhir(pNew);
}
else if(pilih==4){hapusAwal();}
else if(pilih==5){hapusTengah();}
else if(pilih==6){hapusAkhir();}
else if(pilih==7){cetak();getch();}

}while(pilih!=8);

printf(“\n”);
system(“pause”);
return 0;
}