Langkah seterusnya ialah bahagian pertama struktur data, tindanan.
Timbunan ialah koleksi tersusun yang mengikut prinsip masuk dahulu keluar terakhir (LIFO, nama penuh: Last In First Out). Bahagian atas timbunan sentiasa merupakan elemen terbaharu.
Sebagai contoh: timbunan adalah seperti timbunan buku yang diletakkan di dalam kotak Jika anda ingin mengambil buku bahagian bawah, anda mesti mengeluarkan buku atas terlebih dahulu. (Sudah tentu, anda tidak boleh mengambil buku di bawah dahulu)
Anda juga boleh memahaminya dengan melihat rajah.
Pelaksanaan tindanan dalam JavaScipt
Pertama, buat pembina.
/** * 栈的构造函数 */ function Stack() { // 用数组来模拟栈 var item = []; }
Timbunan perlu mempunyai kaedah berikut:
Pelaksanaan kaedah tolak
Penjelasan: Elemen baharu perlu ditambahkan pada tindanan, dan kedudukan elemen berada di hujung baris gilir. Dalam erti kata lain, kita boleh menggunakan kaedah tolak tatasusunan untuk mensimulasikan pelaksanaan.
Pelaksanaan:
/** * 将元素送入栈,放置于数组的最后一位 * @param {Any} element 接受的元素,不限制类型 */ this.push = function(element) { items.push(element); };
Pelaksanaan kaedah pop
Penjelasan: Elemen teratas tindanan perlu dimunculkan dan mengembalikan nilai yang muncul pada masa yang sama. Anda boleh menggunakan kaedah pop tatasusunan untuk mensimulasikan pelaksanaan.
Pelaksanaan:
/** * 弹出栈顶元素 * @return {Any} 返回被弹出的值 */ this.pop = function() { return items.pop(); };
Pelaksanaan kaedah peek
Nota: Melihat elemen atas timbunan boleh dicapai dengan menggunakan panjang tatasusunan.
Pelaksanaan:
/** * 查看栈顶元素 * @return {Any} 返回栈顶元素 */ this.peek = function() { return items[items.length - 1]; }
Pelaksanaan kaedah lain
Nota: Tiga yang pertama adalah teras kaedah tindanan, dan kaedah yang selebihnya disenaraikan di sini sekaligus. Kerana baris gilir yang akan dibincangkan di bawah akan sangat bertindih dengan bahagian ini.
Pelaksanaan:
/** * 确定栈是否为空 * @return {Boolean} 若栈为空则返回true,不为空则返回false */ this.isAmpty = function() { return items.length === 0 }; /** * 清空栈中所有内容 */ this.clear = function() { items = []; }; /** * 返回栈的长度 * @return {Number} 栈的长度 */ this.size = function() { return items.length; }; /** * 以字符串显示栈中所有内容 */ this.print = function() { console.log(items.toString()); };
Aplikasi Praktikal
Terdapat banyak aplikasi praktikal tindanan Terdapat fungsi dalam buku yang menukar perpuluhan kepada binari. (Jika anda tidak tahu cara mengira binari, anda boleh menggunakan Baidu.) Berikut ialah kod sumber fungsi tersebut.
Prinsipnya ialah memasukkan nombor yang hendak ditukar, terus bahagi dua dan bulatkan. Dan akhirnya gunakan gelung sementara untuk menggabungkan semua nombor dalam tindanan menjadi rentetan untuk output.
/** * 将10进制数字转为2进制数字 * @param {Number} decNumber 要转换的10进制数字 * @return {Number} 转换后的2进制数字 */ function divideBy2(decNumber) { var remStack = new Stack(), rem, binaryString = ''; while (decNumber > 0) { rem = Math.floor(decNumber % 2); remStack.push(rem); decNumber = Math.floor(decNumber / 2); } while (!remStack.isAmpty()) { binaryString += remStack.pop().toString(); } return binaryString; };
Pada ketika ini, kajian tindanan telah berakhir. Saya harap ia akan membantu semua orang untuk mempelajari cara melaksanakan tindanan dalam JavaScript.