Berita Dari Hendra

Memberikan Ilmu Yang Bermanfaat

Stack dalam Bahasa C

Stack adalah suatu daftar atau urutan elemen yang elemennya dapat diambil dan ditambah hanya hanya melalui satu jalur saja, yaitu bagian depan list. Contoh dalam kehidupan sehari-hari adalah tumpukan buku di perpustakaan yang tumpukannya dapat ditambah pada bagian paling atas dan mengambilnya dari bagian paling atas pula.
Ada 2 operasi paling dasar yang penting dari stack yang dapat dilakukan, yaitu :
a. Operasi push yaitu operasi menambahkan elemen data pada urutan terakhir (paling atas).
b. Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dari stack.
Tumpukan disebut juga “Push Down Back” yaitu penambahan elemen baru (push) dan penghapusan elemen dari tumpukan (pop) Untuk mengimplementasikan stack, bisa menggunakan linked list atau juga array, tergantung pada permasalahan yang dihadapi. Apabila permasalahan yang dihadapi adalah permasalahan tumpukan (stack) dimana jumlah elemen maksimum dibatasi, maka bisa digunakan array. Apabila jumlah elemen maksimumnya tidak dibatasi, maka linked list lebih tepat digunakan. Salah satu konsep yang efektif untuk menyimpan dan mengambil data adalah “terakhir masuk sebagai yang pertama keluar” (Last in First
Out/LIFO). Dengan konsep ini, pengambilan data akan berkebalikan urutannya dengan penyimpanan data.

oke, ga usah kebanyakan teori, kita langsung ke contoh source code:

stack.h
————————————-begin—————————
#define stack_H
#define stack_H

#include
#include
#include
#include
#include

#define nil NULL
#define info(P) (P)->info
#define next(P) (P)->next
#define firstStack(S) ((S).firstStack)
#define lastStack(S) ((S).lastStack)

typedef int infotype;
typedef struct tElmtStack *address;
typedef struct tElmtStack{
infotype info;
address next;
}ElmtStack;
typedef struct{
address firstStack;
address lastStack;
}Stack;

bool stackEmpty(Stack S);
void createStack(Stack *S);
void bacaStack(infotype *x);
void tulisStack(Stack S);
address Alokasi(infotype x);
void Dealokasi(address P);
void Push(Stack *S,infotype x);
void Pop(Stack *S);

bool stackEmpty(Stack S){
return ((firstStack(S)==nil)&&(lastStack(S)==nil));
}

void createStack(Stack *S){
firstStack(*S)=nil;
lastStack(*S)=nil;
}

void bacaStack(infotype *x){
printf(“\nMasukkan data: “);scanf(“%d”,&(*x));
}

void tulisStack(Stack S){
address P;
P=firstStack(S);
printf(“Data Stack:\n”);
while(P!=nil)
{
printf(“%d\n”,info(P));
P=next(P);
}
}

address Alokasi(infotype x){
address P;
P=(address)malloc(sizeof(ElmtStack));
if(P!=nil)
{
info(P)=x;
next(P)=nil;
}
return P;
}

void Dealokasi(address P){
free(P);
}

void Push(Stack *S,infotype x)
{
address P;
P=Alokasi(x);
if(P!=nil)
{
if(stackEmpty(*S))
{
lastStack(*S)=P;
}
next(P)=firstStack(*S);
firstStack(*S)=P;
}
}

void Pop(Stack *S)
{
address P;
P=firstStack(*S);
if(!stackEmpty(*S))
{
if(P==lastStack(*S))
{
Dealokasi(P);
firstStack(*S)=nil;
lastStack(*S)=nil;
}
else
{
firstStack(*S)=next(P);
Dealokasi(P);
}
}
}

Contoh:

teststack.cpp
——————————-begin—————————–
#include
#include”stack.h”

main(){
Stack S;
infotype x;
createStack(&S);

bacaStack(&x);
Push(&S, x);
cout<<”Push\n”<
tulisStack(S);

bacaStack(&x);
Push(&S, x);
cout<<”Push\n”<
tulisStack(S);

bacaStack(&x);
Push(&S, x);
cout<<”Push\n”<
tulisStack(S);

Pop(&S);
cout<<” Pop\n”<
tulisStack(S);

Pop(&S);
cout<<” Pop\n”<
tulisStack(S);

}
———————————-end————————-

