Apakah Struktur Data Stack di Python?



Artikel ini akan memberi anda pengetahuan terperinci dan komprehensif mengenai Stack Data Struktur di Python dengan banyak contoh.

Struktur Data adalah kumpulan nilai data, hubungan di antara mereka, dan fungsi atau operasi yang dapat diterapkan pada data. Kini terdapat banyak Struktur Data yang ada. Tetapi hari ini tumpuan kita adalah pada Stack Data Structures. Saya akan membincangkan topik berikut:

Mengapa Struktur Data?

Untuk menjawabnya, anda harus berfikir secara besar-besaran. Fikirkan bagaimana peta Google menunjukkan jalan terbaik hanya dalam beberapa saat, bagaimana ia mengembalikan hasil carian anda dalam satu saat. Ia tidak hanya berkaitan dengan 100 laman web, ia berurusan dengan lebih dari satu bilion laman web dan masih menunjukkan hasil anda dengan begitu cepat.





Walaupun algoritma yang digunakan memainkan peranan penting, struktur data atau wadah yang digunakan adalah asas algoritma itu. Dalam aplikasi apa pun, mengatur dan menyimpan data dengan cara atau struktur yang paling sesuai dengan penggunaannya adalah kunci untuk akses dan pemprosesan data yang cekap.

Jenis Struktur Data

Terdapat beberapa struktur data standard yang dapat digunakan untuk bekerja dengan berkesan dengan data. Kita bahkan boleh menyesuaikannya atau membuat yang baru sepenuhnya sesuai dengan aplikasi kita.



Jenis Struktur Data

Apakah Struktur Data Stack?

Pertimbangkan beberapa contoh kehidupan sebenar:

  • Penghantaran dalam kargo
  • Pinggan di atas dulang
  • Tumpukan duit syiling
  • Tumpukan laci
  • Mengejar kereta api di halaman keretapi

plates-stacks-data-structure



Semua contoh ini mengikuti a Terakhir-Dalam-Pertama-Keluar strategi. Pertimbangkan pinggan di atas dulang, Apabila anda ingin memilih pinggan, anda terpaksa memilih pinggan dari atas sedangkan semasa pinggan disimpan di atas dulang, mereka mesti berada dalam urutan terbalik. Contoh di atas yang mengikuti Last-In-First-Out (LIFO) prinsip dikenali sebagai Timbunan .

Selain daripada operasi pelengkap, saya mungkin mengatakan bahawa Operasi utama yang mungkin ada di timbunan adalah:

  1. Tolak atau masukkan elemen ke bahagian atas timbunan
  2. Muncul atau keluarkan elemen dari bahagian atas timbunan

Membuat Struktur Data Stack

kelas Stack: def __init __ (self, max_size): self .__ max_size = max_size self .__ elemen = [Tiada] * diri .__ max_size diri .__ atas = -1
  • saiz maksimum adalah bilangan maksimum elemen yang diharapkan dalam timbunan.
  • Unsur-unsur timbunan disimpan dalam senarai ular sawa.
  • Atas menunjukkan indeks teratas timbunan yang pada awalnya diambil -1 untuk menandakan timbunan kosong.

Status awal Stack dapat dilihat pada Gambar di mana max_size = 5

Tolak Elemen ke dalam Tumpukan

Sekarang, jika anda mahu memasukkan atau menolak elemen ke timbunan, anda harus ingat itu

  • Bahagian atas akan menunjukkan indeks ke mana elemen akan dimasukkan.
  • Dan tidak ada elemen yang akan dimasukkan ketika timbunan penuh iaitu ketika max_size = atas.

Jadi apa yang harus menjadi algoritma ??

# mengembalikan ukuran maksimum stack def get_max_size (self): return self .__ max_size # mengembalikan nilai bool sama ada stack penuh atau tidak, Benar jika penuh dan Salah sebaliknya def is_full (self): return self.get_max_size () - 1 == self .__ top #pushes element di bahagian atas stack def push (self, data): if (self.is_full ()): print ('stack sudah penuh') yang lain: self .__ top = self .__ top + int (1 ) elemen .__ diri [diri .__ atas] = data #Anda boleh menggunakan __str __ () di bawah untuk mencetak elemen objek DS semasa menyahpepijat def __str __ (diri): msg = [] index = self .__ atas sementara (index> = 0): msg.append ((str) (self .__ element [index])) index- = 1 msg = '' .join (msg) msg ​​= 'Stack data (Atas ke Bawah):' + msg return msg

Sekarang, Apabila anda melaksanakan perkara berikut:

cara mencegah kebuntuan di java

tumpukan1 = Tumpukan (4)

#Tolak semua elemen yang diperlukan.

stack1. push ('A')

stack1. push ('B')

stack1. push ('C')

stack1. push ('E')

cetak (stack1.is_full ())

mencetak (tumpukan1)

Pengeluaran:

timbunan sudah penuh
Betul
Data timbunan (Atas ke Bawah): D C B A

pengurusan perolehan dalam pengurusan projek

Pop Elemen dari Stack

Sekarang, kerana anda memasukkan elemen ke dalam timbunan, anda ingin memasukkannya, jadi anda perlu menjaga perkara berikut:

  • Tumpukan tidak kosong iaitu bahagian atas! = -1
  • Apabila anda memadamkan data, bahagian atas mesti menunjuk ke bahagian atas timbunan sebelumnya.

