Presentation is loading. Please wait.

Presentation is loading. Please wait.

סוגי נתונים מופשטים (Abstract Data Type)

Similar presentations


Presentation on theme: "סוגי נתונים מופשטים (Abstract Data Type)"— Presentation transcript:

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 X5; a2; v3; f(X); bg(a); w5; Z8; c4;

14 דוגמא לשימוש במחסנית מציאת ההוראה הבאה לבצוע
קיים program counter (בקיצור: pc) יחיד, והוא מכיל את כתובת ההוראה הבאה לבצוע לאחר טעינת התכנית ה-pc מקבל את כתובת ההוראה הראשונה מחזור רגיל: טעינת ההוראה ל- cpu קידום ה-pc להוראה הבאה בצוע ההוראה שנטענה ל- cpu בזהוי שההוראה היא קריאה לפונקציה: הכנסת ערך ה- pc למחסנית נתינת כתובת ההוראה הראשונה של הפונקציה ל- pc ביציאה מהפונקציה: הוצאת ערך מהמחסנית ונתינתו ל- pc אם יוצאים מפונקציה והמחסנית ריקה - סיימנו

15 דוגמא לשימוש במחסנית סדרת הפעולות:
main f g X5; a2; v3; f(X); bg(a); w5; Z8; c4; 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 X2; YX+3; Z5;

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())


Download ppt "סוגי נתונים מופשטים (Abstract Data Type)"

Similar presentations


Ads by Google