Selasa, 10 November 2015

STRUKTUR DATA STACK

Stack
Pengertian Stack pada Struktur Data adalah sebagai tumpukan dari benda, sekumpulan data yang seolah-olah diletakkan di atas data yang lain, koleksi dari objek-objek homogen, atau Suatu urutan elemen yang elemennya dapat diambil dan ditambah hanya pada posisi akhir (top) saja. Stack pada Struktur Data dapat diilustrasikan dengan dua buah kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas kotak yang lainnya. Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga, keempat, kelima, dan seterusnya, maka akan diperoleh sebuah stack kotak yang terdiri dari N kotak. 


Stack bersifat LIFO (Last In First Out) artinya Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack 

Operasi-operasi yang biasanya tredapat pada Stack yaitu:
1. Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
2. Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
3. Clear : digunakan untuk mengosongkan stack
4. IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
5. IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh

Cara mendefenisikan Stack dengan Array of Struct yaitu:
1. Definisikan Stack dengan menggunakan struct
2. Definisikan konstanta MAX_STACK untuk menyimpan maksimum isi stack
3. Buatlah variabel array data sebagai implementasi stack
4. Deklarasikan operasi-operasi/function di atas dan buat implemetasinya.
contoh :
//Deklarasi MAX_STACK
                #define MAX_STACK 10   
            
//Deklarasi STACK dengan struct dan array data
                typedef struct STACK{
                                int top;
                                char data[10][10];                                                           
                }; 

//Deklarasi/buat variabel dari struct
                STACK tumpuk;


Inisialisasi Stack
Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah kosong.
Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang.  Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack penuh.



IsFull berfungsi untuk memeriksa apakah stack sudah penuh atau tidak. Dengan cara, memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1)  maka belum full.


IsEmpty berfungsi untuk memeriksa apakah stack masih kosong atau tidak. Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong.

Push berfungsi untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack (yang ditunjuk oleh TOS).
Tambah satu (increment)  nilai top of stack lebih dahulu setiap kali ada penambahan elemen stack.
Asalkan stack masih belum penuh, isikan data baru ke stack berdasarkan indeks top of stack setelah diincrement sebelumny

Pop berfungsi untuk mengambil elemen teratas (data yang ditunjuk oleh TOS) dari stack.
Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang akan dipop, baru dilakukan decrement nilai top of stack sehingga jumlah elemen stack berkurang.


Printberfungsi untuk menampilkan semua elemen-elemen stack dengan cara looping semua nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil.




Operasi Push

void Push (NOD **T, char item)
                {
                                NOD *n;
                                n=NodBaru (item);
                                n->next=*T;
                                *T=n;
                }

Operasi Pop
char Pop (NOD **T)
                {
                                NOD *n; char item;
                                if (!StackKosong(*T)) {
                                                P=*T;
                                                *T=(*T)->next;
                                                item=P->data;
                                                free(P);
                                }
                                return item;
                }

create berfungsi untuk membuat sebuah stack baru yang masih kosong.

spesifikasi:
tujuan : mendefinisikan stack yang kosong
input : stack
syarat awal : tidak ada
output stack : - (kosong)

syarat akhir : stack dalam keadaan kosong

STRUKTUR DATA LINKED LIST

Linked List
Apa itu Linked List?
Linked List atau dikenal juga dengan sebutan senarai berantai adalah struktur data yang terdiri dari urutan record data dimana setiap record memiliki field yang menyimpan alamat/referensi dari record selanjutnya (dalam urutan). Elemen data yang dihubungkan dengan link pada Linked List disebut Node. Biasanya didalam suatu linked list, terdapat istilah head dan tail. 
·                     Head adalah elemen yang berada pada posisi pertama dalam suatu linked list
·                     Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list
Ada beberapa macam Linked List, yaitu :
1.             Single Linked List
Single Linked List merupakan suatu linked list yang hanya memiliki satu variabel pointer saja. Dimana pointer tersebut menunjuk ke node selanjutnya. Biasanya field pada tail menunjuk ke NULL.
contoh :


contoh codingannya :
struct Mahasiswa{
 char nama[25];
 int usia;
 struct Mahasiswa *next;
}*head,*tail;

    2. Double Linked List
Double Linked List merupakan suatu linked list yang memiliki dua variabel pointer yaitu pointer yang menunjuk ke node selanjutnya dan pointer yang menunjuk ke node sebelumnya. Setiap head dan tailnya juga menunjuk ke NULL. contoh :

contoh codingannya :
struct Mahasiwa{
 char nama[25];
 int usia;
 struct Mahasiswa *next,*prev;
}*head,*tail;

    3. Circular Linked List