Tinggalkan komentar »

Array Dalam Bahasa C

Array adalah kumpulan dari nilai-nilai data bertipe sama dalam urutan tertentu yang menggunakan sebuah nama yang sama.

Nilai-nilai data di suatu larik disebut dengan elemen-elemen larik.

Letak urutan dari suatu elemen larik ditunjukkan oleh suatu subscript atau suatu index.

Menurut dimensinya, array dapat dibedakan menjadi :

1. Array berdimensi satu

o Setiap elemen array dapat diakses melalui index

o Index array secara default dimulai dari 0

o Deklarasi array :

Tipe_array nama_array[ukuran]

2. Array berdimensi dua

– Array dua dimensi merupakan array yang terdiri dari m buah baris dan n buah buah kolom. Bentuknya dapat berupa matriks atau tabel.

– Deklarasi array :

Tipe_array nama_array [baris][kolom]

3. Array multidimensi

– Array multidimensi merupakan array yang mempunyai ukuran lebih dari dua. Bentuk pendeklarasian array multidimensi sama saja dengan deklarasi array dimensi satu maupun dimensi dua.

– Deklarasi array :

Tipe_array nama_array [ukuran 1][ukuran 2] . . . [ukuran N]

Perbedaan array dengan tipe data lain :

Array dapat mempunyai sejumlah nilai, sedangkan tipe data lain hanya dihubungkan dengan sebuah nilai saja.

Array dapat digunakan untuk menyimpan beberapa nilai tipe data lain data (char, int, float, double, long, dll) yang sama dengan satu nama saja.

Selain itu, array dapat berupa satu dimensi atau lebih, sedangkan tipe data lain hanya berupa satu dimensi.

Array juga dapat digunakan sebagai parameter. Jenisnya :
a. Array dimensi satu sebagai parameter :

– Pengiriman parameter berupa array dimensi satu merupakan pengiriman secara acuan/referensi, karena yang dikirimkan adalah alamat dari elemen pertama arraynya, bukan seluruh nilai-nilai elemenya. Alamat elemen pertama dari array dapat ditunjukkan oleh nama lariknya yang tidak ditulis dengan indeknya.

Contoh:

#include

#include

int length(char x[]);

int main()

{

char string[256];

printf(“Ketikkan sembarang kalimat : “);

gets(string);

Lstring=length(string);

getch();

return(0);

}

int length(char x[])

{

int i, cek, L=0;

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

{

if (x[i]!=”)

L+=1;

else break;

}

return(L);

}

b. Array dua dimensi sebagai parameter :

– Pengiriman parameter berupa array dua dimensi hampir sama dengan pengiriman parameter array satu dimensi, hanya saja perbedaannya adalah dalam array dua dimensi harus menyebutkan baris dan kolom array dimensi dua tersebut, mendeklarasikan MAX_ROWS dan MAX_COLS yang digunakan untuk pengiriman parameter array dua dimensi dan pada saat pengiriman parameter formal array dua dimensi, kita harus menyebutkan banyaknya dimensi array untuk kolom, sehingga ukuran kolom dapat diketahui, hal ini berkaitan dengan pemesanan variabel array di memori.

Contoh:

#include

#include

void isi_matriks(int m[10][10],int b,int k);

int main()

{

int m1[10][10];

printf(“Masukkan baris dan kolom Matriks I : “);

scanf(“%d x %d”,&b1,&k1);

printf(“Masukkan baris dan kolom Matriks II : “);

scanf(“%d x %d”,&b2,&k2);

printf(“Masukkan isi Matriks I : \n”);

isi_matriks(m1,b1,k1);

getch();

return(0);

}

void isi_matriks(int m[10][10],int b,int k)

{

int i,j;

for (i=1;i<=b;i++)

{

for(j=1;j<=k;j++)

scanf(“%d”,&m[i][j]);

}

printf(“Matriks I : \n”);

for (i=1;i<=b;i++)

{

for(j=1;j<=k;j++)

printf(“%8d”,m[i][j]);

printf(“\n”);

}

}

Tinggalkan komentar »