תרגול מס׳ 3
שיעור 12 מתוך 14 בקורס רשימה מקושרת דו-כיוונית – סדרת מבני נתונים מס׳ 6 של Coddy.
אתגר
קלכתבו פונקציה rotateRight שמקבלת מערך של מספרים שלמים arr (הערכים של רשימה מקושרת כפולה) ומספר שלם k, ומחזירה את המערך מסובב ימינה ב־k מיקומים.
אם k גדול מאורך המערך, רק השארית חשובה (סיבוב ב־n מחזיר אתכם לנקודת ההתחלה). אם הרשימה ריקה, החזירו מערך ריק.
השתמשו ברשימה מקושרת כפולה כדי לפתור את הבעיה!
חובה להשתמש במחלקה DoublyLinkedList (המסופקת בקובץ doublylinkedlist.<ext> יחד עם node.<ext>) — אל תשתמשו בפעולות מובנות בשפה, כמו reverse, חיתוך, 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 = rotateRight(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 אונליין