پشته در جاوا یک ساختار داده است، بسیار شبیه به یک صف، آرایه، لیست پیوندی، یا درخت. تفاوت آن با بقیه این است که پشته جاوا بر اساس اصل Last In, First Out (LIFO) است. منظور این است که وقتی از دو دستور برای اضافه کردن و حذف یک عنصر از پشته استفاده میکنید، اولین موردی که حذف میکنید آخرین موردی است که اضافه کردهاید. بیایید نگاهی دقیق تر به کلاس پشته جاوا بیندازیم
کاوش در کلاس پشته جاوا
کلاس جاوا Stack یک فرمت از کلاس Vector است که خود کلاس List را گسترش می دهد . از آنجایی که بردارها قابل تغییر هستند و می توانند با توجه به نیازهای عناصر داخل رشد و کوچک شوند، Stack s نیز می تواند در صورت نیاز اندازه را تغییر دهد. پسوند کلاس Vector پنج عملیات را اضافه می کند که یک Vector را به یک Stack تبدیل می کند . این پنج عملیات عبارتند از:- .push (مورد E) - یک عنصر را در بالای پشته قرار می دهد
- .pop() - عنصر بالای پشته را حذف می کند و آن را به عنوان مقدار تابع برمی گرداند.
- .peek() – به عنصر بالای پشته بدون حذف آن نگاه می کند
- .empty() – تابع بولی برای آزمایش خالی بودن یا نبودن پشته. 0 یا 1 را برمی گرداند.
- .search (Object o) - به دنبال o می گردد و موقعیت آن را برمی گرداند. مقدار مبتنی بر 1 است، نه بر اساس 0

کدنویسی یک مثال پشته جاوا
اکنون که توابع پشته را می دانیم ، بیایید یک مثال پشته جاوا را کدنویسی کنیم. پشته ها برای مدیریت داده هایی که باید به طور موقت ذخیره شوند و به سرعت بازیابی شوند بسیار مفید هستند. از آنجا که پشته LIFO است، برای پیمایش گره هنگام کاوش ساختار داده درختی بسیار مفید است. قبل از اینکه وارد همه این موارد شویم، بیایید یک پشته اساسی ایجاد کنیم. کد پیاده سازی یک پشته به شرح زیر است:import java.util.*;
class Main {
public static void main(String[] args) {
Stack<Integer> stackExample = new Stack<Integer>();
این تنها کاری است که برای ایجاد یک پشته خالی باید انجام دهید . شما همچنین می توانید آن را به سادگی و بدون اعلام نوع داده با استفاده از:
Stack example = new Stack();
به یاد داشته باشید که چون پشته ها قابل تغییر هستند، با فشار دادن عناصر به پشته، اندازه آن به طور خودکار تنظیم می شود. حال بیایید نحوه استفاده از توابع Stack را بررسی کنیم .
پیاده سازی پشته جاوا
بیایید نحوه استفاده از پنج روشی را که قبلا به طور خلاصه بررسی کردیم، بررسی کنیم. اجرای پشته جاوا اگر به عنوان پشته ای از صفحات فکر کنید به راحتی قابل یادآوری است. بشقاب ها را روی پشته می گذارید، اما برای به دست آوردن یک بشقاب، به پایین نمی روید، یکی از بالا را می گیرید. آخرین موردی که می پوشید اولین چیزی است که در می آورید. با گسترش مثال قبلی خود با stackExample ، توابع به شرح زیر است:فشار دادن
// pushing integers onto the Stack
stackExample.push(5);
stackExample.push(10);
در این مرحله، دیگر توابع را طوری نشان میدهیم که گویی هر بار این دو عدد صحیح را روی نمونه پشته جاوا فشار دادهایم.
ترکیدن
//popping integers off of the Stack
System.out.println(stackExample.pop());
System.out.println(stackExample.pop());
خروجی:
10
5
خالی است
حال، فرض کنید که میخواهید همه عناصر را از یک پشته حذف کنید ، اما مطمئن نیستید که چند عنصر وجود دارد. میتوانید تابع Boolean.isEmpty() را با یک پیششرط while ترکیب کنید تا همه عناصر را از Stack خارج کنید . به نحوه اجرای این پشته جاوا نگاه کنید.while(!stackExample.isEmpty()) {
System.out.println(stackExample.pop());
}
خروجی
10
5
زیرچشمی نگاه کردن
میتوانیم از .peek() بهعنوان اجرای پشته در جاوا استفاده کنیم تا بدون حذف کردن آن، نگاهی به آیتم بعدی در پشته بیندازیم .System.out.println(stackExample.peek());
خروجی
10
اگر پشته را پاپ کرده و چاپ کنیم ، عدد 10 و 5 را برمیگرداند زیرا عدد 10 هنوز روی پشته است. ما فقط به آن نگاه کردیم، آن را با تابع pop حذف نکردیم. تابع peek یک ابزار عالی برای Stack s در جاوا است.
جستجو کردن
اگر بخواهیم عنصر خاصی را پیدا کنیم، پیاده سازی پشته ها در جاوا از .search(e); برای پیدا کردن آنSystem.out.println(stackExample.search(5));
خروجی
2
به خاطر داشته باشید که این به این دلیل است که ما از بالای پشته و جاوا استک ها از 1 شروع می شوند، نه مانند یک آرایه 0 . بنابراین، با نگاه کردن به پشته، (10) --> (5) و 5 در نقطه شماره 2 است. اگر سعی کنید عنصری را پیدا کنید که در Stack نباشد ، یک -1 به عنوان خروجی دریافت خواهید کرد.
در حال تکرار
هنگام کار با هر مجموعه ای، ممکن است مواقعی پیش بیاید که لازم باشد چندین عنصر را جستجو کنید. برای صرفه جویی در پیچیدگی و جستجوی چندباره در پشته ، می توانید از تکرار استفاده کنید. از آنجا که Stack در جاوا کلاس List را گسترش می دهد ، چندین گزینه برای تکرار وجود دارد. یکی از ساده ترین آنها استفاده از تابع ListIterator است . ListIterator از این نظر خوب است که به شما امکان می دهد با استفاده از .hasPrevious() یا .hasNext یک پشته را از بالا به پایین یا از پایین به بالا طی کنید . در اینجا به نظر می رسد:ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());
while (exampleIterator.hasPrevious()) {
int iteration = exampleIterator.previous();
System.out.println(iteration);
}
خروجی
10
5
به خاطر داشته باشید که وقتی از طریق Stacks در جاوا تکرار می کنید، هیچ عنصری را در آن حذف نمی کنید. تکرار اساساً به شما این امکان را می دهد که به ترتیب به هر عنصر در پشته نگاه کنید. وقتی این کار را انجام میدهید، میتوانید به دنبال مکانهایی بگردید که عناصر خاصی در آن قرار دارند و سپس از آن عبور کرده و آنها را دستکاری کنید. در صورت لزوم می توانید آنها را بشمارید، حذف کنید یا حتی تغییر دهید.
GO TO FULL VERSION