Menu
Coddy logo textTech

תרגול מס׳ 4

שיעור 13 מתוך 14 בקורס רשימה מקושרת דו-כיוונית – סדרת מבני נתונים מס׳ 6 של Coddy.

challenge icon

אתגר

קל

כתבו פונקציה moveToFront שמקבלת מערך של מספרים שלמים arr (הערכים של רשימה מקושרת דו־כיוונית) ומספר שלם value, מוצאת את ההופעה הראשונה של value ומעבירה את הצומת הזה לתחילת הרשימה. החזירו את המערך שהתקבל.

אם value לא נמצא ברשימה, החזירו את המערך ללא שינוי.

השתמשו ברשימה מקושרת דו־כיוונית כדי לפתור את הבעיה!

חובה להשתמש במחלקה DoublyLinkedList (המסופקת בקובץ doublylinkedlist.<ext> יחד עם node.<ext>) — אל תשתמשו בפעולות מובנות בשפה כמו reverse, slicing או sort של מערכים, או בפעולות של רשימות מהספרייה הסטנדרטית, כדי לחשב את התוצאה.

נסו בעצמכם

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "solution.h"

int main() {
    char line1[8192];
    char line2[64];
    if (!fgets(line1, sizeof(line1), stdin)) line1[0] = '\0';
    if (!fgets(line2, sizeof(line2), stdin)) line2[0] = '\0';
    int arr[4096];
    int len = 0;
    char* tok = strtok(line1, " \t\r\n");
    while (tok) { arr[len++] = atoi(tok); tok = strtok(NULL, " \t\r\n"); }
    int n = atoi(line2);
    int rs = 0;
    int* r = moveToFront(arr, len, n, &rs);
    for (int idx = 0; idx < rs; idx++) {
        if (idx > 0) printf(" ");
        printf("%d", r[idx]);
    }
    printf("\n");
    return 0;
}

כל השיעורים ביחידה רשימה מקושרת דו-כיוונית – סדרת מבני נתונים מס׳ 6

תרגלו בעצמכם: קומפיילר C אונליין