Download presentation
Presentation is loading. Please wait.
1
סוגי נתונים מופשטים (Abstract Data Type)
בדר"כ כאשר אנו כותבים תוכנית אנו מתחייבים להגדיר את כל הנתונים באופן מדויק ( .(int, float, char אבל בתיאור של אלגוריתם אין צורך בהגדרות מדויקות של כל הפרטים ואפילו אין צורך בייצוג קונקרטי של הזכרון בו מאוכסנים הנתונים. למשל, בבעיית מיון עבור קבוצת נתונים S חשוב שלכל זוג a, b S או a<b או a>b או .a=bלא משנה מאיזה סוג נתונים אבל חשוב שניתן להשוות ביניהם.
2
סוגי נתונים מופשטים (Abstract Data Types)
הגדרה: אוסף נתונים ופעולות עליהם ללא פרטים למימוש נקרא סוג נתונים מופשט .(ADT) הכי חשוב באילו פעולות תומך ADT מסוים
3
רשימה ADT (List) היא סידרה של אלמנטים L={x1,x2,…, xn} |L| מסמן אורך הסדרה .
4
ההצגות הבסיסיות של רשימה על ידי: מערך (בזכרון רציף) רשימה מקושרת (בזכרון לא רציף)
5
פעולות מופשטות על רשימה פעולות בסיסיות
Head() Ptr Next(Ptr) Ptr מיקום של האיבר הבא Prev(Ptr) Ptr Key(Ptr) value Insert(Ptr,newPtr) Head() Delete(Ptr) Head() MakeEmptyList() יצירת הרשימה Length() value Outside(Ptr) boolean אמת – מחוץ לגבולות
6
פעולות מופשטות על רשימה פעולות מורכבות
Access(index)value ListSearch(value)Ptr IsEmptyList() בדיקה האם הרשימה ריקה
7
פעולות מופשטות על רשימה דוגמא
ListSearch(value):Ptr Ptr x Head() While (not Outside(x)) and Key(x) <> value x Next(x) If Outside(x) Return nil Else Return x
8
מחסנית ADT (Stack) אוסף סדור של אלמנטים כאשר הכנסה והוצאה – דרך קצה אחד, הנקרא ראש המחסנית. האחרון הנכנס הוא הראשון שיצא. LIFO: last –in, first out))
9
פעולות מופשטות על מחסנית
Top() value בדיקה מהו האיבר בראש המחסנית Pop() value הוצאת איבר תמיד מראש המחסנית Push(x) הכנסת איבר תמיד לראש המחסנית MakeEmptyStack( )Ptr יצירת המחסנית IsEmptyStack() בדיקה האם המחסנית ריקה
10
דוגמא לשימוש במחסנית ללא סוגריים:(1+5)*3 רוצים לחשב ביטוי(infix)
* (postfix) ? postfix ל-1+5*3איך נתרגם את :
11
דוגמא לשימוש במחסנית חישוב ביטוי ב-postfix
נניח מחסנית ריקה: * בא מספר --- מכניסים למחסנית: באה פעולה : מוציאים 2 איברים מהמחסנית מבצעים חישוב מכניסים תוצאה למחסנית כאשר הסדרה הסתיימה : האיבר (היחיד) בראש המחסנית הוא התשובה.
12
דוגמא לשימוש במחסנית סדרת הפעולות: 1 5 + 3 *
דוגמא לשימוש במחסנית סדרת הפעולות: * Push(1) Push(5) Pop(5) Pop(1) 5+1 Push(6) Push(3) Pop(3) Pop(6) 3*6 Push(18)
13
דוגמא לשימוש במחסנית מציאת ההוראה הבאה לבצוע
דוגמא לשימוש במחסנית מציאת ההוראה הבאה לבצוע main f g X5; a2; v3; f(X); bg(a); w5; Z8; c4;
14
דוגמא לשימוש במחסנית מציאת ההוראה הבאה לבצוע
קיים program counter (בקיצור: pc) יחיד, והוא מכיל את כתובת ההוראה הבאה לבצוע לאחר טעינת התכנית ה-pc מקבל את כתובת ההוראה הראשונה מחזור רגיל: טעינת ההוראה ל- cpu קידום ה-pc להוראה הבאה בצוע ההוראה שנטענה ל- cpu בזהוי שההוראה היא קריאה לפונקציה: הכנסת ערך ה- pc למחסנית נתינת כתובת ההוראה הראשונה של הפונקציה ל- pc ביציאה מהפונקציה: הוצאת ערך מהמחסנית ונתינתו ל- pc אם יוצאים מפונקציה והמחסנית ריקה - סיימנו
15
דוגמא לשימוש במחסנית סדרת הפעולות:
main f g X5; a2; v3; f(X); bg(a); w5; Z8; c4; Push(pc “z 8”) Push(pc “c 4”) Pc Pop() /* c 4 */ Pc Pop() /* z 8 */ Pc Pop() /* אבל המחסנית ריקה ... סיימנו!*/
16
ההצגות הבסיסיות של Stack על ידי: מערך (בזכרון רציף) רשימה מקושרת (בזכרון לא רציף)
17
class Stack{ int stack[]; int head;//head of stack int n; //size of the stack // public Stack(int n){ stack = new int[n]; head = 0; this.n = n; } // public boolean empty(){ return (head == 0); public boolean full(){ return (head == n);
18
public int pop(){ if (this.empty()){ System.out.println("The stack is empty"); //underflow error return 0; }else{ int el = stack[head-1]; head--; return el; } // public void push(int el){ if (this.full()){ System.out.println("The stack is full");//overflow error stack[head] =el; head++;
19
// public static void main(String args[]){ Stack s = new Stack (5); for(int i=0;i<7;i++) s.push(i); for(int i=0;i<6;i++) System.out.println(s.pop()+" "); } The stack is full 4 3 2 1 The stack is empty Process Exit...
20
תור ADT (Queue) אוסף סדור של אלמנטים כאשר הכנסה דרך קצה אחד, הנקרא סוף התור; הוצאה דרך קצה האחר הנקרא ראש התור. אלמנטים הראשון הנכנס הוא הראשון שיצא. FIFO: first –in, first -out))
21
פעולות מופשטות על התור Front() value בדיקה מהו האיבר ראשון בתור
Dequeue() value הוצאת איבר תמיד מראש התור Enqueue(x) הכנסת איבר תמיד לסוף התור MakeEmptyQueue( ) יצירת התור IsEmptyQueue() בדיקה האם התור ריק
22
דוגמאות תור : Queue תור הדפסה פשוט Queue X2; YX+3; Z5;
23
ההצגות הבסיסיות של Queue על ידי: מערך (בזכרון רציף) רשימה מקושרת (בזכרון לא רציף)
24
תור ADT עדיפות (Priority Queue) כל אלמנט כולל שדה נוסף Priority אוסף סדור של אלמנטים כאשר הכנסה דרך קצה אחד; הוצאה דרך קצה האחר. האלמנט בעל ה- Priority המקסימלי (מינימלי) הוא הראשון שיצא.
25
פעולות על תור עדיפות Maximum() value מחזיר איבר בעל עדיפות מקסימלית בתור Extract_Max() value הוצאת איבר בעל עדיפות מקסימלית AddPriorityQueue (x) הוספת איבר לתור MakeEmptyPriorityQueue( ) יצירת התור IsEmptyPriorityQueue( ) בדיקה האם התור ריק PriorityQueueSort(set X )
26
דוגמאות תור עדיפות: to schedule jobs on a shared computer:
דוגמאות תור עדיפות: to schedule jobs on a shared computer: When a job is finished, the highest-priority job is selected from the pending (by Extract_Max()) A new job can be added to the queue at any time (by AddPriorityQueue())
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.