מהם מבני נתונים של Stack ב- Python?



מאמר זה יספק לכם ידע מפורט ומקיף על מבני נתונים של Stack ב- Python עם הרבה דוגמאות.

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

מדוע מבני נתונים?

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





ההבדל בין html ל- xml

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

סוגי מבני נתונים

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



סוגי מבני נתונים

מהו מבנה נתוני מחסנית?

שקול כמה דוגמאות מהחיים האמיתיים:

  • משלוח במטען
  • צלחות על מגש
  • ערימת מטבעות
  • ערמת מגירות
  • הוצאת רכבות בחצר רכבת

plates-stacks-data-structure



כל הדוגמאות הללו עוקבות אחר א אחרון ראשון בהתחלה אִסטרָטֶגִיָה. שקול צלחות על מגש, כאשר אתה רוצה לבחור צלחת אתה נאלץ לבחור צלחת מלמעלה ואילו כאשר הצלחות נשמרו על המגש עליהן להיות בסדר הפוך. לעיל דוגמאות העוקבות אחר Last-in-First-Out (LIFO) עקרון ידועים בשם לַעֲרוֹם .

מלבד הפעולות המשלימות, אני יכול לומר שהפעולות העיקריות האפשריות בערימה הן:

  1. דחף או הכנס אלמנט לראש הערימה
  2. פופ או הסר אלמנט מראש הערימה

יצירת מבנה נתוני מחסנית

מחלקה מחסנית: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ top = -1
  • גודל מקסימלי הוא המספר המרבי של אלמנטים הצפויים בערימה.
  • אלמנטים של הערימה מאוחסנים ברשימת הפיתונים.
  • למעלה מציין את האינדקס העליון ביותר של הערימה שנלקח בתחילה -1 כדי לסמן מחסנית ריקה.

ניתן לראות את הסטטוס ההתחלתי של ה- Stack באיור שבו max_size = 5

דחף את אלמנט לערימה

כעת, אם ברצונך להזין או לדחוף אלמנט לערימה, עליך לזכור זאת

  • החלק העליון יצביע לאינדקס אליו יוכנס האלמנט.
  • וששום אלמנט לא יוכנס כאשר הערימה מלאה כלומר כאשר max_size = top.

אז מה צריך להיות האלגוריתם ??

# מחזירה את הגודל המרבי של מחסנית def get_max_size (עצמי): return self .__ max_size # מחזירה ערך bool בין אם מחסנית מלאה או לא, נכון אם מלא ושקר אחרת def is_full (self): return self.get_max_size () - 1 == עצמי .__ עליון # דוחף אלמנט בחלק העליון של מחסנית def push (עצמי, נתונים): אם (self.is_full ()): הדפס ('מחסנית כבר מלאה') אחר: עצמי .__ עליון = עצמי .__ עליון + int (1 ) אלמנטים .__ עצמית [עצמית .__ עליונה] = נתונים # ניתן להשתמש בהמשך __str __ () כדי להדפיס את האלמנטים של אובייקט DS תוך ניפוי באגים def __str __ (עצמי): msg = [] index = self .__ top while (index> = 0): msg.append ((str) (רכיבי .__ עצמיים [index])) index- = 1 msg = ''. להצטרף (msg) msg ​​= 'ערימת נתונים (מלמעלה למטה):' + msg להחזיר msg

כעת, כאשר אתה מבצע את הפעולות הבאות:

stack1 = מחסנית (4)

# דחף את כל האלמנטים הדרושים.

stack1.push ('A')

stack1.push ('B')

stack1.push ('C')

stack1.push ('E')

הדפס (stack1.is_full ())

הדפס (stack1)

תְפוּקָה:

הערימה כבר מלאה
נָכוֹן
נתוני מחסנית (מלמעלה למטה): D C B A

אלמנטים פופ מסטאק

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

  • הערימה אינה ריקה כלומר למעלה! = -1
  • כאשר אתה מוחק את הנתונים, החלק העליון חייב להצביע על החלק העליון של הערימה הקודמת.

אז מה יהיה האלגוריתם ??

# מחזיר ערך bool בין אם מחסנית ריקה או לא, נכון אם ריק ושקר אחרת def is_empty (self): return self .__ top == - 1 # returns popped value def pop (self): if (self.is_empty ()): הדפס ('שום דבר לפוצץ, כבר ריק') אחר: a = עצמי .__ אלמנטים [עצמי .__ למעלה] עצמי .__ למעלה = עצמי .__ למעלה -1 להחזיר #display את כל אלמנטים הערימה מלמעלה לתחתית def תצוגה (עצמי): עבור i בטווח (עצמי .__ עליון, -1, -1): הדפס (אלמנטים .__ עצמיים [i], סוף = '') הדפס ()

כעת, בהתחשב בערימה שנוצרה בעבר, נסה לפוצץ אלמנטים

