Minggu, 28 Februari 2010

sakit kepala

Sakit kepala yang secara medis dikenal sebagai cephalalgia atau dilafalkan cephalgia adalah suatu kondisi terdapatnya rasa sakit di dalam kepala: kadang sakit di belakang leher atau punggung bagian atas, disebut juga sebagai sakit kepala. Jenis penyakit ini termasuk dalam keluhan-keluhan penyakit yang sering diutarakan.

Jumat, 26 Februari 2010

jenis jenis data

DEFINISI DATA DAN STRUKTUR DATA


Definisi Data dan Informasi
Data
Data merupakan kumpulan huruf atau angka yang belum diolah sehingga tidak memiliki arti
Informasi adalah
Informasi adalah data yang telah diolah menjadi bentuk yang lebih berguna dan lebih berarti bagi yang menerimanya.
Kualitas informasi
1.Akurat, berarti informasi harus bebas dari kesalahan – kesalahan dan tidak bias atau menyesatkan, akurat juga berarti informasi harus jelas mencerminkan maksudnya
2.Timelines(Tepat waktu), berarti informasi yang datang pada penerima tidak boleh terlambat. Informasi yang usang tidak akan mempunyai arti lagi.
3.Relevance, berarti informasi tersebut mempunyai manfaat untuk pemakainya.
Nilai Informasi
Nilai informasi ditentukan oleh 2(dua) hal:
Manfaat BiayaDikatakan bernilai bila manfaatnya lebih efektif dibandingkan dengan biaya mendapatkannya.
1Pertemuan 3Siklus InformasiDidalam kegiatan suatu perusahaan, misalnya dari hasil transaksi penjualan oleh sejumlah faktur-faktur yang merupakan data dari penjualan pada suatu periode tertentu. Faktur-faktur penjualan tersebut masih belum dapat bercerita banyak kepada manajemen. Untuk keperluan pengambilan keputusan, maka faktur-faktur tersebut perlu diolah lebih lanjut untuk menjadi suatu informasi. Setelah data transaksi penjualan diolah, beraneka ragam informasi dapat dihasilkan darinya. Misalnya:
Informasi berupa laporan penjualan tiap-tiap salesman, berguna bagi manajemen untuk menetapkan besarnya komisi dan bonus
Informasi berupa laporan penjualan tiap-tiap daerah, berguna bagi manajemen untuk pelasanaan promosi dan pengiklanan
Informasi untuk mengevaluasi barang yang tidak atau kurang laku terjual.Data yang diolah melalui suatu model menjadi informasi, penerima kemudian menerima informasi tersebut, membuat suatu keputusan dan melakukan tindakan yang berarti menghasilkan suatu tindakan yang lain yang akan membuat sejumlah data kembali. Dat tersebut akan ditangkap sebagi input, diproses kembali lewat suatu model dan seterusnya membentuk suatu siklus.
2 Proses (Model Dasar)
Input(Data)
OutputInformasi
Data(Ditangkap)
Penerima
KeputusanTindakan
Hasil Tindakan
DasarDataPertemuan 3
Ciri Informasi
Informasi mempunyai ciri-ciri sebagai berikut:1.Benar atau salah ini dapat berhubungan dengan realita atau tidak. Bila penerima informasi yang salah mempercayainya akibat informasi seperti yang benar2.BaruInformasi dapat sama sekali baru dan segar bagi si penerima3.TambahanInformasi dapat diperbaharui dari informasi yang telah ada4.KorektifInformasi dapat menjadi koreksi dari informasi yang salah5.PenegasDapat memeprtegas dari informasi yang telah ada


PENGOLAHAN DATA
Penolahan data merupakan segala macam bentuk pengolahan terhadap data untuk membuatn data itu berguna sesuai dengan hasil yang diinginkan sehingga dapat segera dipakai
SISTEM PENGOLAHAN DATA
Sistem pengolahan data yang menggunakan peralatan komputer lebih dikenal dengan istilah sistem pengolahan data elektronik(EDPS=Electronik Data Processing System)
Operasi Pengolahan Data 3
Penyimpanan Data
Masukan
Keluaran
Proses

JENIS DAN TYPE DATA

Sebelum masuk pada tahap demi tahap tutorial SPSS, pengetahuan tentang jenis-jenis data dalam statistik adalah syarat utama yang harus dikuasai -ini menurut para ahli statistik. Pengetahuan tentang jenis-jenis data sangat menentukan metode yang akan digunakan dalam pengambilan data dan tentu saja alat analisis apa yang dibutuhkan oleh data tersebut agar lebih bermakna.
Jenis-jenis data ini bertingkat menurut tingkatan pengukuran. Saya biasa menyingkatnya dengan “NOIR” atau ”RION”. Jenis data tersebut adalah:

