מחלקת Java Stack מרחיבה את מחלקה וקטור. זה מאפשר לך ליצור אלמנטים חדשים, להציג אלמנט בערימה, לעדכן אלמנט בערימה ולמחוק את כל האלמנטים מהמחסנית. ערימת נתוני תהליך בסדר ראשון-ב-אחרון (FILO). זה אומר שאתה יכול רק להוסיף או להסיר פריטים מהחלק העליון של ערימה.

למבנה הנתונים מחסנית יש חמש שיטות עיקריות. עם זאת, למחלקה Java Stack יש גם גישה ליותר מ-40 שיטות אחרות, אותן היא יורשת ממחלקת Vector.

יצירת מחסנית ב-Java

כיתת סטאק יש בנאי יחיד המאפשר לך ליצור מחסנית ריקה. לכל מחסנית יש ארגומנט סוג, שמכתיב את סוג הנתונים שהוא יאחסן.

יְבוּא java.util. לַעֲרוֹם;

פּוּמְבֵּימעמדרָאשִׁי{
פּוּמְבֵּיסטָטִיבָּטֵלרָאשִׁי(מחרוזת[] args){
// צור מחסנית
לַעֲרוֹם לקוחות = חָדָשׁ לַעֲרוֹם();
}
}

הקוד שלמעלה יוצר מבנה נתונים סטאק שנקרא לקוחות שמאחסן ערכי מחרוזת.

אכלוס מחסנית

אחת מחמש השיטות העיקריות של מחלקת Stack היא לִדחוֹף() שיטה. זה לוקח פריט בודד בעל אותו סוג נתונים כמו המחסנית ודוחף את הפריט הזה לראש המחסנית.

// לאכלס מחסנית
Customers.push("Jane Doe");
Customers.push("ג'ון דו");
Customers.push("פטריק וויליאמס");
Customers.push("פול סמית");
instagram viewer

Customers.push("אריק רו");
Customers.push("אלה ג'ונס");
Customers.push("ג'סיקה בראון");

הקוד שלמעלה מאכלס את מחסנית הלקוחות בשבעה פריטים. זה דוחף כל פריט חדש לראש הערימה. אז, הפריט בראש ערימת הלקוחות הוא ג'סיקה בראון. ואתה יכול לאשר זאת באמצעות ה-Stack לְהָצִיץ() שיטה. ה לְהָצִיץ() השיטה לא לוקחת טיעונים. הוא מחזיר את האובייקט בראש הערימה מבלי להסיר אותו.

// הצג אובייקט בחלק העליון של ערימה
System.out.println (Customers.peek());

הקוד למעלה מחזיר את הפלט הבא לקונסולה:

ג'סיקה בראון

הצג את הפריטים בערימה

מבנה הנתונים מחסנית הוא די מגביל באופן שבו הוא מאפשר לך ליצור אינטראקציה עם הנתונים שלו. אתה צריך בעיקר להשתמש ב-Stack דרך הפריט העליון שלו. עם זאת, אתה יכול גם להשתמש בשיטות שעברו בירושה ממחלקת Vector כדי לגשת לאלמנטים שרירותיים. שיטות כאלה כוללות elementAt ו- removeElementAt.

הדרך הקלה ביותר לקבל סקירה כללית של התוכן של מחסנית היא פשוט להדפיס אותו. העבר חפץ מחסנית אל System.out.println ושיטת toString() של Stack תפיק סיכום יפה:

// הצג את כל הרכיבים של ערימה
System.out.println (לקוחות);

הקוד שלמעלה מדפיס את הפלט הבא למסוף:

