Jump to content
Sign in to follow this  
Eko Dwi Apriyanto

Stack

Recommended Posts

typedef int TipeElemen;

typedef struct { int top;

TipeElemen isi[6];

} Stack;

typedef enum { false, true } boolean;

int TOP(Stack S)

......

boolean IsEmpty(Stact S)

.....

boolean IsFull(Stact S)

....

void CreateStack(Stack *S)

.....

void Push(Stack *S, TipeElemen E)

.........

void Pop(Stack *S, TipeElemen *E)

...........

TipeElemen InfoTop(Stack S)

.........

Int main()

int x,y;

stack S;

CreateStack(&S);

Push(&S,7);

x=InfoTop(S);

Pop(&S,&y);

return 0;

}

GImana sih nyelesaian soal diatas ? gwe kok malah tambah gak mudeng.

Thank's.

Share this post


Link to post
Share on other sites

Lebih kurang gini

typedef int TipeElemen;

typedef struct { int top;

TipeElemen isi[6];

} Stack;

typedef enum { false, true } boolean;

int TOP(Stack S)

{

return S.top;

}

boolean IsEmpty(Stact S)

{

if(S.Top < 0)

return true;

else

return false;

}

boolean IsFull(Stact S)

{

if(S.Top >= 5)

return true;

else

return false;

}

void CreateStack(Stack *S)

{

S->top = -1; // Initialized

}

void Push(Stack *S, TipeElemen E)

{

if(S->top < 5)

{

S->top++;

isi[s.top] = E;

}

}

void Pop(Stack *S, TipeElemen *E)

{

if(S->top > 0)

{

S->top--;

isi[s.top] = *E;

}

}

TipeElemen InfoTop(Stack S)

{

if(S.top >= 0 && S.top < 6)

{

return isi[s.top];

}

return -1; // -1 ni kira error code la tuu..

}

Ok.. Siap...

Edited by CFoo++

Share this post


Link to post
Share on other sites

Sebelum anda membuat aturcaranya adakah anda fahamkan soalannya?

Apakah yg anda faham tentang fungsi-fungsi "Stack" seperti: pop dan push?

Setau saya sih stack itu suatu Tumpukan. Jdi kita musti masukin 1 demi 1. Gitu tapi untuk programnya gwe belum ngerti. Tolong donk dijelasin.

Thank's b4

Share this post


Link to post
Share on other sites

Setau saya sih stack itu suatu Tumpukan. Jdi kita musti masukin 1 demi 1. Gitu tapi untuk programnya gwe belum ngerti. Tolong donk dijelasin.

Thank's b4

Aturcaranya sudah pun ditunjukkan oleh CFoo++.

Apa yg saya ingin tahu samada anda faham konsep STACK ini.

Stack adalah "container" yg menggunakan konsep LIFO - Last In First Out utk manage datanya.

Data dimasukkan kedalam stack menggunakan operasi "Push"...menolak data kedalam stack.

Data dibaca menggunakan operasi "Pop"...mengeluarkan data yg terakhir sekali di "push" kedalam stack.

Stack yg anda guna disini menggunakan fixed array untuk menyimpan data-nya...sesuai sebagai pengenalan utk belajar.

Tetapi ianya tidak practical utk "real world" kerana - size nya tetap.

Share this post


Link to post
Share on other sites

Stack adalah satu kaedah untuk menyimpan data ke memori tanpa menggunakan alamat. Ianya merupakan satu segment memori bersaiz tetapi di mana kandungannya dirujuk melalui satu pointer (tidak digunakan secara langsung). Data dimasukkan ke stack menggunakan arahan PUSH dan diambli kembali menggunakan arahan POP. Data yang terakhir dimasukkan (push) adalah merupakan data yang pertama akan diambil (pop). Konsep ini dipanggil LIFO (Last In First Out).

Stack yang digunakan di dalam aturcara yang diberikan adalah satu simulasi dan bukan stack sebenar. Stack sebenar hanya boleh diakses menggunakan arahan assembly PUSH dan POP di mana lokasi memori yang akan dirujuk dikawal oleh satu register khas di dalam CPU yang dikenali sebagai Stack Pointer (merujuk kepada CPU intel). Kegunaan utama stack sebenar adalah untuk menyimpan state CPU (accumulator, register A, B ,C, D ... dan sebagainya) menggunakan araha PUSH apabila memanggil fungsi dan mengembalikan state asal menggunakan arahan POP apabila fungsi selesai. Stack sebenar memang digunakan tetapi secara terlindung apabila kita menggunakan bahasa pengetucaraan high level. Apabila jumlah data yang dipush melebihi jumlah saiz memori yang disediakan CPU akan menjana mesej "Stack overflow".

Penjelasan dalam konteks program:

typedef int TipeElemen;

typedef struct { int top;

TipeElemen isi[6];

} Stack;

typedef enum { false, true } boolean;

TipeElemen isi[6]; - ini adalah ruang memori yang disediakan untuk memuatkan 6 nombor integer.

int TOP(Stack S)

{

return S.top;

}

Ini adalah fungsi untuk mendapatkan kedudukan pointer

boolean IsEmpty(Stact S)

{

if(S.Top < 0)

return true;

else

return false;

}

Ini adalah fungsi untuk menguji samaada terdapat data atau tidak di dalam stack. Jika pointer (S.Top) kurang dari 0, maknanya tidak ada data.

boolean IsFull(Stact S)

{

if(S.Top >= 5)

return true;

else

return false;

}

Ini adalah fungsi untuk menguji samaada stack telah penuh atau belum. Jika pinter (S.Top) >= 5 bermakna stack telah penuh. Ini adalah kerana ruang yang disediakan hanya 6 iaitu 0 - 5

void CreateStack(Stack *S)

{

S->top = -1; // Initialized

}

Ini adalah fungsi pemula bagi memastikan nilai pointer adalah betul. Pointer disetkan ke -1 pada permulaan, bermakna stack adalah kosong. Jika tidak di set, nilai pointer permulaan biasanya 0 (dalam mod debug) tetapi sebenarnya nilai ini adalah merupakan nombor rawak (tak dapat ditentukan).

void Push(Stack *S, TipeElemen E)

{

if(S->top < 5)

{

S->top++;

isi[s.top] = E;

}

}

Ini adalah fungsi untuk memasukkan nombor (data) ke stack. Pointer akan ditambah ke posisi seterusnya.

void Pop(Stack *S, TipeElemen *E)

{

if(S->top > 0)

{

S->top--;

isi[s.top] = *E;

}

}

Ini adalah fungsi untuk mendapatkan data dari stack. Data yang akan diperolehi adalah data pada posisi pointer semasa di mana ianya merupakan data terakhir yang dimasukkan. Nilai pointer akan dikurangkan apabila data di pop keluar.

TipeElemen InfoTop(Stack S)

{

if(S.top >= 0 && S.top < 6)

{

return isi[s.top];

}

return -1; // -1 ni kira error code la tuu..

}

Ini adalah fungsi untuk mendapatkan nilai terakhir dimasukkan (nilai pada pointer semasa) tanpa mengubah kedudukan pointer.

OK.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...