י"ח/כסלו/תשע"ה
תור QUEUE -
הגדרה
טנ"מ המכיל רצף של ערכים (יש חשיבות לסדר) ,כאשר יש
אפשרות להכניס ערכים רק לסוף התור ולהוציא ערכים רק
מתחילתו.
למשל – תור במכולת.
עיקרון הפעולה של הטנ"מ תור הואFIFO -
)מי שנכנס ראשון יוצא ראשון( First In First Out
תור -פעולות הממשק סריקה ובנייה
1
תור QUEUE -
תיאור סְ כֵמַ טי של תור
תור -פעולות הממשק סריקה ובנייה
יציאה
Out
כניסה
In
2
1
י"ח/כסלו/תשע"ה
פעולות הממשק של תור
בנאי Constructor -
בונה תור ריק
שאילתות:
מחזירה האם התור ריק
מחזירה את הערך שנמצא בראש התור ,בלי לשנות את מצב התור
תנאי קדם :התור אינו ריק
מחזירה תיאור של התור כ[x1, x2, …, xn] -
הערך שנוסף לאחרונה לתור מופיע אחרון.
)(>Queue<T
)(bool IsEmpty
)(T Head
)(string ToString
תור -פעולות הממשק סריקה ובנייה
3
פעולות הממשק של תור
פעולות המשנות את התור:
מכניסה את הערך xלסוף התור
מחזירה את הערך מראש התור ומוציאה אותו מהתור
)void Insert (T x
)( T Remove
תור -פעולות הממשק סריקה ובנייה
4
2
י"ח/כסלו/תשע"ה
סריקה של תור
תבנית כללית
לולאה -תנאי עצירה – התור אינו ריק
שמירת הערך שבראש התור במשתנה עזר
בדיקה/חישוב על משתנה עזר
הוצאת הערך שבראש התור
))(while (!q.IsEmpty
{
;)(x = q.Head
)if (...
;...
;)(q.Remove
}
5
תור -פעולות הממשק סריקה ובנייה
סריקה של תור
דוגמה
)static int SumDigits3Queue(Queue<int> q
{
//מקבלת תור של מספרים טבעיים ומחזירה את סכום המספרים בתור המתחלקים בשלוש
בעלי מספר מתחלק בשלוש של ספרות .הנחה – התור אותחל
;int sum = 0; int x
))(while (!q.IsEmpty
{
;)(x = q.Head
)if (x % 3 == 0 && CountDigit(x) % 3 == 0
;sum += x
;)(q.Remove
}
;return sum
{
תור -פעולות הממשק סריקה ובנייה
6
3
י"ח/כסלו/תשע"ה
סריקה של תור -תרגול
תרגיל 1
כתוב פעולה ,המקבלת תור של מספרים טבעיים ומחזירה את מספר המספרים בתור -
שהספרה המשמעותית ביותר שלהם ,שונה מהספרה הכי פחות משמעותית שלהם.
לא לשכוח – תיעוד הפעולה והנחות
תזכורת -מבנה הסריקה
))(while (!q.IsEmpty
{
;)(x = q.Head
)if (...
;...
;)(q.Remove
}
7
תור -פעולות הממשק סריקה ובנייה
סריקה של תור – תרגיל - 1פתרון
פעולת עזר – בדיקה עבור מספר בודד האם עונה לתנאי
{ )static bool IsNumSpecial(int num
//מחזירה האם שהספרה המשמעותית ביותר של המספר שונה מהספרה הכי פחות משמעותית שלו
//מספר חד ספרתי או - 0מקיים את התנאי
)if (num < 10
;return true
{
else
//שמירת הספרה הפחות משמעותית
;int less = num % 10
//קיצוץ הספרה
;num /= 10
)while (num > 9
;num /= 10
//אחרי הלולאה -נשארה רק הספרה המשמעותית ביוצר -כל השאר קוצצו
}};return num == less
תור -פעולות הממשק סריקה ובנייה
8
4
י"ח/כסלו/תשע"ה
סריקה של תור – תרגיל - 1פתרון
הפעולה העיקרית
)static int CountQueueSpecialNumbers(Queue<int> q
}
//מקבלת תור של מספרים טבעיים ומחזירה את מספר המספרים בתור -שהספרה המשמעותית ביותר
שלהם ,שונה מהספרה הכי פחות משמעותית שלהם // .הנחה – התור אותחל
;int x; int count = 0
{))(while (!q.IsEmpty
;)(x = q.Head
))if (IsNumSpecial(x
;count++
};)(q.Remove
};return count
9
תור -פעולות הממשק סריקה ובנייה
בניה של תור
מבנה כללי
)(static Queue<...> GetQueue...
{
//הפעולה מחזירה תור ...
;)(>Queue<...> q_New = new Queue<...
//בתוך לולאה (כי הפעולה תכניס לתור כמות של ערכים)
;)q_New.Insert(...
//בסוף מחזירים את התור החדש
;return q_New
}
תור -פעולות הממשק סריקה ובנייה
10
5
י"ח/כסלו/תשע"ה
בניה של תור
דוגמה
)(static Queue<string> GetQueueKelet
{
//הפעולה מחזירה תור לפי ערכים הנקלטים מהמשתמש -רשימת מחרוזות המסתיימת בzzz-
;Queue<string> q_New = new Queue<string>(); string st
;)"Console.WriteLine("Insert strings or zzz to finish
;)(st = Console.ReadLine
)"while (st != “zzz
{
;)q_New.Insert(st
;)(st = Console.ReadLine
}
;return q_New
}
תור -פעולות הממשק סריקה ובנייה
11
בניה של תור -תרגול
תרגיל 2
כתוב פעולה ,המקבלת מערך מספרים ומחזירה תור הכולל את כל ערכי המערך סכום ספרותיהן זוגי
לא לשכוח – תיעוד הפעולה והנחות
תור -פעולות הממשק סריקה ובנייה
12
6
תשע"ה/כסלו/י"ח
פתרון- 2 בניה של תור – תרגיל
2 תרגיל
static Queue<string> Arr2QueueSumZugi(int[] arr)
{
הפעולה מחזירה תור מלא בערכי המערך שסכום ספרותיהן זוגי//
Queue<int> q_New = new Queue<int>();
for (int i = 0; i < arr.Length; i++)
{
if (SumDigit(arr[i]) % 2 == 0)
q_New.Insert(arr[i]);
}
return q_New;
}
13
7
פעולות הממשק סריקה ובנייה- תור
© Copyright 2025