1. Data Rasio
Data rasio adalah tingkatan data yang paling tinggi. Data rasio memiliki jarak antar nilai yang pasti dan memiliki nilai nol mutlak yang tidak dimiliki oleh jenis-jenis data lainnya. Contoh dari data rasio diantaranya: berat badan, panjang benda, jumlah satuan benda. Jika kita memiliki 10 bola maka ada perwujudan 10 bola itu, dan ketika ada seseorang memiliki 0 bola maka seseorang tersebut tidak memiliki bola satupun. Data rasio dapat digunakan dalam komputasi matematik, misalnya A memiliki 10 bola dan B memiliki 8 bola, maka A memiliki 2 bola (10-8) lebih banyak dari B.
2. Data Interval
Data interval mempunyai tingkatan lebih rendah dari data rasio. Data rasio memiliki jarak data yang pasti namun tidak memiliki nilai nol mutlak. Contoh dari data interval ialah hasil dari nilai ujian matematika. Jika A mendapat nilai 10 dan B mendapat nilai 8, maka dipastikan A mempunyai 2 nilai lebih banyak dari B. Namun tidak ada nilai nol mutlak, maksudnya bila C mendapat nilai 0, tidak berarti bahwa kemampuan C dalam pelajaran matematika adalah nol atau kosong.
3. Data Ordinal
Data ordinal pada dasarnya adalah hasil dari kuantifikasi data kualitatif. Contoh dari data ordinal yaitu penskalaan sikap individu. Penskalaan sikap individu terhadap sesuatu bisa diwujudkan dalam bermacam bentuk, diantaranya yaitu: dari sikap Sangat Setuju (5), Setuju (4), Netral (3), Tidak Setuju (2), dan Sangat Tidak Setuju (1). Pada tingkatan ordinal ini data yang ada tidak mempunyai jarak data yang pasti, misalnya: Sangat Setuju (5) dan Setuju (4) tidak diketahui pasti jarak antar nilainya karena jarak antara Sangat Setuju (5) dan Setuju (4) bukan 1 satuan (5-4).
4. Data Nominal
Data nominal adalah tingkatan data paling rendah menurut tingkat pengukurannya. Data nominal ini pada satu individu tidak mempunyai variasi sama sekali, jadi 1 individu hanya punya 1 bentuk data. Contoh data nominal diantaranya yaitu: jenis kelamin, tempat tinggal, tahun lahir dll. Setiap individu hanya akan mempunyai 1 data jenis kelamin, laki-laki atau perempuan. Data jenis kelamin ini nantinya akan diberi label dalam pengolahannya, misalnya perempuan =1, laki-laki =2.
Ada lagi jenis data yang sering disebutkan dalam statistik yaitu data Parametric dan Non-Parametric. Jika “NOIR” adalah pembagian data menurut tingkatan pengukuran, pembagian parametric dan non-parametric dipengaruhi oleh karakteristik empirik dari data tersebut. Pengetahuan tentang batasan data parametric dan non-parametric ini sangat penting karena pada proses analisis memang dibedakan untuk masing-masing jenis data tersebut.
Suatu data disebut sebagai data parametric bila memenuhi kriteria sbb (Field, 2000):
1. Normally distributed data. Data yang mempunyai distribusi normal adalah data yang dapat mewakili populasi yang diteliti. Secara kasat mata kita bisa melihat histogram dari data yang dimaksud, apakah membentuk kurva normal atau tidak. Tentu saja cara ini sangat subyektif. Cara lainnya yaitu dengan melakukan uji normalitas pada data yang dimaksud –caranya akan dijelaskan lebih lanjut.
2. Homogenity of variance. Varians dari data yang dimaksud harus stabil tidak berubah secara sistematis pada keseluruhan data. Kita bisa mengetahui homogenity of variance dengan melakukan tes tertentu. Untuk jenis-jenis analisis tertentu SPSS secara otomatis menyertakan hasil tes ini.
3. Interval data. Data yang dimaksud minimal merupakan data interval.
4. Independence. Data yang diperoleh merupakan data dari tiap individu yang independen, maksudnya respon dari 1 individu tidak mempengaruhi atau dipengaruhi respon individu lainnya.

ARRAY DAN RECORD

ARRAY

Array adalah sekelompok data sejenis yang disimpan ke dalam variabel dengan nama yang sama, dengan memberi indeks pada variabel untuk membedakan antara yang satu dengan yang lain.

VARIABEL ARRAY

nama_variabel[indeks]

ketentuan nama variabel arrray sama dengan nama variabel biasa.

indeks menunjukkan nomor dari variabel .

DEKLARASI VARIABEL ARRAY

BU : tipe nama_variabel[indeks];

Contoh : float bil[10];

deklarasi variabel array dengan nama bil yang akan menampung 10 data yang bertipe float. Indeks 10 menunjukkan variabel bil terdiri dari 10 elemen, dimana setiap elemen akan menampung sebuah data.

Indeks array dimulai dari nol(0) , sedang nomor elemen biasanya dimulai dari satu(1). Nomor elemen dapat dibuat sama dengan nomor indeks untuk mempermudah pembuatan program yaitu dengan memberi indeks satu lebih banyak dari jumlah data yang dibutuhkan, sehingga menjadi :

float bil[11]

INISIALISASI ARRAY 1 DIMENSI