[ג'יין דו, ג'ון דו, פטריק וויליאמס, פול סמית', אריק רו, אלה ג'ונס, ג'סיקה בראון]

חיפוש מיקום פריט בערימה

אם אתה מכיר פריט בערימה, תוכל לזהות את מיקום האינדקס שלו או את מיקומו ביחס לחלק העליון של הערימה. ה אינדקס של() השיטה לוקחת פריט ב-Stack ומחזירה את מיקום האינדקס שלו. שים לב ש-Stack מתחיל לאינדקס את הפריטים שלו באפס.

// מצא מיקום אינדקס פריט
System.out.println (Customers.indexOf("Jane Doe"));

הקוד שלמעלה מדפיס את הפלט הבא למסוף:

0

ה לחפש() method היא אחת מהשיטות העיקריות של מחלקת Stack. הוא מחזיר מיקום פריט ביחס לראש הערימה, כאשר לפריט בראש הערימה יש מיקום מספר אחד.

System.out.println (Customers.search("Jane Doe"));

הקוד שלמעלה מדפיס את הפלט הבא למסוף:

7

אם אתה מספק את לחפש() או ה אינדקס של() שיטות עם פריט שאינו ב-Stack, הם יחזירו פריט שלילי.

System.out.println (Customers.search("Elsa Doe"));
System.out.println (Customers.indexOf("Elsa Doe"));

הקוד שלמעלה מדפיס את הפלט הבא למסוף:

-1
-1

עדכון פריטים בערימה

אתה יכול לתפעל רק פריט בחלק העליון של ערימה. לכן, אם ברצונך לעדכן אלמנט שאינו בראש ה-Stack, תצטרך להקפיץ את כל הפריטים שמעליו. ה פּוֹפּ() שיטה היא אחת השיטות העיקריות של ה-Stack. ה פּוֹפּ() השיטה לא לוקחת טיעונים. זה מסיר את הפריט בחלק העליון של הערימה ומחזיר אותו.

// עדכן אובייקט
Customers.pop();
Customers.pop();
Customers.push("אלה ג'יימס");
Customers.push("ג'סיקה בראון");
System.out.println (לקוחות);

הקוד שלמעלה מדפיס את הפלט הבא למסוף:

[ג'יין דו, ג'ון דו, פטריק וויליאמס, פול סמית', אריק רו, אלה ג'יימס, ג'סיקה בראון]

כפי שניתן לראות מהפלט, הקוד מעדכן את שם המשפחה של אלה לג'יימס. זה כולל תהליך שמקפיץ פריטים מהערימה עד שמגיעים לאובייקט היעד. לאחר מכן הוא מקפיץ את אובייקט היעד; מעדכן אותו; ודוחף אותו, יחד עם הפריטים שהיו על גבי פריט המטרה, בחזרה לערימה. תצטרך להשתמש בתוכנה שמבצעת פעולות כמו זו שלמעלה, בכל פעם שתרצה לעדכן פריט במחסנית שלך.

מחיקת פריט מחסנית

כדי למחוק פריט בודד ממבנה הנתונים של Stack, אתה יכול שוב להשתמש בשיטה pop(). אם הפריט שברצונך למחוק לא נמצא בחלק העליון, אתה יכול להקפיץ פריטים בחלק העליון עד שתגיע לפריט הרצוי.

מחיקת כל הפריטים בערימה

כדי למחוק את כל הרכיבים מ-Stack, אתה יכול להשתמש ב-a Java while לולאה עם השיטה pop() כדי למחוק את האלמנטים אחד בכל פעם. עם זאת, גישה יעילה יותר היא להשתמש ב- ברור() שיטה. ה ברור() השיטה היא כזו שמחלקת Stack יורשת מהמחלקה Vector. זה לא לוקח ארגומנטים, לא מחזיר כלום, אלא פשוט מסיר את כל האלמנטים בתוך מבנה הנתונים Stack.

// מחק את כל הפריטים בערימה
Customers.clear();
System.out.println (Customers.empty());

הקוד למעלה מוחק את כל הפריטים בערימת הלקוחות. לאחר מכן הוא משתמש ב- ריק() שיטה כדי לבדוק אם המחסנית ריקה. ה ריק() היא שיטה עיקרית נוספת של Java Stack Class. זה לא לוקח ארגומנטים ומחזיר ערך בוליאני. שיטה זו מחזירה true אם ה-Stack ריק ו-false אחרת.

הקוד שלמעלה מדפיס את הפלט הבא למסוף:

נָכוֹן

יישומים מעשיים עבור מבנה הנתונים מחסנית

מבנה הנתונים של Stack מגביל מאוד. זה לא מספק גמישות רבה בעיבוד נתונים כמו מבני נתונים אחרים. זה מעלה את השאלה: מתי כדאי להשתמש במבנה הנתונים של Stack?

מבנה הנתונים של Stack מתאים אידיאלי ליישומים הדורשים עיבוד נתונים בסדר הפוך. אלו כוללים:

  • אפליקציה שבודקת אם מילה היא פלינדרום.
  • אפליקציה הממירה מספרים עשרוניים למספרים בינאריים.
  • יישומים המאפשרים למשתמשים לבטל.
  • משחקים המאפשרים למשתמש לחזור למהלכים קודמים, כמו משחק שחמט.