Circular Linked List merupakan suatu linked list dimana tail (node terakhir) menunjuk ke head (node pertama). Jadi tidak ada pointer yang menunjuk NULL. Ada 2 jenis Circular Linked List, yaitu :
·                     Circular Single Linked List
contoh :

·                     Circular Double Linked List
contoh :

    4. Multiple Linked List
Multiple Linked List merupakan suatu linked list yang memiliki lebih dar 2 buat variabel pointer. contoh :


4. Non Circular linked list
Pengertian:
Single : artinya field pointer-nya hanya satu buah saja dan satu arah.
Linked List : artinya node-node tersebut saling terhubung satu sama lain. 
      Ilustrasinya
- Setiap node pada linked list mempunyai field yang berisi pointer ke node
berikutnya, dan juga memiliki field yang berisi data.
- Pada akhir linked list, node terakhir akan menunjuk ke NULL yang akan
digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list

Contoh program single linked list non circular tambah list di depan :



# include<stdio.h>
# include<stdlib.h>
# include<conio.h>
# include<iostream.h>
# include<ctype.h>
# include<string.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<<"\ninput 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;
            }
}






Memory Allocation
Dalam C/C++, alokasi memory dapat dilakukan dengan menggunakan malloc , sedangkan untuk dealokasi dapat menggunakan free. Fungsi free hanya membebaskan memory tetapi tidak menghapus isi dari memory tersebut. 

contoh penggunaan malloc:
·                     int  *px = (int *) malloc(sizeof(int));
·                     char *pc = (char *) malloc(sizeof(char));
·                     struct Facebook *curr = (struct Facebook*) malloc(sizeof(struct Facebook));
contoh penggunaan free:
·                     free(curr); 
Alokasi suatu memory biasanya dibutuhkan didalam linked list saat akan menambah node/data baru.

Insert dan Delete Node dalam Single Linked List
Insert (push) dan delete (pop) node pada linked list dapat dilakukan pada posisi depan (head), tengah (mid) dan belakang (tail)
Insert
Contoh codingan push depan :


Contoh codingan push belakang :



Insert dan Delete Node dalam Double Linked List
Insert (push) dan delete (pop) node pada linked list dapat dilakukan pada posisi depan (head), tengah (mid) dan belakang (tail)

Insert
Contoh codingan push depan :










Contoh codingan push belakang :


Header Linked List
Selain ke-4 jenis Linked List diatas, ada juga jenis lain yaitu header linked list. Header linked list merupakan header spesial yang terdiri dari node headernya. Jadi, linked list jenis ini tidak menunjuk pada node pertama (head) namun hanya menyimpan alamat dari node headernya.



Struktur Data : Array

ARRAY
Pengertian Array adalah sekumpulan variabel yang memiliki tipe data yang sama dan dinyatakan dengan nama yang sama. Array merupakan konsep yang penting dalam pemrograman, karna array memungkinkan untuk menyimpan data maupun referensi objek dalam jumlah banyak dan terindeks.
Variabel array dideklarasikan dengan mencantumkan tipe dan nama variable yang diikuti dengan banyaknya lokasi memori yang ingin dibuat.       
A.     Deklarasi Array Dimensi Satu
Array satu dimensi adalah suatu array yang terdiri dari 1 subskrip array, yaitu jumlah data maksimum.
Bentuk umum :
Tipe_data nama_array[jumlah_maks_data];



Contoh :
X : Array[1..10] of integer
Artinya : mendefinisikan 10 variabel bertipe integer
Yaitu : X1, X2, X3, … X10
Contoh lain :
NamaHari : Array [1..7] of String
Nilai : Array [1..10] of Char
Frekuensi : Array[‘A’..‘E’] of Real
Contoh :
X : Array[1..10] of integer
Artinya    : mendefinisikan 10 variabel bertipe integer
Yaitu       : X1, X2, X3, … X10
Contoh lain :
NamaHari  : Array [1..7] of String
Nilai   : Array [1..10] of Char
Frekuensi : Array[‘A’..‘E’] of Real
Bentuknya :
tipe nama_var[ukuran];
Dengan :
● tipe : menyatakan jenis elemen array (int, char, unsigned, dan lain-lain)
● ukuran : menyatakan jumlah maksimal elemen array
Contoh Program dalam bahasa C++ :
#include
main()
{
int N[5]={25,12,17,10,15};
int i;
for(i=0; i<=4; i++)
cout << N[i];
}
atau :
#include
main()
{
int N[5]={25,12,17,10,15};
int i;
for(i=0; i<=4; i++)
printf(“%d \n”,N[i]);
}
Output : 25  12   17   10   15

