תרגול מס׳ 4
שיעור 13 מתוך 14 בקורס רשימה מקושרת דו-כיוונית – סדרת מבני נתונים מס׳ 6 של Coddy.
אתגר
קלכתבו פונקציה 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
2פרויקט רשימה מקושרת כפולה
מחלקת Nodeמחלקת DoublyLinkedListתרגלו בעצמכם: קומפיילר C אונליין