Jadi, apa yang akan menjadi algoritma ??

#returns nilai bool sama ada timbunan kosong atau tidak, Benar jika kosong dan Salah sebaliknya def is_empty (self): return self .__ top == - 1 #returns popped value def pop (self): if (self.is_empty ()): cetak ('tiada apa-apa untuk muncul, sudah kosong') yang lain: a = diri .__ elemen [diri .__ atas] diri .__ atas = diri .__ teratas-1 mengembalikan #menunjukkan semua elemen timbunan dari paparan def atas (bawah): untuk i in range (self .__ top, -1, -1): print (self .__ element [i], end = '') print ()

Sekarang, dengan mempertimbangkan timbunan yang dibuat sebelumnya, cuba masukkan elemen

cetak (stack1.pop ())

cetak (stack1.pop ())

mencetak (tumpukan1)

cetak (stack1.pop ())

cetak (stack1.pop ())

cetak (stack1.pop ())

Pengeluaran:

D

C

Data timbunan (Atas ke Bawah): B A

B

KE

tiada apa-apa untuk muncul, sudah kosong

Aplikasi Struktur Data Stack

  • Contoh 1:

Stack digunakan untuk melaksanakan algoritma pemadanan kurungan untuk penilaian ekspresi aritmetik dan juga dalam pelaksanaan panggilan kaedah.

Jawapan yang 5.

  • Contoh 2:

Papan keratan di Windows menggunakan dua timbunan untuk melaksanakan operasi undo-redo (ctrl + z, ctrl + y). Anda pasti bekerja pada penyunting kata Windows seperti MS-Word, Notepad, dll. Berikut adalah teks yang ditulis dalam MS-Word. Perhatikan bagaimana teks berubah pada klik Ctrl-Z dan Ctrl-Y.

Berikut adalah kod yang mensimulasikan operasi undo-redo. Periksa kod dan perhatikan bagaimana timbunan digunakan dalam pelaksanaan ini.

#creating class stack class Stack: def __init __ (self, max_size): self .__ max_size = max_size self .__ element = [None] * self .__ max_size self .__ top = -1 def is_full (self): if (self .__ top == self .__ max_size-1): return True return False def is_empty (self): if (self .__ top == - 1): return True return False def push (diri, data): if (self.is_full ()): cetak ('Stack is full !!') other: self .__ top + = 1 self .__ element [self .__ top] = data def pop (self): if (self.is_empty ()): print ('Stack kosong! ! ') else: data = self .__ elemen [self .__ top] self .__ top- = 1 return data def display (self): if (self.is_empty ()): print (' Stack is blank ') other: index = self .__ top while (index> = 0): print (self .__ element [index]) index- = 1 def get_max_size (self): return self .__ max_size #Anda boleh menggunakan __str __ () di bawah untuk mencetak elemen Objek DS semasa debug def __str __ (self): msg = [] index = self .__ top while (index> = 0): msg.append ((str) (self .__ element [index])) index- = 1 msg = ' '.join (msg) msg ​​=' Stack data (Atas ke Bawah): '+ msg return ms g #fungsi untuk melaksanakan operasi remove atau backspace def remove (): global clipboard, undo_stack data = clipboard [len (clipboard) -1] clipboard.remove (data) undo_stack.push (data) print ('Remove:', clipboard) #fungsi untuk melaksanakan operasi batalkan def undo (): papan keratan global, undo_stack, redo_stack if (undo_stack.is_empty ()): print ('Tidak ada data untuk membuat asal') yang lain: data = undo_stack.pop () clipboard.append ( data) redo_stack.push (data) print ('Undo:', clipboard) #fungsi untuk melaksanakan operasi ulang def redo (): papan keratan global, undo_stack, redo_stack if (redo_stack.is_empty ()): print ('Tidak ada data untuk membuat semula ') else: data = redo_stack.pop () if (data tidak ada di papan keratan): cetak (' Tidak ada data untuk diulang ') redo_stack.push (data) lain: clipboard.remove (data) undo_stack.push ( data) cetak ('Redo:', clipboard) clipboard = ['A', 'B', 'C', 'D', 'E', 'F'] undo_stack = Stack (len (clipboard)) redo_stack = Stack (len (papan keratan)) keluarkan () buat asal () buat semula ()

Pengeluaran:

Alih keluar: [‘A’, ‘B’, ‘C’, ‘D’, ‘E’]

apa itu logger di java

Buat asal: [‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’]

Buat semula: [‘A’, ‘B’, ‘C’, ‘D’, ‘E’]

Dengan ini, kita akan mengakhiri artikel Stack Data Structure in Python ini. Sekiranya anda berjaya memahami dan menjalankan kod anda sendiri, anda bukan lagi pemula kepada Stacks Data Structure.

Ada soalan untuk kami? Sila sebutkan di bahagian komen artikel ini dan kami akan menghubungi anda secepat mungkin.

Untuk mendapatkan pengetahuan mendalam tentang Python bersama dengan pelbagai aplikasinya, anda boleh mendaftar secara langsung dengan sokongan 24/7 dan akses seumur hidup.