کلاس Java Stack کلاس Vector را گسترش می دهد. به شما امکان می دهد عناصر جدیدی ایجاد کنید، یک عنصر را در پشته مشاهده کنید، یک عنصر را در پشته به روز کنید و همه عناصر را از پشته حذف کنید. پشته ها داده ها را به ترتیب اول به آخر (FILO) پردازش می کنند. این بدان معنی است که شما فقط می توانید موارد را از بالای یک پشته اضافه یا حذف کنید.
کلاس Java Stack کلاس Vector را گسترش می دهد. به شما امکان می دهد عناصر جدیدی ایجاد کنید، یک عنصر را در پشته مشاهده کنید، یک عنصر را در پشته به روز کنید و همه عناصر را از پشته حذف کنید. پشته ها داده ها را به ترتیب اول به آخر (FILO) پردازش می کنند. این بدان معنی است که شما فقط می توانید موارد را از بالای یک پشته اضافه یا حذف کنید.
ساختار داده پشته دارای پنج روش اصلی است. با این حال، کلاس Java Stack به بیش از 40 متد دیگر نیز دسترسی دارد که از کلاس Vector به ارث برده است.
ایجاد پشته در جاوا
کلاس Stack یک سازنده دارد که به شما امکان می دهد یک پشته خالی ایجاد کنید. هر پشته یک آرگومان نوع دارد که نوع داده ای را که ذخیره خواهد کرد را دیکته می کند.
import java.util.Stack;
public class Main {
public static void main(String[] args) {
// create a stack
Stack<String> Customers = new Stack<String>();
}
}
کد بالا یک ساختار داده Stack به نام Customers ایجاد می کند که مقادیر String را ذخیره می کند.
پر کردن یک پشته
یکی از پنج متد اصلی کلاس Stack متد push() است. یک آیتم را می گیرد که نوع داده ای مشابه با پشته دارد و آن آیتم را به بالای پشته می برد.
// populate a stack
Customers.push("Jane Doe");
Customers.push("John Doe");
Customers.push("Patrick Williams");
Customers.push("Paul Smith");
Customers.push("Erick Rowe");
Customers.push("Ella Jones");
Customers.push("Jessica Brown");
کد بالا پشته مشتریان را با هفت مورد پر می کند. هر آیتم جدید را به بالای پشته هل می دهد. بنابراین، آیتم در بالای پشته مشتریان جسیکا براون است. و شما می توانید این را با استفاده از متد Stack peek() تایید کنید. متد peek() هیچ آرگومان نمی گیرد. شیء را در بالای پشته بدون حذف آن برمی گرداند.
// view object at the top of a stack
System.out.println(Customers.peek());
کد بالا خروجی زیر را به کنسول برمی گرداند:
Jessica Brown
موارد موجود در یک پشته را مشاهده کنید
ساختار داده پشته در نحوه تعامل با داده های آن کاملاً محدود است. شما باید عمدتاً از یک Stack از طریق بالاترین آیتم آن استفاده کنید. با این حال، شما همچنین می توانید از متدهای به ارث رسیده از کلاس Vector برای دسترسی به عناصر دلخواه استفاده کنید. چنین روش هایی عبارتند از elementAt و removeElementAt.
ساده ترین راه برای دریافت نمای کلی از محتویات Stack، چاپ آن است. یک شی Stack را به System.out.println ارسال کنید و متد Stack’s toString () یک خلاصه خوب ایجاد می کند:
// view all elements of a stack
System.out.println(Customers);
کد بالا خروجی زیر را در کنسول چاپ می کند:
[Jane Doe, John Doe, Patrick Williams, Paul Smith, Erick Rowe, Ella Jones, Jessica Brown]
جستجو برای موقعیت آیتم در پشته
اگر آیتمی را در پشته می شناسید، می توانید موقعیت شاخص یا موقعیت آن را نسبت به بالای پشته شناسایی کنید. متد indexOf() یک آیتم را در Stack می گیرد و موقعیت شاخص آن را برمی گرداند. توجه داشته باشید که یک پشته شروع به نمایه سازی آیتم های خود از صفر می کند.
// find an item index position
System.out.println(Customers.indexOf("Jane Doe"));
کد بالا خروجی زیر را در کنسول چاپ می کند:
0
متد search() یکی از متدهای اولیه کلاس Stack است. موقعیت آیتم را نسبت به بالای پشته برمی گرداند، جایی که آیتم در بالای پشته موقعیت شماره یک را دارد.
System.out.println(Customers.search("Jane Doe"));
کد بالا خروجی زیر را در کنسول چاپ می کند:
7
اگر به متدهای search() یا indexOf() آیتمی بدهید که در Stack نیست، یک عدد منفی برمیگردانند.
System.out.println(Customers.search("Elsa Doe"));
System.out.println(Customers.indexOf("Elsa Doe"));
کد بالا خروجی زیر را در کنسول چاپ می کند:
-1
-1
به روز رسانی موارد در یک پشته
شما فقط می توانید یک آیتم را در بالای یک پشته دستکاری کنید. بنابراین، اگر میخواهید عنصری را بهروزرسانی کنید که در بالای Stack نیست، باید همه موارد بالای آن را بهروزرسانی کنید. متد pop() یکی از متدهای اولیه Stack است. متد pop() هیچ آرگومان نمی گیرد. آیتم بالای پشته را حذف می کند و آن را برمی گرداند.
// update an object
Customers.pop();
Customers.pop();
Customers.push("Ella James");
Customers.push("Jessica Brown");
System.out.println(Customers);
کد بالا خروجی زیر را در کنسول چاپ می کند:
[Jane Doe, John Doe, Patrick Williams, Paul Smith, Erick Rowe, Ella James, Jessica Brown]
همانطور که از خروجی می بینید، کد نام خانوادگی Ella را به جیمز به روز می کند. این شامل فرآیندی است که آیتمها را از پشته بیرون میآورد تا زمانی که به شی مورد نظر برسید. سپس شی مورد نظر را نمایش می دهد. آن را به روز می کند؛ و آن را همراه با آیتم هایی که در بالای آیتم مورد نظر قرار داشتند، به پشته هل می دهد. هر بار که می خواهید یک مورد را در پشته خود به روز کنید، باید از برنامه ای استفاده کنید که عملیاتی مانند مورد بالا را انجام دهد.
حذف یک آیتم از پشته
برای حذف یک آیتم از ساختار داده Stack، می توانید دوباره از متد ()pop استفاده کنید. اگر موردی که میخواهید حذف کنید در بالا نیست، میتوانید آیتمها را در بالا قرار دهید تا زمانی که به مورد دلخواه برسید.
حذف تمام آیتم های یک پشته
برای حذف تمام عناصر از یک پشته، میتوانید از یک حلقه Java while با متد pop() برای حذف عناصر یکی یکی استفاده کنید. با این حال، یک رویکرد کارآمدتر، استفاده از روش ()clear است. متد clear() روشی است که کلاس Stack از کلاس Vector به ارث می برد. هیچ آرگومان نمیگیرد، چیزی برمیگرداند، اما به سادگی تمام عناصر موجود در ساختار داده Stack را حذف میکند.
// delete all items in a stack
Customers.clear();
System.out.println(Customers.empty());
کد بالا تمام موارد موجود در پشته مشتریان را حذف می کند. سپس از متد ()() برای بررسی خالی بودن پشته استفاده می کند. () خالی یکی دیگر از روش های اصلی کلاس جاوا استک است. هیچ آرگومان نمی گیرد و یک مقدار بولی برمی گرداند. اگر پشته خالی و در غیر این صورت false باشد، این متد true را برمی گرداند.
کد بالا خروجی زیر را در کنسول چاپ می کند:
true
کاربردهای عملی برای ساختار داده پشته
ساختار داده Stack بسیار محدود است. به اندازه سایر ساختارهای داده انعطاف پذیری زیادی در پردازش داده ها ارائه نمی دهد. این سوال پیش می آید: چه زمانی باید از ساختار داده Stack استفاده کنید؟
ساختار داده Stack برای برنامه هایی که نیاز به پردازش داده ها به ترتیب معکوس دارند مناسب است. این موارد عبارتند از:
- برنامهای که بررسی میکند آیا کلمهای پالیندروم است یا خیر.
- برنامه ای که اعداد اعشاری را به اعداد باینری تبدیل می کند.
- برنامههایی که به کاربران اجازه میدهند تا واگرد کنند.
- بازی هایی که به کاربر اجازه می دهد به حرکات قبلی بازگردد، مانند بازی شطرنج.