KodeGym/Blog Jawa/Acak/Tumpukan Jawa
John Squirrels
tingkat
San Francisco

Tumpukan Jawa

Diterbitake ing grup
Tumpukan ing Jawa biasane tegese kelas saka Framework Koleksi sing ngleksanakake antarmuka List. Kerjane ing asas saka struktur data Stack, kang digunakake kanggo ngatur siji saka jinis memori. Uga bisa dadi bagéan saka memori supaya data, Ing artikel iki kita bakal mbayar manungsa waé pisanan kabeh kanggo kelas Stack , nimbang cara lan menehi conto. Nanging kita uga bakal ngomong babagan struktur data kaya Stack lan apa sing digunakake.

Apa Stack Data Structure

Kaping pisanan, ayo goleki kanthi cepet babagan struktur data tumpukan. Iku struktur data linier sing adhedhasar prinsip Last-in-First-out (LIFO). Iku jenis anti antrian. Mbayangno dek saka kertu utawa tumpukan buku ing kothak. Buku sing sampeyan lebokake ing tumpukan luwih dhisik ana ing sisih ngisor, lan sing pertama sing bakal dijupuk saka kothak yaiku buku sing ana ing ndhuwur - yaiku, sing pungkasan mlebu ing kothak. Punika gambar gif kanggo nduduhake prinsip iki. Tumpukan Jawa - 1Apa sing kedadeyan ing kene? We duwe flask kang mung siji werni bisa mencet ing wektu. Pisanan ing flask iku werni oranye, banjur ungu, lan pungkasanipun ijo (Nyuwun pangapunten kanggo sing ngerti jeneng sing luwih akurat saka werna iki). Nanging, kanggo ngekstrak bal oranye saka tumpukan flask kita, kita kudu ngekstrak bal sing ana ing pungkasan (sing ijo), banjur sing dadi penultimate (nanging nalika ekstraksi iku sing pungkasan. siji). Struktur data tumpukan ing Jawa utawa ing papan liya ing pemrograman nduweni rong operasi sing paling penting, push lan pop . Operasi push nglebokake unsur menyang tumpukan lan operasi pop mbusak unsur saka ndhuwur tumpukan.

Apa struktur data Stack kanggo?

Salah sawijining panggunaan tumpukan sing paling penting yaiku ngatur panggilan subrutin. Titik telpon ing tumpukan nyimpen alamat bali saka subrutin sawise mungkasi (lan bisa uga paramèter liwati). Kanthi saben subrutin nested (kalebu rekursif), alamat bali anyar ditambahake menyang tumpukan. Kanthi saben operasi bali saka subroutine (bali), alamat bali dibusak saka tumpukan lan kontrol ditransfer menyang. Aplikasi iki penting banget kanggo program sing ing paling prosesor tumpukan bali dipun ginakaken ing hardware ing pesawat instruction. Nanging, ing kasus liyane, tumpukan kudu dimodelake ing struktur data sing luwih umum.

Kerangka Koleksi Kelas Tumpukan Jawa

Ing Java Stack Class minangka kelas saka kerangka Koleksi sing ngleksanakake antarmuka List lan ngluwihi kelas Vektor. Uga ngetrapake antarmuka Koleksi, Iterable, Cloneable, Serializable. Sing mbokmenawa wis guessed kelas iki makili LIFO tumpukan obyek. Punika telpon kanggo konstruktor kelas Stack , yaiku, nggawe obyek saka kelas iki.
Stack<E> stack = new Stack<E>();
Ngendi E minangka jinis Obyek.

Metode Tumpukan Jawa

Kelas iki mung nduweni siji konstruktor standar lan kabeh metode kelas Vektor . Kajaba iku, Stack duwe 5 cara dhewe:
  • boolean kosong () cara mriksa yen tumpukan kosong utawa ora. Ngasilake bener yen tumpukan kosong, salah yen ora.

  • Ndeleng obyek () cara ngasilake unsur sing ana ing ndhuwur tumpukan.

  • Obyek pop () cara ngasilake unsur sing ana ing ndhuwur tumpukan lan mbusak.

  • Obyek push (Obyek unsur) cara nambah unsur kasebut ing ndhuwur tumpukan.

  • int search (elemen obyek) cara nggoleki tumpukan kanggo unsur sing ditemtokake. Yen unsur sing dibutuhake ditemokake, "jarak" saka ndhuwur (nomer seri) bali. Yen unsur ora ketemu, -1 bali.

Tuladha kode tumpukan

Ayo nggawe conto program sing bisa digunakake kayata gambar gif ing ndhuwur. Kita bakal nyelehake telung "bal", oranye, ungu lan ijo, ing tumpukan. Ayo padha mriksa tumpukan kanggo kekosongan. Banjur, kita bakal extract bal saka tumpukan nganti tumpukan kosong.
import java.util.Stack;

public class myStackTest2 {

       public static void main(String[] args)
       {

           Stack myStack= new Stack<>();

           System.out.println("Is my stack empty? " + myStack.empty());
// pushing elements into stack
           myStack.push("Orange Ball");
           myStack.push("Violet Ball");
           myStack.push("Green Ball");

//prints elements of the stack
           System.out.println("Elements in Stack: " + myStack);
           System.out.println("Is my stack empty? " + myStack.empty());
           while (!myStack.isEmpty()) {
               myStack.pop();
               System.out.println("Elements in Stack: " + myStack);
               System.out.println("Is my stack empty? " + myStack.empty());
           }
       }
   }