B. Array Dimensi Dua
Array dua dimensi hampir sama dengan array berdimensi satu, namun biasanya array berdimensi dua banyak digunakan untuk penyajian data berbentuk tabel atau juga berbentuk matriks.




Cara Memberikan Nilai/Harga pada Array
NilaiMka : Array[1..10] of Char
NilaiMka1 ß ’A’
NilaiMka2 ß ’C’
NilaiMka3 ß ’ ’

Bahasa C++ :
Variabel array dideklarasikan dengan mencantumkan tipe dan nama variable yang diikuti dengan banyaknya lokasi memori yang ingin dibuat.
Bentuknya :
tipe nama_var[ukuran];
Dengan :
● tipe : menyatakan jenis elemen array (int, char, unsigned, dan lain-lain)
● ukuran : menyatakan jumlah maksimal elemen array
Contoh :
● int c[5];
C++ secara otomatis akan menyediakan lokasi memori sesuai dengan yang dideklarasikan, dimana nomor indeks selalu dimulai dari 0.
● int c[5] = {-12, 0, 20, 85, 1551};
Nilai suatu variabel array dapat juga diinisialisasi secara langsung seperti yang terdapat di dalam tanda kurung kurawal pada saat deklarasi di atas.
● int x[5] = {0};
Deklarasi variable array sekaligus mengisi setiap lokasi memorinya dengan nilai 0.

Contoh Algoritma :
Algoritma Array1D
DEKLARASI
N : array[1..5] of integer
i : integer
DESKRIPSI
N1ß 25
N2ß 12

N3ß 17
N4ß 10
N5ß 15
For i ß 1 to 5 do
Output (Ni)
endfor
Contoh Program dalam bahasa C++ :
#include
main()
{
int N[5]={25,12,17,10,15};
int i;
for(i=0; i<=4; i++)
cout << N[i];
}
atau :
#include
main()
{
int N[5]={25,12,17,10,15};
int i;
for(i=0; i<=4; i++)
printf(“%d \n”,N[i]);
}
Output : 25   12   17   10   15
Bentuknya :
DEKLARASI
NamaArray : TipeElemen Array[r_indeks1, r_indeks2]
Cara mengakses suatu elemen :
NamaArrayindeks1,indeks2
Contoh : 1   2   3   4   1  10  1   11  15   2  20   2   21   25   3   30   3   31   35   4   40   4  41   45
Harga1,1 ß 10
Harga2,3 ß 21
Harga3,1 ß 30

*Bahasa C++ :
Bentuknya :
tipe nama_var[ukuran1][ukuran2];
ukuran1 = jumlah baris
ukuran 2 = jumlah kolom
Contoh :
int data_huruf[2][4];
Contoh :
Sebuah matrik A berukuran 2×3 dapat dideklarasikan sebagai berikut:
int a[2][3] = {{11, 7, 4},{12, 3, 9}} yang akan menempati lokasi memori dengan susunan berikut :
0  1   2   0   11   7   4   1   12   3   9
Dan definisi variabel untuk setiap elemen tersebut adalah :
0   1   2   0


a[0][0] a[0][1] a[0][2] 1
a[1][0] a[1][1] a[1][2]
Contoh Program dalam bahasa C++:
/* Program : array.cpp */
#include
void printArray(int [][3]);

main()
{ int matrik1 [2][3] = { {1, 1, 1}, {2, 2, 2}};
int matrik2 [2][3] = { {3, 3, 3}, {4, 4, 4}};
int matrik3 [2][3] = { {5, 5, 5}, {6, 6, 6}};
printArray(matrik1);
printArray(matrik2);
printArray(matrik3);
return 0;
}
void printArray(int a[][3])
{ int i, j;
for(i=0; i<=1; i++)
{ for(j=0; j<=2; j++)
cout << a[i][j]<< ” “;
cout << endl;
}
}
atau :
/* Program : array.cpp */
#include
void printArray(int [][3]);
main()
{ int matrik1 [2][3] = { {1, 1, 1}, {2, 2, 2}};
int matrik2 [2][3] = { {3, 3, 3}, {4, 4, 4}};
int matrik3 [2][3] = { {5, 5, 5}, {6, 6, 6}};
printArray(matrik1);
printArray(matrik2);
printArray(matrik3);
return 0;
}
void printArray(int a[][3])
{ int i, j;
for(i=0; i<=1; i++)
{ for(j=0; j<=2; j++)
printf(“%d “,a[i][j]);
printf(“\n”);
}
}




C.Array multi dimensi

