מחסנית (מבנה נתונים) – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
מאין תקציר עריכה
מ בוט החלפות
שורה 18:
#אתחול מחסנית יוצר מחסנית ריקה. isEmpty(init()) = true
#כל מחסנית שהוסיפו לה יותר איברים משהסירו איננה ריקה. isEmpty(push(i,S) = false
את פעולת ההסרה ניתן להגדיר על מחסנית ריקה ככזאת שמחזירה את אותה המחסנית. לחילופיןלחלופין, ניתן להימנע מלהגדיר אותה, או להגדיר אותה כמחזירה ערך שגיאה מיוחד. באופן דומה, (()top(init (בדיקת ראש מחסנית ריקה) ניתן להגדיר כמחזירה שגיאה, או להימנע מהגדרתה.
 
חשוב לשים לב לכך שכל אוסף של פונקציות וערכים המקיים את התנאים האלה נחשב למחסנית. דוגמה לא-טריוויאלית לכך היא [[קבוצת המספרים הטבעיים]], עבור הפעולות "החזר 0" (אתחול), "הוסף 1"(push), "הפחת 1"(pop), "האם_אפס"(isEmpty). בכיוון השני ניתן לומר שכל מחסנית עשויה להוות ייצוג למספרים הטבעיים.
שורה 25:
מחסנית היא מבנה נתונים בסיסי במימוש שפות תכנות. [[מעבד|במעבדים]] רבים קיים [[אוגר (מחשבים)|אוגר]] מיוחד המשמש כמצביע למחסנית, וב[[שפת מכונה|שפת המכונה]] של מעבדים אלו ממומשת הקריאה לתת-שיגרה על ידי הכנסת כתובת החזרה למחסנית. ברוב [[שפה עילית|השפות העיליות]] נשמרים גם המשתנים המקומיים במבנה המחסנית הנתמך במעבד.
 
ישנו קשר הדוק בין מחסנית ל[[עץ (תורת הגרפים)|עץ]]: מחסנית היא מבנה הנתונים הנפוץ ביותר לצרכילצורכי מעבר על עצים, וכן ניתן להציג כל רצף פעולות על מחסנית בעזרת עץ מכוון. בכל רגע נתון, האיברים הנמצאים במחסנית הם המסלול משורש העץ אל הצומת שבו נמצאים. דוגמה לשימוש כזה אפשר למצוא ב[[שפה פורמלית|שפות פורמליות]]: לכל מילה הנגזרת בעזרת [[דקדוק חסר הקשר]] קיים עץ גזירה, ולכל דקדוק כזה קיים [[אוטומט מחסנית]] המקבל אותו.
 
== מימוש מחסנית ==