Mangkene output saka program iki:
Apa tumpukanku kosong? bener Unsur ing Stack: [Orange Ball, Violet Ball, Green Ball] Apa tumpukan sandi kosong? unsur palsu ing Stack: [Orange Ball, Violet Ball] Apa tumpukan sandi kosong? unsur palsu ing Stack: [Orange Ball] Apa tumpukan sandi kosong? Unsur palsu ing Stack: [] Apa tumpukanku kosong? bener
Wiwit Stack dipun warisaken saka Vector Class lan ngleksanakake antarmuka List , Stack , saliyane push klasik lan operasi pop kanggo struktur data iki kanggo nambah lan menyuling unsur, uga wis standar kanggo struktur dhaftar nambah () lan mbusak () operasi. Ing conto kita, nambah unsur bisa dileksanakake ing cara sing padha nggunakake add () cara. Nanging sampeyan bisa extract nggunakake mbusak () mung karo unsur kasebut, kang ndadekake ora pangertèn kanggo struktur data tumpukan.
import java.util.Stack;

public class myStackTest2 {

       public static void main(String[] args)
       {

           Stack myStack= new Stack<>();

           System.out.println("Is my stack empty? " + myStack.empty());
// pushing elements into stack
           myStack.add("Orange Ball");
           myStack.add("Violet Ball");
           myStack.add("Green Ball");

//prints elements of the stack
           System.out.println("Elements in Stack: " + myStack);
           System.out.println("Is my stack empty? " + myStack.empty());
           while (!myStack.isEmpty()) {
               myStack.pop();
               System.out.println("Elements in Stack: " + myStack);
               System.out.println("Is my stack empty? " + myStack.empty());
           }
       }
   }
Asil saka karya program, mesthi, bakal persis padha.

Apa babagan implementasi Stack sampeyan dhewe?

Sampeyan bisa nggawe struktur data tumpukan dhewe ing Jawa nggunakake array utawa kelas dhaptar sing disambung. Ing kasus sing sepisanan, macem-macem sel terus-terusan diparengake kanggo nyimpen nilai ing memori, sing digunakake yen perlu. Ing kaloro, kanggo saben unsur tumpukan, pemblokiran memori dhawuh, cukup kanggo nyimpen nilai lan referensi kanggo unsur sadurunge lan sabanjuré saka tumpukan. Implementasi basis array luwih prasaja, luwih efisien, lan luwih efisien memori, nanging mbutuhake kawruh sadurunge babagan watesan ukuran tumpukan lan bisa nyebabake kewan omo sing angel ditemokake. Implementasi adhedhasar dhaptar luwih mantep nanging kurang efisien. Ayo nggawe implementasine basis array prasaja saka tumpukan. Iku bakal kalebu fungsi.
  • push - cara sing bakal njamin tambahan unsur (ing posisi paling dhuwur)

  • pop - cara sing bakal mbusak unsur (saka posisi ndhuwur)

  • readTop - cara sing bakal ngasilake nilai unsur sing ana ing posisi ndhuwur

  • sEmpty - cara sing bakal mriksa tumpukan kanggo kekosongan

  • isFull - cara sing bakal mriksa yen array sing disimpen ing tumpukan ora kebak

import java.util.Arrays;

public class MyStack {

   private int maxSize;
   private String[] stackArray;
   private int top;

   public MyStack(int size) {
       this.maxSize = size;
       stackArray = new String[maxSize];
       top = -1;
   }

   public String push (String element) {
       return stackArray[++top] = element;

   }

   public String pop (String element) {

       if (isEmpty())
       {
           System.out.println("Underflow\nProgram Terminated");
           System.exit(-1);
       }

       System.out.println("Removing " + readTop());

       return stackArray[top--];

   }

   public String readTop() {
       return stackArray[top];

   }

   public boolean isEmpty() {
       return (top ==  -1);
   }

   public boolean isFull() {
       return (top == maxSize - 1);
   }

   public void printStack(){
       System.out.println(Arrays.toString(stackArray));
   }
}
Saiki ayo ngetrapake conto kanthi telung bal adhedhasar tumpukan kita:
public class myStackTest {
   public static void main(String[] args) {
       MyStack  myStack = new MyStack(3);
       System.out.println("Is my stack empty? " + myStack.isEmpty());

       myStack.push("Orange Ball");
       myStack.push("Violet Ball");
       myStack.push("Green Ball");

      myStack.printStack();

       System.out.println("Is my stack empty? " + myStack.isEmpty());
       while (!myStack.isEmpty()) {
           myStack.pop(myStack.readTop());
           System.out.println("Is my stack empty? " + myStack.isEmpty());
       }
   }

}
Output ing kene:
Apa tumpukanku kosong? bener [Orange Ball, Violet Ball, Green Ball] Apa tumpukan sandi kosong? palsu Njabut Green Ball Apa tumpukan sandi kosong? palsu Njabut Violet Ball Apa tumpukan sandi kosong? palsu Njabut Orange Ball Apa tumpukan sandi kosong? bener
Yen katon rapet, variabel ndhuwur bener ngemot indeks saka unsur pungkasan, lan referensi kanggo obyek tetep ing Uploaded. Dadi implementasine iki mbutuhake sawetara perbaikan. Mikir babagan cara paling gampang kanggo nindakake iki.

Apa kita kudu nggunakake Java Stack?

Nyatane, Java Stack , kaya wong tuwa Vektor , minangka kelas warisan. Nanging, kelas ArrayList biasane digunakake. ArrayList ora disinkronake nalika Vektor disinkronake. Tegese karo Vector mung siji utas sekaligus bisa ngakses kode kasebut, dene ArrayList bisa nggarap pirang-pirang utas. Uga, ArrayList luwih efisien lan luwih cepet. Dadi, sampeyan bakal bisa ndeleng kelas iki mung ing kode warisan. Nanging struktur data Stack digunakake ing program asring banget.
Komentar
  • Popular
  • Anyar
  • lawas
Sampeyan kudu mlebu kanggo ninggalake komentar
Kaca iki durung duwe komentar