1 / 26

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

סוגי נתונים מופשטים (Abstract Data Type). בדר"כ כאשר אנו כותבים תוכנית אנו מתחייבים להגדיר את כל הנתונים באופן מדויק ( .(int, float, char

shad-roach
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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) • 1 5 + 3 * (postfix) • ? postfix ל-1+5*3איך נתרגם את :

  11. דוגמא לשימוש במחסניתחישוב ביטוי ב-postfix • נניח מחסנית ריקה:1 5 + 3 * • בא מספר --- מכניסים למחסנית: • באה פעולה : • מוציאים 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 }else{ 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 The stack is full 4 3 2 1 0 The stack is empty 0 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: 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()) דוגמאות תורעדיפות:

More Related