מחסנית היא מבנה נתונים ליניארי העוקב אחר ה LIFO (אחרון נכנס ראשון-אאוט) עִקָרוֹן. למחסנית יש קצה אחד, ואילו לתור יש שני קצוות ( מלפנים ומאחור ). הוא מכיל רק מצביע אחד מצביע עליון מצביע על האלמנט העליון של הערימה. בכל פעם שמתווסף אלמנט לערימה, הוא מתווסף בחלק העליון של הערימה, וניתן למחוק את האלמנט רק מהמחסנית. במילים אחרות, א ניתן להגדיר מחסנית כמיכל בו ניתן לבצע הכנסת ומחיקה מהקצה האחד המכונה החלק העליון של הערימה.
כמה נקודות מפתח הקשורות לחסימה
- זה נקרא כמחסנית מכיוון שהוא מתנהג כמו ערימה בעולם האמיתי, ערימות של ספרים וכו'.
- Stack הוא סוג נתונים מופשט עם קיבולת מוגדרת מראש, מה שאומר שהוא יכול לאחסן אלמנטים בגודל מוגבל.
- זהו מבנה נתונים שעוקב אחר סדר כלשהו כדי להכניס ולמחוק את האלמנטים, והסדר הזה יכול להיות LIFO או FILO.
עבודה של Stack
מחסנית עובדת על תבנית LIFO. כפי שאנו יכולים לראות באיור שלהלן ישנם חמישה בלוקי זיכרון בערימה; לכן, גודל הערימה הוא 5.
פקודת sed
נניח שאנחנו רוצים לאחסן את האלמנטים בערימה ובואו נניח שהמחסנית ריקה. לקחנו את הערימה בגודל 5 כפי שמוצג להלן בה אנו דוחפים את האלמנטים אחד אחד עד שהערימה מתמלאת.
מאחר והמחסנית שלנו מלאה מכיוון שגודל הערימה הוא 5. במקרים שלעיל, אנו יכולים לראות שהיא עוברת מלמעלה למטה כשהיינו נכנסים לאלמנט החדש בערימה. הערימה מתמלאת מלמטה למעלה.
כאשר אנו מבצעים את פעולת המחיקה בערימה, יש רק דרך אחת לכניסה ויציאה שכן הקצה השני סגור. זה עוקב אחר דפוס LIFO, כלומר הערך שהוזן ראשון יוסר אחרון. במקרה הנ'ל, הערך 5 מוזן תחילה, ולכן הוא יוסר רק לאחר מחיקת כל שאר האלמנטים.
פעולות מחסניות סטנדרטיות
להלן כמה פעולות נפוצות המיושמות בערימה:
פעולת PUSH
השלבים המעורבים בפעולת PUSH ניתנים להלן:
- לפני הכנסת אלמנט לערימה, אנו בודקים אם הערימה מלאה.
- אם ננסה להכניס את האלמנט לערימה, והערימה מלאה, אז ה- הצפה מתרחש מצב.
- כאשר אנו מאתחלים ערימה, אנו מגדירים את הערך של top כ-1 כדי לבדוק שהמחסנית ריקה.
- כאשר האלמנט החדש נדחף בערימה, ראשית, הערך של החלק העליון גדל, כלומר, top=top+1, והאלמנט ימוקם במיקום החדש של ה חלק עליון .
- האלמנטים יוכנסו עד שנגיע ל- מקסימום גודל הערימה.
פעולת POP
השלבים המעורבים בפעולת POP ניתנים להלן:
אובייקט Java
- לפני מחיקת האלמנט מהמחסנית, אנו בודקים אם המחסנית ריקה.
- אם ננסה למחוק את האלמנט מהמחסנית הריקה, אז תת זרימה מתרחש מצב.
- אם המחסנית אינה ריקה, אנו ניגשים תחילה לאלמנט שמצביע על ידי ה- חלק עליון
- לאחר ביצוע פעולת הפופ, החלק העליון מופחת ב-1, כלומר, top=top-1 .
יישומים של Stack
להלן היישומים של המחסנית:
int main() { cout<<'hello'; cout<<'javatpoint'; } < pre> <p>As we know, each program has <em>an opening</em> and <em>closing</em> braces; when the opening braces come, we push the braces in a stack, and when the closing braces appear, we pop the opening braces from the stack. Therefore, the net value comes out to be zero. If any symbol is left in the stack, it means that some syntax occurs in a program.</p> <ul> <tr><td>String reversal:</td> Stack is also used for reversing a string. For example, we want to reverse a ' <strong>javaTpoint</strong> ' string, so we can achieve this with the help of a stack. <br> First, we push all the characters of the string in a stack until we reach the null character. <br> After pushing all the characters, we start taking out the character one by one until we reach the bottom of the stack. </tr><tr><td>UNDO/REDO:</td> It can also be used for performing UNDO/REDO operations. For example, we have an editor in which we write 'a', then 'b', and then 'c'; therefore, the text written in an editor is abc. So, there are three states, a, ab, and abc, which are stored in a stack. There would be two stacks in which one stack shows UNDO state, and the other shows REDO state. <br> If we want to perform UNDO operation, and want to achieve 'ab' state, then we implement pop operation. </tr><tr><td>Recursion:</td> The recursion means that the function is calling itself again. To maintain the previous states, the compiler creates a system stack in which all the previous records of the function are maintained. </tr><tr><td>DFS(Depth First Search):</td> This search is implemented on a Graph, and Graph uses the stack data structure. </tr><tr><td>Backtracking:</td> Suppose we have to create a path to solve a maze problem. If we are moving in a particular path, and we realize that we come on the wrong way. In order to come at the beginning of the path to create a new path, we have to use the stack data structure. </tr><tr><td>Expression conversion:</td> Stack can also be used for expression conversion. This is one of the most important applications of stack. The list of the expression conversion is given below: <pre>Infix to prefix Infix to postfix Prefix to infix Prefix to postfix Postfix to infix</pre> </tr><tr><td>Memory management:</td> The stack manages the memory. The memory is assigned in the contiguous memory blocks. The memory is known as stack memory as all the variables are assigned in a function call stack memory. The memory size assigned to the program is known to the compiler. When the function is created, all its variables are assigned in the stack memory. When the function completed its execution, all the variables assigned in the stack are released. </tr></ul> <hr></'hello';>
'hello';>