Stack

Stack زیر کلاس Vector است و ساختمان داده ای با همین نام را پیاده سازی می کند، در حقیقت Stack یک صف LIFO محسوب می شود، به ساختمان داده Stack پشته نیز گفته می شود. عبارت LIFO مخفف Last In First Out می باشد و صف LIFO صفی است که عضوی که آخر وارد می شود اول خارج می شود.Stack کاربرد های زیادی در برنامه نویسی دارد که از جمله آن ها می توان به موارد زیر اشاره کرد :

  • تبدیل infix به postfix
  • تبدیل الگوریتم های بازگشتی به غیر بازگشتی
  • فرم غیر بازگشتی جست و جوی اول عمق (Depth First Search)
  • بعضی از الگوریتم های زمان بندی

یکی از موارد روزمره ای که با آن رو به رو می شویم حافظه مرورگر ها در مورد url هاست ، هنگامی که دکمه بازگشت را می زنیم همیشه به آخرین مورد قبلی باز می گردیم.کلاس Stack از طریق مسیر java.util.Stack قابل دستیابی است.برای ساخت یک شی جدید از کلاس Stack باید از سازنده زیر استفاده کنیم :

Stack()

متد های مهم Stack در جدول زیر آمده اند ولی مهم ترین آن ها peek ،push و pop هستند.

متد کاربرد
add(Object o) یک عنصر به انتهای مجموعه اضافه می کند.
add(int index,Object o) یک عنصر در اندیس مورد نظر درج می کند.
addAll(Collection c) اعضای یک کالکشن دیگر را به انتهای مجموعه اضافه می کند.
AddElement(Object o) یک عنصر به انتهای مجموعه اضافه می کند.
capacity() ظرفیت مجموعه را بر می گرداند.
clear() کل مجموعه را پاک می کند.
contains(Object o) وجود یا عدم وجود یک عنصر را بررسی می کند.
elementAt(int index) عنصر موجود در اندیس index را بر می گرداند.
elements() یک Enumeration از اعضای مجموعه بر می گرداند.
boolean empty() خالی بودن یا نبودن مجموعه را بررسی می کند.
firstElement() اولین عنصر مجموعه را بر می گرداند.
get(int index) عنصر موجود در اندیس مورد نظر را بر می گرداند.
int indexOf(Object o) اندیس یک عنصر را پیدا می کند.
boolean isEmpty() خالی بودن مجموعه را بررسی می کند.
iterator() یک Iterator برای پیمایش مجموعه بر می گرداند.
Object lastElement() آخرین عضو مجموعه را بر می گرداند.
peek() عنصر بالای پشته (آخرین عنصر) را بر می گرداند ولی آن را از پشته حذف نمی کند.
pop() عنصر بالای پشته را بر گردانده و آن را از پشته حذف می کند.
Object push(Object o) عنصر جدید را به بالای پشته اضافه می کند.
remove(int index) عنصر موجود در اندیس index را حذف می کند.
search(Object o) اندیس یک شی را بر می گرداند (در این حالت شروع اندیس از 1 تعبیر می شود)
Object set(int index,Object o) عنصر موجود در اندیس index را به شی o تغییر می دهد.
toArray() کل مجموعه را به صورت آرایه بر می گرداند.

به مثال زیر توجه کنید :

import java.util.Stack;

public class StackDemo 
{
    public static void main(String[] args) 
    {
        Stack stack = new Stack();

        stack.push("URL_1");
        stack.push("URL_2");
        stack.push("URL_3");
        stack.push("URL_4");

        while (!stack.empty()) {
            System.out.println(stack.pop());
        }
    }
}
URL_4
URL_3
URL_2
URL_1

مثال بالا عملکرد یک مرورگر را به صورت خیلی ساده شبیه سازی می کند ، ابتدا URL_1 و سپس URL_2 و … را مشاهده می کنیم. عمل مشاهده را با عمل push شبیه سازی می کنیم. سپس عمل فشردن دکمه بازگشت را شبیه سازی می کنیم ، هر بار که دکمه بازگشت زده می شود مرورگر باید آخرین صفحه مشاهده شده قبلی را نمایش دهد ، به عنوان مثال هنگامی که در حال مشاهده URL_4 هستیم اگر کاربر دکمه بازگشت را فشار دهد مرورگر باید URL_3 را نمایش دهد ، اگر کاربر در حال مشاهده URL_3 باشد با زدن دکمه بازگشت مروگر باید URL_2 را نمایش دهد.این عمل تا زمانی قابل انجام است که آدرسی برای نمایش وجود داشته باشد ، به عبارتی پشته خالی نباشد (empty نباشد)در کد بالا هر بار که متد ()pop فراخوانی می شود عنصر بالای پشته حذف می شود. البته پیاده سازی عملکرد دکمه بازگشت در مرورگر کمی پیچیده تر است و مثال بالا یک نمونه بسیار بسیار ساده از این عمل می باشد.