הדפס (stack1.pop ())

הדפס (stack1.pop ())

הדפס (stack1)

הדפס (stack1.pop ())

הדפס (stack1.pop ())

הדפס (stack1.pop ())

תְפוּקָה:

ד

ג

נתוני מחסנית (מלמעלה למטה): B A

ב

ל

אין מה לפוצץ, כבר ריק

יישומים של מבנה נתונים מחסנית

  • דוגמה 1:

מחסנית משמשת ליישום אלגוריתם של התאמת סוגריים להערכת ביטוי אריתמטי וגם ביישום שיחות שיטה.

קבל אורך מערך js

התשובה עליה היא 5.

  • דוגמה 2:

לוח בחלונות משתמש בשתי ערימות כדי ליישם פעולות ביטול מחדש (ctrl + z, ctrl + y). היית עובד על עורכי מילים של Windows כגון MS-Word, Notepad וכו '. הנה טקסט כתוב ב- MS-Word. שים לב כיצד הטקסט השתנה בלחיצה על Ctrl-Z ו- Ctrl-Y.

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

#creating class stack stack מחסנית: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ top = -1 def is_full (self): if (self .__ top == עצמי .__ max_size-1): להחזיר תשואה אמיתית שקר def הוא_מונע (עצמי): אם (עצמי .__ למעלה == - 1): להחזיר חזרה אמיתית דחיפה כוזב נכון (עצמי, נתונים): אם (self.is_full ()): הדפס ('הערימה מלאה !!') אחר: עצמי .__ עליון + = 1 עצמי .__ אלמנטים [עצמי .__ למעלה] = הגדרת נתונים פופ (עצמי): אם (self.is_empty ()): הדפס ('הערימה ריקה! ! ') אחר: נתונים = עצמי .__ אלמנטים [עצמי .__ עליון] עצמי .__ למעלה- = 1 תצוגת הגדרת נתונים מחזירה (עצמי): אם (self.is_empty ()): הדפס (' הערימה ריקה ') אחר: אינדקס = עצמי .__ עליון בעוד (אינדקס> = 0): הדפס (אלמנטים .__ עצמיים [אינדקס]) אינדקס- = 1 def get_max_size (עצמי): החזר עצמי .__ max_size # ניתן להשתמש בהמשך __str __ () להדפסת האלמנטים של אובייקט DS בעת ניפוי באגים def __str __ (עצמי): msg = [] index = self .__ top while (index> = 0): msg.append ((str) (self .__ elements [index])) index- = 1 msg = ' '.join (msg) msg ​​=' ערימת נתונים (מלמעלה למטה): '+ msg להחזיר ms g # פונקציה להטמעת פעולת הסרה או אחורה של מרחוק def remove (): הלוח הגלובלי, ביטול_סטאק נתונים = הלוח [len (הלוח) -1] הלוח. הסר (נתונים) undo_stack.push (נתונים) הדפס ('הסר:', הלוח) # פונקציה ליישום ביטול פעולה ביטול ביטול (): הלוח הגלובלי, ביטול המשלוח, הפעולה מחדש אם (undo_stack.is_empty ()): הדפס ('אין נתונים לבטל') אחר: data = undo_stack.pop () clipboard.append ( נתונים) redo_stack.push (data) הדפס ('בטל:', הלוח) # פונקציה ליישום פעולה חוזרת def redo (): הלוח הגלובלי, undo_stack, redo_stack אם (redo_stack.is_empty ()): הדפס ('אין נתונים כדי לבצע מחדש ') אחר: נתונים = לעשות מחדש את המידה.פופ () אם (נתונים לא בלוח): להדפיס (' אין נתונים לעשות מחדש ') לעשות מחדש את המשימה.מידע אחר (נתונים) אחר: הלוח. להסיר (נתונים) לבטל את המשימה. נתונים) הדפס ('בצע מחדש:', הלוח) הלוח = ['A', 'B', 'C', 'D', 'E', 'F'] undo_stack = מחסנית (len (הלוח)) redo_stack = מחסנית (len (לוח)) הסר () בטל () בצע מחדש ()

תְפוּקָה:

הסר: ['A', 'B', 'C', 'D', 'E']

בטל: ['A', 'B', 'C', 'D', 'E', 'F']

בצע מחדש: ['A', 'B', 'C', 'D', 'E']

עם זאת, אנו מגיעים לסוף מבנה נתונים זה של Stack ב- מאמר Python. אם הבנתם בהצלחה וניהלתם את הקודים בעצמכם אתם כבר לא מתחילים במבנה הנתונים של ערימות.

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

כדי לקבל ידע מעמיק על Python יחד עם היישומים השונים שלו, אתה יכול להירשם לשידור חי עם תמיכה 24/7 וגישה לכל החיים.