Inisialisasi dapat dilakukan bersama dengan deklarasi atau tersendiri. Inisialisasi suatu array adalah dengan meletakkan elemen array di antara tanda kurung kurawal {}, antara elemen yang satu dengan lainnya dipisahkan koma.

int bil[2] = {4,1,8}

bil[0] = 4

bil[1] = 1

bil[2] = 8

AUTOMATIC ARRAY adalah Inisialisasi array dilakukan di dalam fungsi tertentu. Hanya compiler C yang berstandar ANSI C yang dapat menginisialisasikan automatic array.

Cara menginisialisasikan array dari compiler yg tidak mengikuti standar ANSI C:

1. Diinisialisasikan di luar fungsi sebagai variabel GLOBAL/EXTERNAL ARRAY.

int bil[2]={0,0,0};

main()

2. Diinisialisasikan didlm fungsi sebagai variabel LOKAL/STATIC ARRAY.

main()

{

static int bil[2]={0,0,0};

.........

Pada automatic array yang tidak diinisialisasikan , elemen array akan memiliki nilai yang tidak beraturan. Bila global & static array tidak diinisialisasi maka semua elemen array secara otomatis akan diberi nilai nol(0).

Contoh :

main()

{

int y;

int hitung=0;

int x[0];

for(y=0;y<5;y++)

{

hitung+=y;

x[y]=hitung;

printf("%3d - %3d\n",y,x[y]);

}

}

OUTPUT:

0- 0

1- 1

2- 3

3- 6

4- 10

MENDEFINISIKAN JUMLAH ELEMEN ARRAY DALAM VARIABEL

Besarnya variabel indeks dapat ditentukan dengan menggunakan

preprocessor directives #define

#define N 40

main()

{

int no[N],gaji[N],gol[N],status[N],juman[N];

Bila besari indeks akan diubah menjadi 50, cukup diganti dengan

#define N 50

ARRAY 2 DIMENSI

nama_variabel [indeks1][indeks2]

indeks1 : jumlah/nomor baris

indeks2 : jumlah/nomor kolom

Jumlah elemen yang dimiliki array 2 dimensi dapat ditentukan dari hasil perkalian indeks1 * indeks2

misal : array A[2][3] akan memiliki 2*3 = 6 elemen.

main()

{

float bil [5] [5]

.......

dapat dituliskan dengan #define

#define N 5

main()

{

float bil [N] [N]

.......

INISIALISASI ARRAY 2 DIMENSI

main()

{

float bil[2] [3] =

{ { 1,2,3}, /*baris 0*/

{ 4,5,6}, /*baris 1*/

}

elemen bil [0] [0] = 1

elemen bil [0] [1] = 2

elemen bil [0] [2] = 3

elemen bil [1] [0] = 4

elemen bil [1] [1] = 5

elemen bil [1] [2] = 6

Contoh :

main()

{

int x[3][5];

int y,z;

int hitung=0;

for(y=0;y<3;y++)

{

printf("y = %d\n",y);

for(z=0;z<5;z++)

{

hitung+=z;

x[y][z] = hitung;

printf("%/t%3d - %3d\n",z,x[y][z]);

}

}

}

OUTPUT:

y = 0

0- 0

1- 1

2- 2

3- 6

4- 10

y = 1

0- 10

1- 11

2- 13

3- 16

4- 20

y = 2

0- 20

1- 21

2- 23

3- 26

4- 30

STRING dan ARRAY

1. Pada string terdapat karakter null(\0) di akhir string

2. String sudah pasti array, array belum tentu string

CONTOH - CONTOH :

1. array dengan pengisian input melalui keyboard

baca_input()

{

float nilai[10];

for(i=0;i<10;i++)

scanf("%d",&nilai[i]);

}

2. Fungsi yang mencetak isi array dari akhir ke awal

cetak_array()

{

float nilai[10];

for(i=9;i>=0;i--)

scanf("%3f",nilai[i]);

}

3. Menghitung rata - rata isi array nilai

rata_rata()

{

float nilai[10],jum*rata;

for(i=0,jum=0;i<=9;i++)

jum+=nilai[i];

rata=jum/i;

}

4. Mencari nilai terbesar

besar()

float temp,nilai[10];

{

for(temp=nilai[0],i=1;i<=9;i++)

if(nilai[i] > temp)

temp=nilai[i];

}

return(temp)


stack

Page 1
(TUMPUKAN)
Stack adalah suatu urutan elemen yang elemennya dapat diambil dan ditambah
hanya pada posisi akhir (top) saja. Contoh dalam kehidupan sehari-hari adalah tumpukan
piring di sebuah restoran yang tumpukannya dapat ditambah pada bagian paling atas dan
jika mengambilnya pun dari bagian paling atas pula. Lihat gambar 1.
Tumpukan uang koin
Tumpukan kotak
Tumpukan Buku
Gambar 1. Macam-macam tumpukan
Ada 2 operasi paling dasar dari stack yang dapat dilakukan, yaitu :
1. Operasi push yaitu operasi menambahkan elemen pada urutan terakhir (paling atas).
2. Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dan
menghapus elemen tersebut dari stack.
Halaman - 1
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
Sebagai contoh, misalkah ada data sebagai berikut : 1 3 5 6, maka data tersebut
dapat tersimpan dalam bentuk sebagai berikut :
N
N-1
6
5
3
2
1
1
1
1
3
2
5
6
N-1
N
1
3
5
6
1
2
N-1
N
Top
Top
Top
Gambar 2. Asumsi-asumsi penyimpanan stack
Contoh lain adalah ada sekumpulan perintah stack yaitu push(5), push(7), pop,
push(3), pop. Jika dijalankan, maka yang akan terjadi adalah :
Top=0
Kosong
Top 5
Top 7
5
Top 5
Top 3
5
Top 5
Top=0
Kosong
Push(5)
Push(7)
Pop
Push(3)
Pop
Pop
Gambar 3. Proses operasi stack
Selain operasi dasar stack (push dan stack), ada lagi operasi lain yang dapat terjadi
dalam stack yaitu :
1. Proses deklarasi yaitu proses pendeklarasian stack.
2. Proses isempty yaitu proses pemeriksaan apakah stack dalam keadaan kosong.
3. Proses isfull yaitu proses pemeriksaan apakah stack telah penuh.
4. Proses inisialisasi yaitu proses pembuatan stack kosong, biasanya dengan pemberian
nilai untuk top.
Halaman - 2
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
Representasi stack dalam pemrograman, dapat dilakukan dengan 2 cara yaitu :
1. Representasi stack dengan array
2. Representasi stack dengan single linked list
Sebagai contoh representasi kedua cara tersebut dengan operasi yang dilakukan
adalah push(1), push(2), pop, push(5), push(8), pos. Untuk lebih detail, perhatikan
gambar di bawah ini :
Representasi stack dengan menggunakan array dengan maksimal data 5 adalah
?
?
?
?
?
Top=0
Maks=5
?
?
?
?
Top 1
Top=1
Maks=5
?
?
?
Top 2
1
Top=2
Maks=5
?
?
?
2
Top 1
Top=3
Maks=5
?
?
?
Top 5
1
Top=2
Maks=5
?
?
Top 8
5
1
Top=3
Maks=5
?
?
8
Top 5
1
Top=2
Maks=5
Kondisi
awal
Push(1)
Push(2)
Pop
Push(5)
Push(8)
Pop
Elemen berisi ? berarti nilai elemen tidak diketahui.
Gambar 4. Representasi stack dengan menggunakan array
Representasi stack dengan menggunakan single linked list
2
Top
1
2
Top
1
5
Top
1
5
Top
1
8
1
Top
Top
Top=NULL
5
Top
1
8
Kondisi
awal
Push(1) Push(2)
Pop
Push(5)
Push(8)
Pop
Gambar 5. Representasi stack dengan menggunakan single linked list
Halaman - 3
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
Operasi-operasi stack secara lengkap adalah sebagai berikut :
1. Pendeklarasian stack
Proses pendeklarasian stack adalah proses pembuatan struktur stack dalam memori.
Karena stack dapat direpresentasikan dalam 2 cara, maka pendeklarasian stack pun
ada 2 yaitu :
a. Pendeklarasian stack yang menggunakan array.
Suatu stack memiliki beberapa bagian yaitu
top yang menunjuk posisi data terakhir (top)
elemen yang berisi data yang ada dalam stack. Bagian ini lah yang berbentuk
array.
maks_elemen yaitu variable yang menunjuk maksimal banyaknya elemen
dalam stack.
Dalam bahasa C, pendeklarasiannya adalah :
#define maks 100
//pendeklarasian struktur stack
struct tstack{
int top;
int maks_elemen;
int elemen[maks];
};
//pendeklarasian stack
tstack stack;
b. Pendeklarasian stack yang menggunakan single linked list
Adapun stack yang menggunakan single linked list, hanya memerlukan suatu
pointer yang menunjuk ke data terakhir (perhatikan proses di halaman
sebelumnya). Setiap elemen linked list mempunyai 2 field yaitu elemen datanya
dan pointer bawah yang menunjuk posisi terakhir sebelum proses push.
Pendeklarasian dalam bahasa C adalah :
typedef struct TStack *PStack;
typedef struct TStack
{
int elemen;
PStack bawah;
};
// contoh pendeklarasian variable stack
PStack stack;//variable stack akan selalu menunjuk top.
Struktur Elemen
Linked List
int Elemen
PStack Bawah
Halaman - 4
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
2. Inisialisasi
Inisialisasi stack adalah proses pembuatan suatu stack kosong. Adapun langkah-
langkah proses tersebut berdasarkan jenis penyimpanannya adalah :
a. Inisialisasi stack yang menggunakan array.
Proses inisialisasi untuk stack yang menggunakan array adalah dengan mengisi
nilai field top dengan 0 (nol) jika elemen pertama diawali dengan nomor 1. Kalau
elemen pertama array dimulai dengan 0 (contoh bahasa C), maka top diisi dengan
nilai -1.
Implementasinya dalam bahasa C adalah :
void inisialisasi(tstack *stack)
{
stack->top=-1;//karena dalam C array dimulai dgn 0
stack->maks_elemen=maks;
}
Cara pemanggilannya adalah
inisialisasi(&stack);
b. Inisialisasi stack yang menggunakan single linked list
Proses inisialisasi untuk stack yang menggunakan single linked list adalah dengan
mengisi nilai pointer stack dengan NULL.
Implementasi dalam bahasa C adalah :
void inisialisasi(PStack *stack)
{
*stack=NULL;
}
Cara pemanggilannya adalah :
inisialisasi(&stack);
Halaman - 5
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
3. Operasi IsEmpty
Operasi ini digunakan untuk memeriksa apakah stack dalam keadaan kosong. Operasi
ini penting dilakukan dalam proses pop. Ketika suatu stack dalam keadaan kosong,
maka proses pop tidak bisa dilakukan. Adapun langkah-langkah operasi ini adalah :
a. Operasi IsEmpty pada stack yang menggunakan array.
Operasi ini dilakukan hanya dengan memeriksa field top. Jika top bernilai 0
(untuk elemen yang dimulai dengan index 1) atau top bernilai -1 (untuk elemen
yang dimulai dengan index 0), maka berarti stack dalam keadaan empty (kosong)
yang akan me-return-kan true (1) dan jika tidak berarti stack mempunyai isi dan
me-return-kan nilai false (0)
Implementasi dalam bahasa C adalah :
int isempty(tstack stack)
{
if (stack.top==-1)
return 1;
else
return 0;
}
Cara penggunaannya adalah :
//Penggunaan isempty dalam statement if
if( isempty(stack) ) ...
b. Operasi IsEmpty pada stack yang menggunakan single linked list.
Operasi IsEmpty pada stack yang menggunakan single linked list adalah dengan
memeriksa apakah pointer stack bernilai NULL. Jika stack bernilai NULL maka
menandakan stack sedang keadaan empty (kosong) dan akan me-return-kan nilai
1 dan jika tidak NULL maka menandakan stack mempunyai isi (tidak kosong)
sehingga operasi tersebut akan me-return-kan nilai false (0).
Implementasinya dalam bahasa C adalah :
int isempty(PStack stack)
{
if (stack==NULL)
return 1;
else
return 0;
}
Cara penggunaannya adalah
//Penggunaan isempty dalam statement if
if( isempty(stack) ) ...
Halaman - 6
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
4. Operasi IsFull
Operasi ini berguna untuk memeriksa keadaan stack apakah sudah penuh atau belum.
Operasi ini akan menghasilkan nilai true (1) jika stack telah penuh dan akan
menghasilkan nilai false (0) jika stack masih bisa ditambah. Langkah-langkah untuk
operasi ini adalah :
a. Operasi IsFull pada stack yang menggunakan array.
Operasi ini akan memberikan nilai true (1) jika field top sama dengan field
maks_elemen (untuk array yang elemennya dimulai dari posisi 1) atau top sama
dengan maks_elemen-1 (unauk array yang elemennya dimulai dari posisi 0).
Implementasinya dalam bahasa C adalah :
int isfull(tstack stack)
{
if (stack.top==(stack.maks_elemen-1))
return 1;
else
return 0;
}
Cara pemanggilannya adalah :
//penggunaan isfull dalam statement if
if( !isfull(stack) ) … // jika stack tidak penuh
b. Operasi IsFull pada stack yang menggunakan single linked list.
Karena dalam linked list bersifat dinamis, maka pengecekan isFull adalah dengan
memeriksa apakah memori masih dapat digunakan untuk alokasi sebuah elemen
stack. Jika alokasi dapat dilakukan, maka berarti memori masih belum penuh dan
proses push dapat dilakukan. Tetapi jika alokasi memori gagal dilakukan, maka
berarti memori penuh dan tidak bisa menambah lagi elemen stack.
Implementasi dalam bahasa C adalah :
int isfull()
{
PStack test;
test=(PStack)malloc(sizeof(TStack));
if(test==NULL)//jika alokasi gagal
return 1;
else
{
free(test);
return 0;
}
}
Halaman - 7
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
Cara pemanggilannya adalah :
//penggunaan isfull dalam statement if
if( !isfull(stack) ) … // jika stack tidak penuh
5. Operasi Push
Operasi push adalah operasi dasar dari stack. Operasi ini berguna untuk menambah
suatu elemen data baru pada stack dan disimpan pada posisi top yang akan
mengakibatkan posisi top akan berubah. Langkah operasi ini adalah :
a. Operasi push pada stack yang menggunakan array.
Langkah operasi push dalam array adalah dengan :
Periksa apakah stack penuh (isfull). Jika bernilai false/0 (tidak penuh) maka
proses push dilaksanakan dan jika pemeriksaan ini bernilai true/1 (stack
penuh), maka proses push digagalkan.
Proses push-nya sendiri adalah dengan menambah field top dengan 1,
kemudian elemen pada posisi top diisi dengan elemen data baru.
Untuk lebih jelas, perhatikan lagi gambar 4 mengenai representasi stack dengan
array..
Implementasinya dalam bahasa C adalah :
void push(tstack *stack, int baru)
{
if(!isfull(*stack))
{
stack->top++;
stack->elemen[stack->top]=baru;
}
else
{
printf("Stack Full. Push Gagal.\n");
}
}
Cara penggunaannya adalah :
push(&stack,5);// push 5 ke dalam stack
Halaman - 8
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
b. Operasi push pada stack yang menggunakan single linked list
Operasi push pada stack yang menggunakan single linked list adalah sama dengan
proses tambahawal pada operasi linked list. Langkah-langkahnya adalah :
Periksa apakah memori penuh (isfull). Jika bernilai false/0 (tidak penuh) maka
proses push dilaksanakan dan jika pemeriksaan ini bernilai true/1 (stack
penuh), maka proses push digagalkan.
Proses push-nya sendiri adalah dengan cara mengalokasikan suatu elemen
linked list (disebut variable baru), kemudian periksa jika stack dalam keadaan
kosong maka pointer yang menunjuk ke awal stack diisi dengan pointer baru,
dan jika dengan menambah field top dengan 1, kemudian elemen pada posisi
top diisi dengan elemen data baru. Tetapi jika pointer penunjuk stack sudah
menunjuk ke suatu data, maka sambungkan field pointer bawah (penunjuk ke
data sebelumnya) dari pointer baru ke pointer penunjuk posisi akhir stack (top)
dan kemudian pindahkah pointer penunjuk posisi akhir stack ke pointer baru.
Untuk lebih jelas perhatikan kembali gambar 5 di halaman 3 mengenai
representasi stack dengan linked linst.
Implementasi operasi ini dengan menggunakan bahasa C adalah :
void push(PStack *stack, int data)
{
PStack baru;
if(!isfull())
{
baru=(PStack)malloc(sizeof(TStack));
baru->bawah=NULL;
baru->elemen=data;
if(isempty(*stack))
*stack=baru;
else
{
baru->bawah=*stack;
*stack=baru;
}
}
else
{
printf("Memory Full. Push Gagal.\n");
}
}
Cara penggunaannya adalah :
push(&stack,5);// push 5 ke dalam stack
Halaman - 9
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
6. Operasi Pop
Operasi pop adalah salah satu operasi paling dasar dari stack. Operasi ini berguna
untuk mengambil elemen terakhir (top) dan kemudian menghapus elemen tersebut
sehingga posisi top akan berpindah. Operasi ini biasanya dibuat dalam bentuk
function yang me-return-kan nilai sesuai data yang ada di top.
a. Operasi pop pada stack yang menggunakan array.
Langkah operasi pop pada stack yang menggunakan array adalah terlebih dahulu
memeriksa apakah stack sedang keadaan kosong, jika tidak kosong maka data
diambil pada posisi yang ditunjuk oleh posisi top, kemudian simpan dalam
variable baru dengan nama data, kemudian posisi top – 1, kemudian nilai pada
variable data di-return-kan ke function. Untuk lebih jelas perhatikan kembali
gambar 4 di halaman 3.
Implementasi operasi ini dalam bahasa C adalah :
int pop(tstack *stack)
{
int data;
if(!isempty(*stack))
{
data=stack->elemen[stack->top];
stack->top--;
return data;
}
else
return 0;
}
Cara pemanggilannya adalah :
int data;
data=pop(&stack);
Halaman - 10
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
b. Operasi pop pada stack yang menggunakan single linked list
Langkah operasi pop pada stack yang menggunakan single linked list adalah sama
dengan proses hapusawal pada operasi single linked list. Prosesnya adalah :
Periksa apakah.stack kosong (isempty), jika kosong maka proses pop tidak
bisa dilakukan. Jika stack tidak kosong maka proses pop dijalankan.
Proses pop-nya sendiri adalah mengambil elemen yang ditunjuk oleh pointer
stack kemudian simpan dalam variable data. Kemudian buat variable pointer
bantu yang diisi dengan pointer penunjuk stack yang nantinya akan dihapus
dari memori. Kemudian pointer penunjuk stack dipindahkan ke posisi yang
ditunjuk oleh field pointer bawah dari variable bantu.
Implementasi dalam bahasa C adalah :
int pop(PStack *stack)
{
int data;
PStack bantu;
if(!isempty(*stack))
{
data=(*stack)->elemen;
bantu=*stack;
*stack=bantu->bawah;
free(bantu);
return data;
}
else
return 0;
}
Cara pemanggilannya adalah :
int data;
data=pop(&stack);
Halaman - 11
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
Contoh Implementasi Stack 1
Konversi Bilangan Desimal ke Bilangan Biner
Contoh nyata implementasi stack adalah proses pengkonversian dari bilangan
decimal (basis 10) ke bilangan biner (basis 2).
Algoritmanya adalah :
1. Ambil sisa pembagian variable bilangan dengan angka 2, kemudian simpan dalam
variable sisa. Kemudian simpan isi variable sisa ke dalam stack.
2. Bagi variable bilangan dengan angka 2.
3. Ulangi langkah 1 dan 2 selama bilangan tidak 0. Jika variable bilangan telah bernilai
0 maka lanjutkan ke langkah 4,
4. Lakukan perulangan untuk langkah 5 dan 6 selama stack masih mempunyai isi (tidak
kosong).
5. ambil (pop) nilai yang ada di stack simpan di variable data.
6. Tulis isi variable data ke layar .
7. Selesai.
Untuk lebih jelasnya perhatikan operasi konversi dari decimal ke biner dengan
variable bilangan yang akan dikonversi adalah 25.
Operasi
Representasi Array
Representasi
Single Linked List
Kondisi Awal
Operasi Stack :
inisialisasi(&stack)
?
10
?
9
?
?
?
4
?
3
?
2
?
1
Top=0 Maks_Elemen=10
Stack
Pointer Sta k = NULL
c
Halaman - 12
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
Bilangan = 25.
Pembagian : 25 / 2
Sisa = 1
Bilangan = 12
Opeasi Stack :
Push(&stack,1)
?
10
?
9
?
?
?
4
?
3
?
2
Top
1
1
Top=1 Maks_Elemen=10
Stack
1
Bilangan = 12.
Pembagian : 12 / 2
Sisa = 0
Bilangan = 6
Operasi Stack :
Push(&stack,0)
?
10
?
9
?
?
?
4
?
3
Top
0
2
1
1
Top=2 Maks_Elemen=10
0
Stack
1
Bilangan = 6
Pembagian : 6 / 2
Sisa : 0
Bilangan : 3
Opeasi Stack :
Push(&stack,0)
?
10
?
9
?
?
?
4
Top
0
3
0
2
1
1
Top=3 Maks_Elemen=10
0
Stack
1
0
Halaman - 13
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
Bilangan = 3
Pembagian : 3 / 2
Sisa : 1
Bilangan : 1
Operasi Stack :
Push(&stack,1)
?
10
?
9
?
?
Top
1
4
0
3
0
2
1
1
Top=4 Maks_Elemen=10
0
Stack
1
0
1
Bilangan = 1
Pembagian : 1 / 2
Sisa : 1
Bilangan : 0
Operasi Stack :
Push(&stack,1)
?
10
?
9
?
Top
1
1
4
0
3
0
2
1
1
Top=5 Maks_Elemen=10
0
1
0
1
Stack
1
Operasi pembagian variable bilangan dengan angka 2 berakhir di posisi ini karena nilai
variable bilangan sudah mencapai 0. Langkah selanjutnya adalah proses menampilkan
data biner dari stack, sampai stack habis.
Halaman - 14
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
Periksa :
Stack Kosong ? Tidak
Opeasi Stack :
Data=pop(&stack);
Menghasilkan Data=1
Tampilkan
variable
Data di layar
Di layar : 1
?
10
?
9
?
1
Top
1
4
0
3
0
2
1
1
Top=4 Maks_Elemen=10
0
1
0
1
Stack
1
bantu
Periksa :
Stack Kosong ? Tidak
Opeasi Stack :
Data=pop(&stack);
Menghasilkan Data=1
Tampilkan
variable
Data di layar
Di layar : 1 1
?
10
?
9
?
1
1
4
Top
0
3
0
2
1
1
Top=3 Maks_Elemen=10
0
1
0
1
Stack
bantu
Halaman - 15
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
Periksa :
Stack Kosong ? Tidak
Opeasi Stack :
Data=pop(&stack);
Menghasilkan Data=0
Tampilkan
variable
Data di layar
Di layar : 1 1 0
?
10
?
9
?
1
1
4
0
3
Top
0
2
1
1
Top=2 Maks_Elemen=10
0
1
0
Stack
bantu
Periksa :
Stack Kosong ? Tidak
Opeasi Stack :
Data=pop(&stack);
Menghasilkan Data=0
Tampilkan
variable
Data di layar
Di layar : 1 1 0 0
?
10
?
9
?
1
1
4
0
3
0
2
Top
1
1
Top=1 Maks_Elemen=10
0
1
Stack
bantu
Periksa :
Stack Kosong ? Tidak
Opeasi Stack :
Data=pop(&stack);
Menghasilkan Data=1
Tampilkan
variable
Data di layar
Di layar : 1 1 0 0 1
?
10
?
9
?
1
1
4
0
3
0
2
1
1
Top=0 Maks_Elemen=10
1
bantu
Stack
Stack = NULL
Periksa :
Stack Kosong ? Ya
Proses pop stack selesai karena stack telah kosong. Itu berarti
semua bilangan biner yang disimpan dalam stack telah
ditampilkan ke layar.
Pembuktian :
1 * 2
4
+ 1 * 2
3
+ 0 * 2
2
+ 0 * 2
1
+ 1 * 2
0
= 16 + 8 + 1 = 25.
Halaman - 16
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
Contoh Implementasi Stack 2
Notasi Polish (Polish Notation)
Dalam operasi aritmatika, dikenal 3 jenis notasi, yaitu :
1. Notasi Infix (menempatkan operator di antara 2 operand)
Contoh : A+B atau C-D atau E * F atau G / H
2. Notasi Prefix (menempatkan operator di depan / sebelum ke-2 operandnya)
Contoh : +AB atau –CD atau *EF atau /GH
3. Notasi Postfix (menempatkan operator di belakang/setelah operandnya)
Contoh : AB+ atau CD- atau EF* atau GH/
Komputer umumnya hanya mengenal ekspresi matematika yang ditulis dalam
notasi postfix. Ekspresi matematika yang ditulis dalam notasi infix agar dikenal oleh
computer harus diubah dengan memperhatikan :
1. Mengubah notasi infix menjadi postfix, kemudian menghitungnya
2. Menggunakan stack sebagai penampung sementara operator dan operandnya.
1. Mengubah Notasi Infix menjadi Notasi Postfix
Dimisalkan Q adalah ekspresi matematika yang ditulis dalam notasi infix dan P
adalah penampung ekspresi matematika dalam notasi postfix, maka algoritmanya
adalah :
a. Push tanda “(“ ke stack dan tambahkan tanda “)” di sentinel di Q.
b. Scan Q dari kiri ke kanan, kemudian ulangi langkah c s.d f untuk setiap elemen Q
sampai stack Q kosong.
c. Jika yang discan adalah operand, maka tambahkan ke P
d. Jika yang discan adalah(“ maka push ke stack
e. Jika yang discan adalah)” maka pop isi stack sampai ditemukan tanda “(“,
kemudian tambahkan ke P sedangkan tanda “(“ tidak disertakanke P.
Halaman - 17
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
f. Jika yang discan adalah operator, maka :
Jika elemen paling atas dari stack adalah operator yang mempunyai tingatan
sama atau lebih tinggi dari operator yang discan, maka pop operator tersebut
dan tambahkan ke P.
Push operator tersebut ke stack.
g. Keluar
Contoh kasus :
Q : A + ( B * C - ( D / E ^ F ) * G ) * H
Tambahkan “(” ke stack dan tambahkan tanda “)” ke sentinel Q sehingga Q menjadi
Q : A + ( B * C - ( D / E ^ F ) * G ) * H )
Dari Q, terdapat 20 simbol yaitu :
Q : A + ( B * C - ( D / E ^ F ) * G ) * H )
No 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Urutan operasinya adalah :
No Simbol
Stack
Ekspresi P
(
1
A
(
A
2
+
(+
A
3
(
(+(
A
4
B
(+(
AB
5
*
(+(*
AB
6
C
(+(*
ABC
7
-
(+(-
ABC*
8
(
(+(-(
ABC*
9
D
(+(-(
ABC*D
10
/
(+(-(/
ABC*D
11
E
(+(-(/
ABC*DE
12
^
(+(-(/^
ABC*DE
13
F
(+(-(/^
ABC*DEF
14
)
(+(-
ABC*DEF^/
15
*
(+(-*
ABC*DEF^/
16
G
(+(-*
ABC*DEF^/G
17
)
(+
ABC*DEF^/G*-
18
*
(+*
ABC*DEF^/G*-
19
H
(+*
ABC*DEF^/G*-H
20
)
ABC*DEF^/G*-H*+
Dari proses di atas didapatkan bahwa postfixnya adalah ABC*DEF^/G*-H*+
Halaman - 18
Struktur Data – Stack
Oleh : Andri Heryandi, ST.
2. Menghitung Ekspresi Matematika yang disusun dalam Notasi Postfix
Diasumsikan P adalah ekspresi matematika yang ditulis dalam notasi postfix dan
variable value sebagai penampung hasil akhir.
Algoritmanya adalah :
a. Tambahkan tanda “)” pada sentinel di P
b. Scan P dari kiri ke kanan, ulangi langkah c dan d untuk setiap elemen P sampai
ditemukan sentinel.
c. Jika yang discan adalah operand, maka push ke stack.
d. Jika yang discan adalah operator (sebut opr1), maka
Pop 1 buah elemen teratas dari stack, simpan dalam variable var1.
Pop 1 buah elemen teratas dari stack, simpan dalam variable var2.
Hitung variable (var2 opr1 var1), simpan hasil di variable hitung.
Push variable hitung ke stack.
e. Pop isi stack dan simpan di variable value.
f. Keluar.
Contoh : P : 5, 2, 6, +, *, 12, 4, /, -
Tambahkan tanda “)”pada sentinel P sehingga
P : 5, 2, 6, +, *, 12, 4, /, -, )
Dari P, didapatkan 10 simbol yaitu :
P : 5 2 6 + * 12 4 / - )
No 1 2 3 4 5 6 7 8 9 10
Urutan operasinya adalah :
No Simbol
Stack
Operasi Perhitungan
1
5
5
2
2
5, 2
3
6
5, 2, 6
4
+
5, 8
var1=6,var2=2,hitung=2 + 6 =8
5
*
40
var1=8,var2=5,hitung=5 * 8 =40
6 12 40, 12
7
4
40, 12, 4
8
/
40, 3
var1=4,var2=12,hitung=12 / 4 = 3
9
-
37
Var1=3,var2=40,hitung=40 – 3 = 37
10
)
Perulangan selesai karena telah mencapai sentinel dan
data dalam stack