ה'/חשון/תשע"ה מחסנית -הגדרה מחסנית (מבנה נתונים) – מתוך ויקיפדיה מחסנית היא סוג של מבנה נתונים מופשט הפועל בצורה דומה לזו של מחסנית רובה :האיבר שנכנס ראשון למחסנית יוצא ממנה אחרון. תכונה זו מכונה נכנס אחרון יוצא ראשון LIFO - Last In First Out - ראש המחסנית – המקום אליו מכניסים וממנו מוציאים את הערכים. 23 -30 4 5 13 0 8 A B C A D A B ראש המחסנית 1 מחסנית הגדרה ופעולות ממשק מחסנית פעולות ממשק )(new Stack פעולה המחזירה מחסנית ריקה לדוגמה – ראש המחסנית ;)(Stack s = new Stack מחסנית הגדרה ופעולות ממשק 2 1 ה'/חשון/תשע"ה מחסנית פעולות ממשק )(IsEmpty פעולה המחזירה 'אמת' אם המחסנית ריקה ,ו'שקר' אחרת. הנחה :המחסנית מאותחלת. לדוגמה- אמת שקר ))(if(s.IsEmpty 23 -30 ;n = 3 ראש המחסנית ראש המחסנית 4 5 13 0 8 3 מחסנית הגדרה ופעולות ממשק מחסנית פעולות ממשק )Push(x פעולה המכניסה את האיבר Xלראש המחסנית. הנחה :המחסנית מאותחלת. 7 6 5 4 3 2 1 ראש המחסנית )s.Push(7 sאחרי 6 5 4 3 2 1 ראש המחסנית sלפני מחסנית הגדרה ופעולות ממשק 4 2 ה'/חשון/תשע"ה מחסנית פעולות ממשק )(Pop פעולה המוציאה את האיבר שבראש המחסנית ומחזירה את ערכו. הנחה :המחסנית מאותחלת ואינה ריקה. מוחזר הערך 7 6 5 4 3 2 1 ראש המחסנית )(s.Pop sאחרי 7 6 5 4 3 2 1 ראש המחסנית sלפני 5 מחסנית הגדרה ופעולות ממשק מחסנית פעולות ממשק )(Top פעולה המחזירה את ערכו של האיבר שבראש המחסנית מבלי להוציאו. הנחה :המחסנית מאותחלת ואינה ריקה. מוחזר הערך 7 7 6 5 4 3 2 1 ראש המחסנית )(s.Top sאחרי 7 6 5 4 3 2 1 ראש המחסנית sלפני מחסנית הגדרה ופעולות ממשק 6 3 ה'/חשון/תשע"ה אופן סריקת מחסנית באופן כללי -עוברים על כל איברי המחסנית בלולאת כל עוד ע"י שליפת איברי המחסנית מראשה אחד אחר השני. בכל ביצוע של הלולאה מבצעים חישוב/פעולה על הערך שיצא מראש המחסנית. הלולאה מסתיימת כאשר המחסנית ריקה (תנאי עצירה של הלולאה). תבנית בC#- ))(while (!s.IsEmpty { ;)(x = s.Top //חישוב/פעולה על הערך שיצא מראש המחסנית ;)(s.Pop } 7 מחסנית הגדרה ופעולות ממשק אופן סריקת מחסנית – דוגמה 1 פעולה להצגת כל הערכים הזוגיים במחסנית )static void PrintZugi(Stack s { //מקבלת מחסנית של מספרים ומציגה את אלו הזוגיים במחסנית //הנחה – המחסנית אותחלה ))(while (!s.IsEmpty { ;)(x = s.Top )if (x % 2 == 0 ;)Console.WriteLine(x ;)(s.Pop } } מחסנית הגדרה ופעולות ממשק 8 4 ה'/חשון/תשע"ה אופן סריקת מחסנית – דוגמה 2 פעולה לחישוב מספר הערכים החיוביים במחסנית )static int CountHiyuvi(Stack s { //מקבלת מחסנית של מספרים ומחזירה את מספר הערכים החיוביים בה //הנחה – המחסנית אותחלה ;count = 0 ))(while (!s.IsEmpty { ;)(x = s.Top )if (x > 0 ;count++ ;)(s.Pop } ;return count } 9 מחסנית הגדרה ופעולות ממשק מחסנית מספרים – תרגיל 1 כתוב פעולה ,המקבלת מחסנית מלאה במספרים טבעיים ומציגה את כל המספרים התלת- ספרתיים במחסנית. )static void PrintThreeDigit(Stack s { //מקבלת מחסנית של מספרים טבעיים ומציגה את אלו התלת ספרתיים במחסנית //הנחה – המחסנית אותחלה ;int x ))(while (!s.IsEmpty { ;)(x = s.Top )if (x >= 100 && x <= 999 ;)Console.WriteLine(x ;)(s.Pop } } מחסנית הגדרה ופעולות ממשק 10 5 ה'/חשון/תשע"ה מחסנית מספרים – תרגיל 2 כתוב פעולה ,המקבלת מחסנית מלאה במספרים שלמים ומחזירה את סכום המספרים במחסנית שמספר ספרותיהן זוגי. פעולת עזר – לחישוב מספר ספרותיו של מספר )static int CountDigit(int num { //מחזירה את מספר הספרות של המספר ;int count = 0 )while (num > 0 { ;count++ ;num /= 10;//num = num/10 } ;return count } 11 מחסנית הגדרה ופעולות ממשק מחסנית מספרים – תרגיל 2 הפעולה העיקרית )static int SumEvenDigitsStack(Stack s { //מקבלת מחסנית של מספרים טבעיים ומחזירה את סכום המספרים בעלי מספר זוגי של ספרות במחסנית //הנחה – המחסנית אותחלה ;int sum = 0; int x ))(while (!s.IsEmpty { ;)(x = s.Top )if (CountDigit(x) % 2 == 0 ;sum += x ;)(s.Pop } ;return sum מחסנית הגדרה ופעולות ממשק } 12 6
© Copyright 2024