הגדרת ערימת צ'אר בג'אווה

1. סקירה כללית

במדריך זה נדון כיצד ליצור לְהַשְׁחִיר מחסנית בג'אווה. ראשית נראה כיצד נוכל לעשות זאת באמצעות ממשק ה- API של Java, ואז נבחן כמה יישומים מותאמים אישית.

Stack הוא מבנה נתונים העוקב אחר עקרון LIFO (Last In First Out). חלק מהשיטות הנפוצות שלה הן:

  • דחיפה (פריט E) - דוחף פריט לראש הערימה
  • פּוֹפּ() - מסיר ומחזיר את האובייקט בראש הערימה
  • לְהָצִיץ() - מחזיר את האובייקט בראש הערימה מבלי להסיר אותו

2. לְהַשְׁחִיר מחסנית באמצעות Java API

ל- Java יש ממשק API מובנה בשם ערימה. מאז לְהַשְׁחִיר הוא סוג נתונים פרימיטיבי, שלא ניתן להשתמש בהם בגנריות, עלינו להשתמש בכיתת העטיפה של java.lang. דמות ליצור לַעֲרוֹם:

מחסנית charStack = מחסנית חדשה ();

כעת, אנו יכולים להשתמש ב- לִדחוֹף, פּוֹפּ, ו לְהָצִיץ שיטות עם שלנו לַעֲרוֹם.

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

3. יישום מותאם אישית באמצעות רשימה מקושרת

בואו ליישם א לְהַשְׁחִיר מחסנית באמצעות רשימה מקושרת כמבנה הנתונים האחורי שלנו:

מחלקה ציבורית CharStack {פריטים מקושרים פרטיים; CharStack ציבורי () {this.items = LinkedList חדש (); }}

יצרנו פריטים משתנה שמתחיל לבנאי.

כעת, עלינו לספק יישום של ה- לִדחוֹף, לְהָצִיץ, ו פּוֹפּ שיטות:

דחיפת חלל ציבורית (פריט תו) {items.push (פריט); } הצצה לדמות ציבורית () {return items.getFirst (); } פופ תווים ציבורי () {Iterator iter = items.iterator (); פריט תווים = iter.next (); אם (פריט! = null) {iter.remove (); פריט החזר; } להחזיר אפס; }

ה לִדחוֹף ו לְהָצִיץ השיטות משתמשות בשיטות המובנות של א רשימה מקושרת. ל פּוֹפּ, השתמשנו לראשונה ב- איטרטור לבדוק אם יש פריט למעלה או לא. אם זה שם, אנו מסירים את הפריט מהרשימה על ידי קריאה ל לְהַסִיר שיטה.

4. יישום מותאם אישית באמצעות מערך

אנו יכולים גם להשתמש במערך למבנה הנתונים שלנו:

אלמנטים CharStackWithArray {char char [] ציבוריים; גודל פרטי פרטי; CharStackWithArray () ציבורי {size = 0; יסודות = char חדש [4]; }}

למעלה, אנו יוצרים a לְהַשְׁחִיר מערך, אותו אנו מאותחלים בבנאי בקיבולת התחלתית של 4. בנוסף, יש לנו a גודל משתנה כדי לעקוב אחר מספר הרשומות שקיימות בערימה שלנו.

עכשיו, בוא נבצע את לִדחוֹף שיטה:

דחיפה בטלנית ציבורית (פריט char) {להבטיח קיבולת (גודל + 1); אלמנטים [גודל] = פריט; גודל ++; } חלל פרטי להבטיח Capacacity (int newSize) {char newBiggerArray []; אם (elements.length <newSize) {newBiggerArray = char [new.elength * 2] חדש; System.arraycopy (אלמנטים, 0, newBiggerArray, 0, גודל); יסודות = newBiggerArray; }}

בזמן דחיפת פריט לערימה, ראשית עלינו לבדוק אם למערך שלנו יש את היכולת לאחסן אותו. אם לא, אנו יוצרים מערך חדש ומכפילים את גודלו. לאחר מכן אנו מעתיקים את האלמנטים הישנים למערך החדש שנוצר ומקצים אותו לשלנו אלמנטים מִשְׁתַנֶה.

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

לבסוף, בואו ליישם את לְהָצִיץ ו פּוֹפּ שיטות:

הצצה לציבור () {if (size == 0) {לזרוק EmptyStackException חדש (); } להחזיר אלמנטים [גודל - 1]; } פופ צ'אר פומבי () {if (size == 0) {זרוק EmptyStackException חדש (); } להחזיר אלמנטים [- גודל]; }

בשתי השיטות, לאחר אימות שהערימה אינה ריקה, אנו מחזירים את האלמנט למצב גודל - 1. עבור פּוֹפּ, בנוסף להחזרת האלמנט, אנו מקטינים את גודל לפי 1.

5. מסקנה

במאמר זה למדנו להכין א לְהַשְׁחִיר מחסנית באמצעות Java API, וראינו כמה יישומים מותאמים אישית.

הקוד המוצג במאמר זה זמין באתר GitHub.