Showing posts with label C#. Show all posts
Showing posts with label C#. Show all posts

Thursday, August 20, 2015

Menggantikan Recursive Call dengan Stack

Salah satu hal yang paling sering di-identikkan dengan recursive dalam dunia pemrograman adalah bagaimana membaca struktur dari directory. Secara umum struktur dari directory adalah pertama kita melakukan iterasi terhadap root directory. Dalam  root directory terebut kita kemudian membagi jenis item di dalamnya, apakah masuk ke dalam file atau directory. Jika masuk ke dalam kategori file, maka langsung set sebagai item pada Treeview. Jika masuk kategori folder, panggil kembali method-nya untuk melakukan  iterasi yang sama.

Masalahnya adalah teknik ini akan mengakibatkan akumulasi pemanggilan terhadap method pada memory stack. Dan akibatnya terjadi StackOverflow. Untuk mengatasinya kita menggunakan teknik lain yakni dengan menggunakan struktur data Stack. Dengan Stack ini pertama-tama kita iterasi semua folder pada root directory, masukkan ke dalam Stack. Item yang terakhir dimasukkan kemudian dikeluarkan dari stack (di-pop) untuk diperiksa isinya. Jika terdapat folder di dalamnya, maka masukkan folder tersebut ke dalam stack. Jika file yang ditemukan, langsung isi elemen dari TreeView dengan file tersebut.

Misalnya elemen stack tersebut adalah folder dengan urutan A|B|C|D. Jika kita sudah mem-pop folder A. Maka kita akan menggantikan posisinya dalam stack dengan sub-folder dari A dengan mem-push sub folder tersebut ke dalam stack. Sehingga urutan stack berubah  menjadi A3|A2|A1|B|C|D. Kemudian kita mem-pop A1 dan diperoleh sub-folder di dalamnya. Kita mem-push sub folder tersebut ke dalam stack dan struktur stack berubah menjadi A33|A32|A31|A2|A1|B|C|D. Karena A3 hanya terisi file, maka tinggal kita pop untuk dimasukkan sebagai item di Treeview,  demikian juga A32. Jadi Struktur stack berubah menjadi A31|A2|A1|B|C|D. Kita masuk pada A31, dan ternyata isinya ada sub folder lain, dan lantas kita push pada stack dan stack berubah menjadi A312|A311|A2|A1|B|C|D. Hal ini dilakukan seterusnya sehingga isi dari stack menjadi kosong dan semua folder dan sub folder beserta item di dalamnya masuk ke dalam Treeview.