زبان جاوا خودش پیاده سازی کلاس Stack را از قبل دارد و آن را به سادگی در اختیار برنامه نویسان قرار می دهد. در این مطلب طور خلاصه شما را با این کلاس و نحوه استفاده از آن آشنا می کنیم.
Stack یا پشته چیست؟
- Stack یک نوع داده انتزاعی (ADT) بسیار مفید در برنامه نویسی است که برای نگهداری مجموعه ای از مقادیر استفاده می شود.
- ترتیب ورود و خروج مقادیر به این ساختار داده (نوع داده) انتزاعی، به صورت LIFO (آخرین ورودی-اولین خروجی یا Last-in-First-Out) است. به این معنی که همواره آخرین مقدار وارد شده به stack در هنگام تلاش برای خارج کردن یک مقدار، اولین (بالاترین) مقداری است که خارج می شود.
- عمده عملیات ها روی ساختمان داده انتزاعی stack ، در انتهای لیست آن انجام می شود که اصطلاحاً بالای stack است.
نمودار زیر را که ببینید، می توانید به خوبی متوجه شوید که stack یا پشته چگونه طراحی شده است.
![stack یا پشته چیست](http://open-mind.ir/wp-content/uploads/2019/08/%D9%BE%D8%B4%D8%AA%D9%87-%DA%86%DB%8C%D8%B3%D8%AA.png)
stack یا پشته
اعمال روی کلاس Stack (پشته) در جاوا
push : یک مقدار جدید را در بالای پشته قرار می دهد (با درجه زمانی (O(1).
pop : آخرین مقدار وارد شده (در بالای پشته) را حذف و مقدار آن را بر می گرداند (با درجه زمانی (O(1).
peek : مقدار آخرین عنصر وارد شده (در بالای پشته) را بر می گرداند اما آن را حذف نمی کند (با درجه زمانی (O(1).
isEmpty : بر اساس خالی بودن یا نبودن پشته، به ترتیب مقدار true یا false را خروجی می دهد (با درجه زمانی (O(1).
getSize : اندازه پشته را با درجه زمانی (O(1 بر می گرداند (تعداد عناصر وارد شده و برداشته نشده در ساختمان داده انتزاعی پشته).
و اما نمونه کد زیر شما را با نحوه نوشتاری استفاده از این کلاس ساختمان داده انتزاعی در زبان جاوا آشنا می کند:
import java.util.Stack; public class StackClassJava { public void push(Stack<Integer> stack, int j){ System.out.println("Inserting " + j + " into Stack."); stack.push(j); } public Integer pop(Stack<Integer> stack){ if(stack.empty()==false){ System.out.println("Popping Element from stack"); return stack.pop(); }else { System.out.println("Stack is empty"); return null; } } public Integer peek(Stack<Integer> stack){ if(stack.empty()==false){ System.out.println("peeking Element from stack"); return stack.peek(); }else { System.out.println("Stack is empty"); return null; } } public Integer getSize(Stack<Integer> stack){ System.out.println("Stack Size: " + stack.size()); return stack.size(); } public Boolean isEmpty(Stack<Integer> stack){ return stack.isEmpty(); } public void search(Stack<Integer> stack, int element){ System.out.println("Searching element " + element + " in Stack"); int index = stack.search(element); if(index==-1){ System.out.println(element + " not found in Stack"); }else{ System.out.println(element + " found in Stack at position: " + index); } } public void displayStack(Stack<Integer> stack){ System.out.println(stack); } public static void main(String[] args) { Stack<Integer> stack = new Stack<>(); StackClassJava scj = new StackClassJava(); //push operation scj.push(stack, 1); scj.push(stack, 2); scj.push(stack, 3); //pop operation System.out.println("Popped Element: " + scj.pop(stack)); System.out.println("Popped Element: " + scj.pop(stack)); scj.displayStack(stack); scj.push(stack,6); System.out.println("Peeking Element: " + scj.peek(stack)); scj.displayStack(stack); //check if stack is empty System.out.println("Is Stack Empty: " + scj.isEmpty(stack)); System.out.println("Stack Size: " + scj.getSize(stack)); //search element in stack scj.search(stack, 5); scj.search(stack, 1); } }
خروجی:
Inserting 1 into Stack. Inserting 2 into Stack. Inserting 3 into Stack. Popping Element from stack Popped Element: 3 Popping Element from stack Popped Element: 2 [1] Inserting 6 into Stack. peeking Element from stack Peeking Element: 6 [1, 6] Is Stack Empty: false Stack Size: 2 Stack Size: 2 Searching element 5 in Stack 5 not found in Stack Searching element 1 in Stack 1 found in Stack at position: 2