בספרייה הסטנדרטית של Rust יש את רוב המבנים (Vec, VecDeque, HashMap, BTreeMap, BinaryHeap), ול־borrow checker יש דעות על אלה שאתם כותבים בעצמכם: רשימה מקושרת חד־כיוונית היא Option<Box<Node>>, ועץ עם קישורים להורה צריך Rc, RefCell ו־Weak. במסלול הזה אתם בונים כל מבנה ב־Rust, ואז ממיינים, משתמשים ברקורסיה ומחפשים בגרפים בעזרתם, ומסיימים בשאלות ראיונות שנבדקות. בחינם, בדפדפן, עם תעודה ברוב הקורסים.
כל שלב הוא אוסף של קורסים קיימים ב־Coddy, וכל כפתור התחלה פותח אותם ב־Rust. שלושת הקורסים שעדיין לא נלמדים ב־Rust מופיעים אחרי השלבים.
1
שלב 1
סדרת מבני הנתונים, חלק ראשון
להתחיל את השלב הזהלהתחילמחסנית, תור, עץ בינארי, טבלת גיבוב ורשימה מקושרת, כל אחד נבנה מאפס ב־Rust ואז משמש לפתרון בעיות. ב־Rust צומת שמחזיק בבעלות את הבא הוא Option<Box<Node>>, ולכן כאן בעלות מתחילה להרגיש טבעית, ובסוף השלב אתם יודעים מה Vec, VecDeque ו־HashMap עושים בשבילכם.להתחיל
להתחיל את השלב הזהלהתחילרשימה מקושרת דו־כיוונית, ערימות ותורי עדיפויות, עצי trie, גרפים ועץ AVL המאזן את עצמו. הרשימה המקושרת הדו־כיוונית היא הקשה ב־Rust, כי לכל צומת מובילים שני קישורים; אחרי השלב הזה BinaryHeap היא ערימה שכתבתם, מקסימום קודם כברירת מחדל, ו־BTreeMap הוא עץ מסודר שאתם מבינים.להתחיל
להתחיל את השלב הזהלהתחילמיון בועות, בחירה, הכנסה, מיזוג, מהיר, ערימה, מנייה ובסיס, נכתבים ב־Rust ונצפים בוויזואלייזר. sort יציב ו־sort_unstable בדרך כלל מהיר יותר; אחרי השלב הזה תוכלו להסביר מה עולה יציבות ומתי לוותר עליה.להתחיל
להתחיל את השלב הזהלהתחילאתגרי רקורסיה ב־Rust. טיפוס רקורסיבי צריך Box לפני שהקומפיילר ייתן לו גודל, ופונקציה רקורסיבית עליו מתאימה כל מקרה, Some או None, כמו שתנאי עצירה ומקרה רקורסיבי מתפצלים. Rust לא מבטיחה אופטימיזציה לקריאות זנב, כך שרקורסיה עמוקה מספיק גולשת מהמחסנית ומפילה את התוכנית. תכנות דינמי ומניפולציית ביטים מופיעים אחרי השלבים, כי הם נלמדים ב־Python וב־C++.להתחילדף ייעודי15 שיעורים15 אתגרים
5
שלב 5
אלגוריתמים על גרפים
להתחיל את השלב הזהלהתחילחיפוש לרוחב ולעומק, Dijkstra, Bellman-Ford, מיון טופולוגי, Kruskal ו־Prim ב־Rust, על הגרף שבניתם בשלב השני. תור העדיפויות של Dijkstra ב־Rust הוא BinaryHeap של Reverse((distance, node)): הערימה משלב שתיים, שהפכה לערימת מינימום.להתחיל
להתחיל את השלב הזהלהתחילעשר חבילות אתגרי ראיונות ושני מאגרי בעיות תכנות ב־Rust, שנבדקים במקרי בדיקה: בעיות לא מוכרות, שנפתרות בלי מדריך ועוברות את ה־borrow checker, שזו הוכחה מסוג משלה.להתחיל
התחרו בטבלאות דירוג עולמיות, הזמינו חברים כדי לקבל פרסים וחגגו את ההצלחות אחד של השני. תכנות עם חברים זה יותר כיף!
ליגת המתמודדים7 המובילים עולים
1
Alex7+ Days
2840
2
Jordan7+ Days
2650
3
Sam7+ Days
2420
4
Casey
2180
5
Morgan7+ Days
1950
אזור העלייה
כל הדרכים ללמוד
לקרוא, להאזין, לבחון את עצמכם, לשאול את ה-AI או לחפש כל דבר שכבר למדתם. כל שיעור פוגש אתכם בדיוק איפה שאתם.
מבוא למשתנים
אודיו
משתנה הוא מיכל עם שם ששומר ערך שאפשר להתייחס אליו בהמשך התוכנית.
ב-Python יוצרים משתנה על ידי כתיבת השם, סימן שווה, ואז הערך שרוצים לשמור.
הערך יכול להשתנות עם הזמן. השמה מחדש לאותו שם פשוט מפנה אותו לערך חדש.
1xשרה
לקבל תעודה
קבלו תעודה על כל קורס שתסיימו. הוסיפו אותן לפרופיל ה-LinkedIn ולקורות החיים כדי להציג למעסיקים את כישורי התכנות שלכם.
תעודת סיום
תעודה זו מאשרת כיישראל ישראליהשלים/ה בהצלחה את
יסודות Python
תאריךינו׳ 2026
להוסיף ל-LinkedIn
למה ללמוד DSA ב־Rust ב־Coddy
בעלות, במקום שבו היא הכי קשה. רשימות מקושרות ועצים הם המקום שבו הכללים של Rust נושכים קודם: לכל ערך יש בעלים אחד, והמבנים האלה רוצים צמתים שמצביעים זה על זה. לכתוב אותם זה המקום שבו Box, Option::take, Rc<RefCell<T>> ו־Weak מפסיקים להיות תחביר והופכים להחלטות, ולכן מדריך מוכר לשפה נקרא Learning Rust With Entirely Too Many Linked Lists.
אוספים עם עלויות ברורות. Vec<T> הוא המחסנית שלכם, VecDeque<T> הוא מאגר מעגלי והתור שלכם, HashMap היא טבלת גיבוב עם זרע שמגן מפני התנגשויות מכוונות, BTreeMap הוא B-tree מסודר ו־BinaryHeap<T> היא ערימת מקסימום. בנו את המבנים פעם אחת ותדעו איזה מהם בעיה צריכה, ולמה Dijkstra עוטף את הרשומות שלו ב־Reverse.
כמעט כל המסלול ב־Rust. כל מבנה נתונים, מיון, אלגוריתם גרפים, אתגר רקורסיה וחבילת ראיונות נלמדים ב־Rust. שלושה נלמדים במקום אחר ומופיעים אחרי השלבים עם קישור לכל אחד: תכנות דינמי וסדרת הראיונות של Python ב־Python, ומניפולציית ביטים ב־C++. מניפולציית ביטים עוברת עם שינוי כתיב אחד: Rust כותבת NOT בתור !x, וסופרת ביטים דולקים עם count_ones().
נבדק כמו בראיון. כל שיעור מסתיים באתגר Rust שנבדק במקרי בדיקה, וכשאחד נכשל או לא מתקמפל, Bugsy קוראת את הקוד שלכם ומכוונת אתכם לתיקון בלי לתת את התשובה. תעודה חינמית ברוב הקורסים, וכל אחת ניתנת לאימות בכתובת משלה.
שאלות נפוצות על DSA ב־Rust
האם Rust טובה למבני נתונים ואלגוריתמים?
לשימוש בהם, מאוד: האוספים הסטנדרטיים מהירים ומתועדים היטב, sort יציב, ו־Rust בטוחה שוללת מצביעים תלויים ומרוצי נתונים בזמן הקומפילציה, בלי איסוף זבל. לכתיבת מבנים מבוססי מצביעים, היא קשה יותר מ־C או מ־Java, כי הבעלות שוללת קישורים משותפים וניתנים לשינוי אלא אם בוחרים ב־Rc וב־RefCell, ורשימה מקושרת דו־כיוונית או עץ עם מצביעים להורה עשויים בדיוק מאלה. הקושי הזה הוא גם השיעור: ברגע שאתם יכולים לכתוב אותם ב־Rust, אתם יודעים בדיוק למי שייך מה.
איזה אוסף של Rust מתאים לאיזה מבנה נתונים?
Vec<T> הוא מערך דינמי והמחסנית שלכם, VecDeque<T> הוא מאגר מעגלי והתור שלכם, HashMap ו־HashSet הם טבלאות גיבוב (SipHash כברירת מחדל, שעמיד בפני התנגשויות מכוונות במחיר מסוים של מהירות), BTreeMap ו־BTreeSet הם עצי B מסודרים, BinaryHeap<T> היא ערימת מקסימום, ו־LinkedList<T> היא רשימה מקושרת דו־כיוונית שרק לעתים רחוקות תעדיפו על פני Vec או VecDeque. אין טיפוס של trie או גרף; אותם אתם בונים.
למה כל כך קשה לכתוב רשימה מקושרת ב־Rust?
כי לכל ערך יש בדיוק בעלים אחד. רשימה מקושרת חד־כיוונית מתאימה לכלל הזה: כל צומת מחזיק בבעלות את הבא דרך Option<Box<Node>>. רשימה מקושרת דו־כיוונית או עץ עם קישורים להורה לא מתאימים, כי לכל צומת מובילים שני מצביעים, ולכן פונים ל־Rc<RefCell<Node>> עם Weak לקישורים האחוריים, או שומרים את הצמתים ב־Vec ומקשרים ביניהם לפי אינדקס. Learning Rust With Entirely Too Many Linked Lists קיים כי כל כך הרבה אנשים נתקעים בדיוק כאן.
איך מקבלים ערימת מינימום ב־Rust?
BinaryHeap<T> היא ערימת מקסימום, אז עטפו כל פריט ב־std::cmp::Reverse: דחפו Reverse(x) וה־x הקטן ביותר יוצא ראשון. ל־Dijkstra, דחפו Reverse((distance, node)), והזוג מושווה קודם לפי המרחק. אחרי שכתבתם ערימה בעצמכם בשלב השני, להפוך את הסדר שלה זה מובן מאליו.
אילו קורסים במסלול הזה לא נלמדים ב־Rust?
שלושה: תכנות דינמי וסדרת הראיונות של Python, שנלמדים ב־Python, ומניפולציית ביטים, שנלמדת ב־C++. הם מופיעים אחרי השלבים, כל אחד עם קישור שפותח אותו בשפה שלו. טבלת memo ב־Rust היא Vec או HashMap, וגלישה של מספר שלם גורמת ל־panic בבניית debug, כך שטריק ביטים שמסתמך על גלישה מעגלית כותב זאת במפורש עם wrapping_add או wrapping_mul.
האם צריך לדעת Rust לפני שמתחילים את המסלול?
בעלות, השאלה (borrowing), structs, enums ו־Option, לכל הפחות; Box ו־traits עוזרים. אם הם חדשים לכם, קורס Rust של Coddy מביא אתכם לשם קודם, בחינם, והמסלול הזה ממשיך מהמקום שבו הוא מסתיים.
האם מקבלים תעודה על מסלול מבני נתונים ואלגוריתמים?
כן. סיימו כל שלב וקבלו תעודה אחת בחינם על כל מסלול מבני נתונים ואלגוריתמים. היא מפרטת כל קורס שסיימתם בדרך, ומקשרת לתעודה של כל קורס, כך שכל אחד יכול לאמת כל מיומנות שמופיעה בה. אפשר להוסיף אותה לפרופיל ה-LinkedIn. זו תעודת סיום מ-Coddy, לא הסמכה מוכרת.
מסלולי למידה נוספים
אותם קורסים, מסודרים לתפקיד אחר. ההתקדמות עוברת איתכם: קורס שסיימתם במסלול אחד נספר בכל מסלול שכולל אותו.