Lecture 4

  • Uploaded by: Baseem Najjar
  • 0
  • 0
  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Lecture 4 as PDF for free.

More details

  • Words: 351
  • Pages: 6
‫הרצאה ‪4‬‬ ‫נושא‪ :‬רשימות מקושרות – תור ומחסנית – רשימת מעגלים‬ ‫בעיה‪:‬‬ ‫רוצים לקבל סטודנטים למכללה אך לא יודעים את מספרם‬ ‫‪-1‬להקצות מקסימום מקומות אפשריים ‪-‬‬ ‫חסרון ‪ – 1‬בזבוז של מקומות –‬ ‫חסרון ‪ - 2‬אם יבואו יותר מ – מקס‪ 1+‬סטודנטים נצטרך לבצע פעולות יקרות כדי להכיל‬ ‫אותם!‬ ‫‪-2‬היינו רוצים להקצות בדיוק את מספר המקומות הדרוש – כלומר אם הגיעו ‪ 30‬סטודנטים‬ ‫אז להקצות ‪ 30‬מקומות אם ‪ 130‬אז ‪ 130‬מקומות – ולכן דרוש מבנה דינמי – ולכן כדי‬ ‫לעשות את זה משתמשים במבנה נתונים שקוראים לו רשימה מקושרת!‬ ‫דוגמה‪:‬‬ ‫‪-1‬איציק‬ ‫‪-2‬מירי‬ ‫‪-3‬בר‬ ‫‪-4‬רפאל‬ ‫הרשימה תראה כך‪:‬‬

‫‪ʷʩ‬‬ ‫‪ʶʩ‬‬ ‫‪ʠ‬‬

‫‪ʩ‬‬ ‫‪ʸʩ‬‬ ‫‪ʮ‬‬

‫‪ʸʡ‬‬ ‫‪ʬʠʴ ʸ‬‬

‫אם נרצה למצוא את הת‪.‬ז‪ .‬של בר נצטרך לעבור אחד אחד וזה החיסרון!‬

HEAD ʯʥ ʹ ʠʸ ʤʺ ʡʥ ʺʫ ʤʮʩ ʹ ʸʡ

VAL1 | next

VAL2 | next

VAL3 next

NULL

:‫כל תא ברשימה המקושרת נראה כך‬ typedef struct{ int val; cell* next; }cell; :‫נראה איך נוצרת הרשימה המתוארת לעיל‬

: ‫ניתן להגדיל את הרשימה בצורה דינמית ע"י הגדרת תא חדש‬ new_cell = (cell *)malloc(sizeof(cell));

‫מה ניתן לעשות עם רשימה‪:‬‬ ‫–להוסיף ולמחוק אברים‬ ‫–לעדכן שדות‬

‫רוצים ‪ 6‬דונם‪:‬‬ ‫‪ ):‬דונם ‪realloc( 6‬‬ ‫) דונם ‪1. 120=malloc( 6‬‬ ‫מעתיקה את הכל למקום חדש ‪2.‬‬ ‫;)‪3. free(542‬‬ ‫סוגים שונים של רשימה מקושרת‪:‬‬ ‫‪-1‬תור – ‪Queue‬‬ ‫)‪(FIFO – First In First Out‬‬ ‫הכנסה‪ :‬מהקצה של ‪TAIL‬‬ ‫הוצאה‪ :‬מהקצה של ‪HEAD‬‬

‫‪ʭʩ‬‬ ‫‪ʱʩ‬‬ ‫‪ʰʫʮ‬‬ ‫‪ʭʩ‬‬ ‫‪ʸ ʡʠ‬‬

‫‪head‬‬

‫‪3‬‬

‫‪4‬‬

‫‪HE‬‬ ‫‪AD‬‬

‫‪2‬‬

‫‪NULL‬‬

‫מי שמגיע נכנס אחרון – ואראשון יוצא ראשון‬ ‫מחסנית ‪STACK‬‬ ‫)‪)LIFO – Last in first out‬‬

‫‪head‬‬ ‫‪HEAD‬‬ ‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪ʤʱ ʰʫʤ‬‬ ‫‪ʤʠʶʥ‬‬ ‫‪ʤ‬‬

‫‪NULL‬‬

‫;‪temp=head->next‬‬ ‫;)‪free(head‬‬ ‫;‪head=temp‬‬

‫רשימה מקושרת כללית‪:‬‬ ‫הכנסה\הוצאה מכל חלקי הרשימה ולא רק מהסוף או ההתחלה‪.‬‬ ‫‪(1‬יוצר תא חדש‬ ‫;))‪cell* new_cell=(cell *)=malloc(sizeof(cell‬‬ ‫;‪new_cell.val = 10‬‬ ‫‪(2‬מצא את האבר ברשימה שאחריו יוכנס האיבר החדש‪.‬‬ ‫‪(3‬עדכן את המצביעים‪:‬‬

‫‪ NEXT‬של האיבר שמצא יצביע לאיבר החדש‬ ‫‪ NEXT‬של החדש יהיה ה ‪ NEXT‬של האיבר שמצא‬

‫‪HEAD‬‬ ‫‪3‬‬

‫‪4‬‬

‫‪2‬‬

‫‪1‬‬

‫‪NULL‬‬

‫‪(4‬רשימה מקושרת דו כיוונית‬

‫{‪typedef struct‬‬ ‫;‪int val‬‬ ‫;‪cell*next‬‬ ‫;‪cell*prev‬‬ ‫;‪}cell‬‬

‫‪HEAD‬‬ ‫‪4‬‬

‫‪3‬‬

‫‪NULL‬‬

‫‪(5‬רשימה מעגלית – ‪ HEAD‬נבחר באופן שרירותי‬

‫‪2‬‬

‫‪1‬‬

HEAD 1

2

3

4

Related Documents

Lecture 4
June 2020 7
Lecture 4
August 2019 24
Lecture 4
May 2020 14
Lecture 4
May 2020 5
Lecture 4
April 2020 18
Lecture+4
November 2019 19

More Documents from ""

Lecture 2
April 2020 10
Questions 4
April 2020 9
Lecture 4
April 2020 18
Lecture 3
April 2020 12
Lecture 5
April 2020 19
9-borehole Seismic_lw.pdf
December 2019 8