📜  Mode pengalamatan dimana memiliki array lokasi yang linier = 下推列表 = last-in-first-out-queue, yaitu ... (1)

📅  最后修改于: 2023-12-03 15:02:58.902000             🧑  作者: Mango

Mode Pengalamatan Menggunakan Array Lokasi Linier (LIFO)

Dalam mode pengalamatan dimana memiliki array lokasi yang linier (LIFO), kita menggunakan struktur data yang dikenal sebagai '下推列表' (stack). Stack adalah tipe data abstrak yang mengimplementasikan struktur data yang terdiri dari daftar elemen, dimana operasi push dan pop memperbolehkan penambahan dan penghapusan elemen dari atas stack.

Stack sangat berguna dalam implementasi mode pengalamatan dimana memiliki array lokasi yang linier, karena ketika kita membuat fungsi yang memanggil fungsi lain, kita dapat memanfaatkan stack untuk menyimpan nilai yang masih diperlukan oleh fungsi utama, sehingga saat fungsi tersebut telah selesai dijalankan, nilai yang disimpan pada stack bisa diambil lagi.

Berikut adalah contoh sederhana penggunaan stack dalam mode pengalamatan dimana memiliki array lokasi yang linier dengan bahasa pemrograman Python:

class Stack:
  def __init__(self):
    self.items = []

  def push(self, item):
    self.items.append(item)

  def pop(self):
    return self.items.pop()

  def is_empty(self):
    return bool(self.items)

def main():
  stack = Stack()
  stack.push("Apa")
  stack.push("kabar")
  stack.push("kalian")
  print(stack.pop()) # kalian
  print(stack.pop()) # kabar
  print(stack.pop()) # Apa

if __name__ == '__main__':
  main()

Pada contoh di atas, kita membuat sebuah class Stack yang terdiri dari tiga method yaitu __init__ (constructor), push (menambah data ke dalam stack), pop (mengambil data paling terakhir dari stack), dan is_empty (mengecek apakah stack kosong atau tidak). Kemudian kita menginisialisasi sebuah objek stack dari class Stack dan menambahkan beberapa data ke dalam stack dengan menggunakan method push. Setelah itu, kita mengambil data secara berurutan menggunakan method pop.

Dalam penggunaan stack dalam mode pengalamatan dimana memiliki array lokasi yang linier, kita juga dapat menggunakan stack untuk mengecek kesamaan antara tanda kurung yang dibuka dan ditutup. Misalkan kita ingin mengecek apakah suatu ekspresi matematika memiliki penulisan kurung yang benar, kita dapat menggunakan stack untuk menyimpan tanda kurung yang dibuka dan mengeluarkannya ketika menemukan tanda kurung yang ditutup. Berikut adalah contoh penggunaan stack untuk mengecek kesamaan tanda kurung:

def is_balanced(parentheses):
  stack = Stack()
  for ch in parentheses:
    if ch == '(':
      stack.push(ch)
    elif ch == ')':
      if stack.is_empty():
        return False
      stack.pop()
  return stack.is_empty()

print(is_balanced('((()))'))    # True
print(is_balanced('(()()())'))  # True
print(is_balanced('(())()'))    # True
print(is_balanced('()()()'))    # True
print(is_balanced('(()))'))     # False
print(is_balanced(')('))        # False

Pada contoh di atas, kita membuat sebuah fungsi is_balanced yang menerima parameter parentheses berupa string yang terdiri dari tanda kurung. Kemudian kita menginisialisasi sebuah objek stack dari class Stack dan melakukan loop untuk setiap karakter pada parentheses. Jika karakter adalah (, kita akan menambahkannya ke dalam stack menggunakan method push, jika karakter adalah ), kita akan mengeluarkan karakter terakhir dari stack menggunakan method pop, jika stack kosong atau karakter tidak sesuai, maka fungsi akan langsung mengembalikan nilai False. Jika sampai akhir loop stack masih berisi data, maka fungsi akan mengembalikan nilai False, jika stack kosong, maka fungsi akan mengembalikan nilai True.