Eko Dwi Apriyanto 0 Report post Posted March 29, 2007 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. Quote Share this post Link to post Share on other sites
evo10 0 Report post Posted March 29, 2007 Sebelum anda membuat aturcaranya adakah anda fahamkan soalannya?Apakah yg anda faham tentang fungsi-fungsi "Stack" seperti: pop dan push? Quote Share this post Link to post Share on other sites
CFoo++ 4 Report post Posted March 29, 2007 (edited) Lebih kurang ginitypedef 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;elsereturn false;}boolean IsFull(Stact S){if(S.Top >= 5)return true;elsereturn 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 March 29, 2007 by CFoo++ Quote Share this post Link to post Share on other sites
Eko Dwi Apriyanto 0 Report post Posted March 29, 2007 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 Quote Share this post Link to post Share on other sites
evo10 0 Report post Posted March 29, 2007 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 b4Aturcaranya 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. Quote Share this post Link to post Share on other sites
CFoo++ 4 Report post Posted April 1, 2007 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 pointerboolean IsEmpty(Stact S){if(S.Top < 0) return true;elsereturn 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;elsereturn 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 - 5void 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. Quote Share this post Link to post Share on other sites