Algoritma :
Bentuknya :
DEKLARASI
NamaArray : TipeElemen Array[r_indeks1, r_indeks2,… , r_indeksn]
Cara mengakses suatu elemen :
NamaArrayindeks1, indeks2, indeks3
Bahasa C++ :
Bentuknya :
tipe nama_var[ukuran1][ukuran2]. . .[ukuranN];
Contoh :
int data_huruf[2][4][6

KELEBIHANNYA:
1. Mudah diakses
2. Cepat dieksekusi
3. Tidak mudah crash

KEKURANGAN:
1. Jumlah terbatas
2. Membebani besar program, besar array termasuk dalam kode program
3. Ukuran memori tidak dapat diubah.

Rabu, 04 Februari 2015

contoh bahasa c++ 3

contoh penggunaan bahasa c++



// ktp
# include <stdio.h>     //  sebuah compiler 

int main ()
{
char nama, tempattanggallahir; // ini adalah jenis type data (char) dan sebuah variabel
int jeniskelamin, alamat, rt, rw, no, kelurahan, kecamatan; // ini adalah jenis type data (int) dan sebuah variabel
int agama, statusperkawinan, pekerjaan, kewarganegaraan, berlakuhingga; // ini adalah jenis type data (int) dan sebuah variabel

printf ("nama ? ");     // mencetak tampilan nama
scanf ("%s", &nama); // memasukan data nama yang akan kita inginkan dengan mengetik tombol keyboard
printf ("tempat tanggal lahir ?"); // mencetak tampilan tempat tanggal lahir 
scanf ("%s", &tempattanggallahir); // memasukan data tempat tanggal lahir yang akan kita inginkan dengan mengetik tombol keyboard
printf ("jenis kelamin ?"); // mencetak tampilan jemis kelamin
scanf ("%s", &jeniskelamin); // memasukan data jenis kelamin yang akan kita inginkan dengan mengetik tombol keyboard
printf ("alamat ?"); // mencetak tampilan alamat
scanf ("%s", & alamat); // memasukan data alamt yang akan kita inginkan dengan mengetik tombol keyboard
printf ("rt ?"); // mencetak tampilan rt
scanf ("%s",rt); // memasukan data rt yang akan kita inginkan dengan mengetik tombol keyboard
printf ("rw ?"); // mencetak tampilan rw
scanf ("%s", & rw); // memasukan data rw yang akan kita inginkan dengan mengetik tombol keyboard
printf ("no ?"); // mencetak tampilan nomor
scanf ("%s", & no); // memasukan data nomor yang akan kita inginkan dengan mengetik tombol keyboard
printf ("kelurahan ?"); // mencetak tampilan kelurahan
scanf ("%s", & kelurahan); // memasukan data kelurahan yang akan kita inginkan dengan mengetik tombol keyboard
printf ("kecamatan ?"); // mencetak tampilan kecamatan
scanf ("%s", & kecamatan); // memasukan data kecamatan yang akan kita inginkan dengan mengetik tombol keyboard
printf ("agama ?"); // mencetak tampilan agama
scanf ("%s", & agama); // memasukan data agama yang akan kita inginkan dengan mengetik tombol keyboard
printf ("status perkawinan ?"); // mencetak tampilan status perkawinan
scanf ("%s", & statusperkawinan); // memasukan data status perkawinan yang akan kita inginkan dengan mengetik tombol keyboard
printf ("pekerjaan ?"); // mencetak tampilan pekerjaan
scanf ("%s", & pekerjaan); // memasukan data pekerjaan yang akan kita inginkan dengan mengetik tombol keyboard
printf ("kewarganegaraan?"); // mencetak tampilan kewarganegaraan
scanf ("%s", & kewarganegaraan);
// memasukan data kewarganegaraan yang akan kita inginkan dengan mengetik tombol keyboard
printf ("berlaku hingga?"); // mencetak tampilan berlaku hingga
scanf ("%s", & berlakuhingga);
// memasukan data berlaku hingga yang akan kita inginkan dengan mengetik tombol keyboard

fflush(stdin); getchar(); // untuk menampilkan hasil dari program 
  return 0;
}

/* Jadi jika ada perintah printf maka dia akan mencetak yang tertulis seperti pada contoh : printf ("nama ? "); maka dicetak nama sesuai yang tertulis
scanf sebuah perintah memasukan atau menginput data yang kita masukan yang berformat
jenis type data yang digunakan disin adalah char (character) biasanya untuk huruf
dan juga int (interger) digunakan untuk angka dan huruf dan huruf ,, karakter konversi type data disini memakai string (%s) atau sejumlah 
karakter*/


// mohon maaf bilaa ada kesalahan