مادة CS 212، هياكل البيانات (Data Structures) بجامعة الاميرة نورة بنت عبدالرحمن هي المادة اللي تفصل بين طالبة “تكتب كود” وطالبة “تفكر مثل المبرمجين”. في CS 110 تعلمتي المتغيرات والحلقات والشروط، وفي CS 111 تعلمتي البرمجة كائنية التوجه والكلاسات والوراثة. الحين في CS 212 راح تتعلمين كيف تنظمين البيانات بطريقة ذكية تخلي برامجك اسرع واكفأ. هذي المادة هي الاساس اللي تنبني عليه كل مواد التخصص المتقدمة بدون استثناء.
كثير من الطالبات يعتبرون CS 212 من اصعب مواد الخطة. الموضوع مو ان المادة مستحيلة، بس انها تحتاج تغيير في طريقة التفكير. بدل ما تركزين على “ايش الكود اللي يشتغل”، تبدين تسالين “ايش الكود الاكفأ”. لو فهمتي هذي النقطة من البداية، المادة راح تصير ممتعة وتفتح لك ابواب كثيرة.
📋 ملخص سريع
- رمز المادة: CS 212 / عال 212، هياكل البيانات (Data Structures)
- الساعات المعتمدة: 3 ساعات تقريبا
- المتطلب السابق: CS 111 (برمجة 2 / جافا 2)
- اللغة المستخدمة: Java
- المواضيع الاساسية: المصفوفات الديناميكية، القوائم المتصلة، المكدسات، الطوابير، الاشجار الثنائية، الرسوم البيانية، خوارزميات الترتيب والبحث، تحليل التعقيد (Big-O)
- يقود الى: مواد الخوارزميات، قواعد البيانات، هندسة البرمجيات، مشروع التخرج
ليش هياكل البيانات مادة مفصلية في تخصص الحاسب
CS 212 مو مادة تعدينها وتنسينها. كل شيء بعدها مبني عليها مباشرة:
- مادة الخوارزميات: تفترض انك تعرفين هياكل البيانات الاساسية. كيف تحللين خوارزمية بدون ما تفهمين الشجرة او القائمة اللي تشتغل عليها؟
- قواعد البيانات: الفهارس (Indexes) مبنية على اشجار B-Tree، والاستعلامات تعتمد على فهمك لتعقيد العمليات
- المقابلات الوظيفية: شركات التقنية مثل Google و Microsoft و Amazon تبني الجزء الاكبر من اسئلة المقابلات حول هياكل البيانات. هذي المادة هي تذكرتك
- مشروع التخرج: اي مشروع برمجي حقيقي يحتاج انك تختارين هيكل البيانات المناسب. اللي ما تعرف الفرق بين ArrayList و LinkedList راح تكتب كود بطيء بدون ما تعرف ليش
- هندسة البرمجيات: تصميم الانظمة يعتمد على فهمك لكيف البيانات تتخزن وتتنظم
ℹ️ الفرق بين CS 212 ومواد البرمجة السابقة
في CS 110 و CS 111 تعلمتي كيف تكتبين كود يشتغل. في CS 212 تتعلمين كيف تكتبين كود ذكي: تختارين هيكل البيانات المناسب، تحللين التعقيد، وتكتبين حلول تشتغل بكفاءة حتى مع بيانات ضخمة.
1. المصفوفات الديناميكية (ArrayList)
في CS 110 تعلمتي المصفوفات العادية (Arrays). مشكلتها ان حجمها ثابت: لو عرفتي مصفوفة بحجم 10 وتبين تضيفين العنصر رقم 11، ما تقدرين. هنا يجي دور ArrayList.
الفرق بين Array و ArrayList
المصفوفة العادية مثل شقة بعدد غرف محدد: لو احتجتي غرفة زيادة، لازم تنتقلين لشقة جديدة. ArrayList مثل فندق يقدر يضيف ادوار جديدة تلقائيا كل ما احتجتي.
import java.util.ArrayList;
// ArrayList تكبر تلقائيا
ArrayList<String> students = new ArrayList<>();
students.add("نورة"); // اضافة عنصر
students.add("سارة");
students.add("لمى");
// الوصول بالفهرس
System.out.println(students.get(0)); // نورة
// حذف عنصر
students.remove("سارة");
// الحجم الحالي
System.out.println(students.size()); // 2
متى تستخدمين كل واحدة؟
- Array: لما تعرفين الحجم مسبقا وما يتغير (مثل ايام الاسبوع)
- ArrayList: لما البيانات تتغير، تضيفين وتحذفين باستمرار (مثل قائمة الطالبات المسجلات في مادة)
💡 نقطة مهمة عن ArrayList
ArrayList داخليا تستخدم مصفوفة عادية. لما المصفوفة الداخلية تمتلئ، ArrayList تنشئ مصفوفة اكبر وتنسخ كل العناصر. هذا يعني ان الاضافة في النهاية غالبا O(1) لكن احيانا O(n) لما تحتاج تنسخ. هذا المفهوم اسمه amortized O(1) وممكن يجي في الاختبار.
2. القوائم المتصلة (Linked Lists)
القوائم المتصلة اول هيكل بيانات “حقيقي” تتعاملين معه في CS 212. الانتقال من التفكير بالمصفوفات الى التفكير بالعقد (Nodes) والمؤشرات يحتاج وقت، فخذي راحتك وارسمي كل عملية على ورقة.
تشبيه عملي
تخيلي قطار فيه عربات. كل عربة (Node) تحمل ركاب (البيانات) وعندها وصلة للعربة اللي بعدها (المؤشر). لو تبين تضيفين عربة جديدة في اي مكان، تفكين الوصلة وتربطين العربة الجديدة. ما تحتاجين تنقلين كل العربات مثل ما تسوين في المصفوفة.
القائمة الاحادية (Singly Linked List)
كل عقدة فيها: بيانات + مؤشر للعقدة التالية.
class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
}
الاضافة في البداية — O(1)
class LinkedList {
Node head;
public void addFirst(int data) {
Node newNode = new Node(data);
newNode.next = head; // الجديدة تشير للقديمة
head = newNode; // الجديدة تصير الاولى
}
}
الاضافة في النهاية — O(n)
public void addLast(int data) {
Node newNode = new Node(data);
if (head == null) { head = newNode; return; }
Node current = head;
while (current.next != null)
current = current.next;
current.next = newNode;
}
الحذف من البداية — O(1)
public void removeFirst() {
if (head == null) return;
head = head.next; // الراس يصير العنصر الثاني
}
القائمة المزدوجة (Doubly Linked List)
الفرق عن الاحادية ان كل عقدة فيها مؤشرين: واحد للتالي وواحد للسابق. هذا يخليك تمشين في الاتجاهين.
class DNode {
int data;
DNode next;
DNode prev; // مؤشر للعقدة السابقة
public DNode(int data) {
this.data = data;
}
}
مقارنة Array مقابل LinkedList
| العملية | Array | Linked List |
|---|---|---|
| الوصول بالفهرس | O(1) | O(n) |
| اضافة في البداية | O(n) | O(1) |
| اضافة في النهاية | O(1)* | O(n) |
| حذف من البداية | O(n) | O(1) |
| البحث عن عنصر | O(n) | O(n) |
*مع ArrayList، الاضافة في النهاية O(1) amortized.
⚠️ خطا شائع في Linked List
لما تحذفين عقدة من النص، لازم تربطين العقدة السابقة بالعقدة التالية قبل ما تفكين الروابط. لو نسيتي هذي الخطوة، تضيعين باقي القائمة. ارسمي العملية على ورقة قبل ما تكتبين الكود.
واجبات القوائم المتصلة من اكثر الواجبات اللي تسبب احباط. لو حسيتي ان الموضوع معقد، هذا طبيعي وكلنا مرينا بنفس الاحساس.
واجب Linked List صعب عليك؟
عمليات الاضافة والحذف في القوائم المتصلة من اكثر الواجبات اللي تطلب فيها الطالبات مساعدة. ارسلي لنا السؤال على واتساب ونحله لك مع شرح كامل خطوة بخطوة.
ارسلي واجبك على واتساب3. المكدسات (Stacks)
تخيلي كومة صحون في المطبخ: اخر صحن تحطينه فوق هو اول صحن تاخذينه. هذا بالضبط مبدا LIFO (Last In, First Out) اللي يشتغل عليه المكدس.
العمليات الاساسية
- push: اضافة عنصر فوق المكدس
- pop: ازالة العنصر اللي فوق
- peek: تشوفين العنصر اللي فوق بدون ما تشيلينه
- isEmpty: هل المكدس فاضي؟
class Stack {
private int[] arr;
private int top = -1;
public Stack(int capacity) {
arr = new int[capacity];
}
public void push(int val) { arr[++top] = val; }
public int pop() { return arr[top--]; }
public int peek() { return arr[top]; }
public boolean isEmpty() { return top == -1; }
}
تطبيق عملي: التحقق من توازن الاقواس
هذا من اشهر تطبيقات المكدس ويجي في الاختبارات كثير:
public static boolean isBalanced(String expr) {
Stack stack = new Stack(expr.length());
for (char ch : expr.toCharArray()) {
if (ch == '(' || ch == '{' || ch == '[')
stack.push(ch);
else if (ch == ')' || ch == '}' || ch == ']') {
if (stack.isEmpty()) return false;
char top = (char) stack.pop();
if (ch == ')' && top != '(') return false;
if (ch == '}' && top != '{') return false;
if (ch == ']' && top != '[') return false;
}
}
return stack.isEmpty();
}
استخدامات المكدس في الحياة العملية
- Undo/Redo: كل عملية تسوينها تنحط في Stack، ولما تضغطين Ctrl+Z تطلع اخر عملية
- توازن الاقواس: المترجم يستخدم Stack يتاكد ان كل قوس فتح يقابله قوس اغلاق
- Call Stack: لما دالة تستدعي دالة ثانية، جافا تحط كل استدعاء في Stack
- تحويل Infix الى Postfix: تحويل التعابير الرياضية من الصيغة العادية الى صيغة بولندية
4. الطوابير (Queues)
تخيلي طابور البنك: اول وحدة توصل هي اول وحدة تنخدم. هذا مبدا FIFO (First In, First Out).
العمليات الاساسية
- enqueue: اضافة عنصر في اخر الطابور
- dequeue: ازالة العنصر من اول الطابور
- peek/front: تشوفين اول عنصر بدون ما تشيلينه
class Queue {
private int[] arr;
private int front = 0, rear = -1;
private int size = 0, capacity;
public Queue(int cap) {
capacity = cap;
arr = new int[cap];
}
public void enqueue(int val) {
rear = (rear + 1) % capacity;
arr[rear] = val;
size++;
}
public int dequeue() {
int val = arr[front];
front = (front + 1) % capacity;
size--;
return val;
}
public boolean isEmpty() { return size == 0; }
}
ℹ️ ليش % (النسبة) في الطابور؟
نستخدم % capacity عشان لما نوصل اخر المصفوفة نرجع للبداية. بدون هذا، لو سوينا dequeue عدة مرات، المساحة الاولى تضيع ولو المصفوفة فيها مكان ما نقدر نستخدمه. هذا اسمه الطابور الدائري (Circular Queue) وممكن يجيك في الاختبار.
استخدامات الطابور
- نظام الطباعة: الملفات تنطبع بترتيب وصولها
- نظام تسجيل المواد: الطالبات ينتظرون بالترتيب
- BFS في الرسوم البيانية: خوارزمية البحث بالعرض تستخدم Queue
- معالجة الطلبات في السيرفرات: كل طلب يدخل الطابور وينخدم بالترتيب
5. الاشجار (Trees)
الاشجار من اصعب المواضيع في CS 212 وتاخذ وقت كبير من المنهج. لو حسيتي بالضياع اول ما تبدين، هذا طبيعي جدا. كل طالبة مرت بنفس الاحساس. المفتاح انك ترسمين الشجرة على ورقة مع كل عملية.
الشجرة الثنائية (Binary Tree)
كل عقدة فيها: بيانات + مؤشر يسار + مؤشر يمين. يعني كل عقدة عندها طفلين كحد اقصى.
class TreeNode {
int data;
TreeNode left, right;
public TreeNode(int data) {
this.data = data;
}
}
شجرة البحث الثنائية (BST)
في BST عندك قاعدة واحدة تحكم كل شيء: العناصر الاصغر على اليسار، والعناصر الاكبر على اليمين. هذا يخلي البحث O(log n) في الحالة المثالية بدل O(n).
اضافة عنصر في BST
public TreeNode insert(TreeNode root, int val) {
if (root == null) return new TreeNode(val);
if (val < root.data)
root.left = insert(root.left, val);
else
root.right = insert(root.right, val);
return root;
}
البحث عن عنصر في BST
public boolean search(TreeNode root, int target) {
if (root == null) return false;
if (root.data == target) return true;
if (target < root.data)
return search(root.left, target);
else
return search(root.right, target);
}
طرق التمرير (Traversals)
هذي من اكثر المواضيع اللي تجي في الاختبار. لازم تحفظينها وتقدرين تطبقينها على اي شجرة:
// Inorder: يسار ← جذر ← يمين (يطلع مرتب!)
void inorder(TreeNode node) {
if (node == null) return;
inorder(node.left);
System.out.print(node.data + " ");
inorder(node.right);
}
// Preorder: جذر ← يسار ← يمين
void preorder(TreeNode node) {
if (node == null) return;
System.out.print(node.data + " ");
preorder(node.left);
preorder(node.right);
}
// Postorder: يسار ← يمين ← جذر
void postorder(TreeNode node) {
if (node == null) return;
postorder(node.left);
postorder(node.right);
System.out.print(node.data + " ");
}
💡 حيلة لتذكر انواع التمرير
اسم التمرير يقول لك متى تزورين الجذر:
- Preorder = الجذر اول شيء
- Inorder = الجذر في النص
- Postorder = الجذر اخر شيء
Inorder على BST دائما يعطيك العناصر مرتبة تصاعديا. هذي معلومة تجي في الاختبار كثير.
الاشجار تحتاج وقت. لو ذاكرتي وما استوعبتي من اول مرة، اعيدي وارسمي. لو الواجب محيرك، لا تترددين تطلبين مساعدة.
واجب الاشجار محيرك؟
الاشجار من اصعب مواضيع CS 212 وكثير من طالبات جامعة الاميرة نورة يطلبون مساعدتنا فيها. ارسلي لنا واجبك على واتساب ونشرحه لك خطوة بخطوة مع رسومات توضيحية.
ارسلي واجبك على واتساب6. الرسوم البيانية (Graphs)
الرسم البياني (Graph) هو هيكل بيانات يتكون من عقد (Vertices) و اضلاع (Edges) تربط بينها. تخيلي خريطة مدن والطرق اللي بينها: كل مدينة عقدة وكل طريق ضلع.
تمثيل الرسوم البيانية
فيه طريقتين رئيسيتين:
قائمة التجاور (Adjacency List): كل عقدة عندها قائمة بالعقد المتصلة فيها. توفر مساحة لو الرسم فيه اضلاع قليلة.
// تمثيل بقائمة التجاور
ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
for (int i = 0; i < 5; i++)
graph.add(new ArrayList<>());
// اضافة ضلع بين العقدة 0 والعقدة 1
graph.get(0).add(1);
graph.get(1).add(0); // لو الرسم غير موجه
مصفوفة التجاور (Adjacency Matrix): جدول ثنائي الابعاد، matrix[i][j] = 1 يعني فيه ضلع بين i و j.
// تمثيل بمصفوفة التجاور
int[][] matrix = new int[5][5];
matrix[0][1] = 1; // ضلع بين 0 و 1
matrix[1][0] = 1; // غير موجه
BFS و DFS
- BFS (البحث بالعرض): يستكشف كل الجيران اول، ثم جيران الجيران. يستخدم Queue. مثل ما تنتشر موجة في بركة ماء
- DFS (البحث بالعمق): يروح لاعمق نقطة اول، ثم يرجع ويستكشف فروع ثانية. يستخدم Stack (او التكرار). مثل ما تستكشفين متاهة وتروحين لاخر ممر قبل ما ترجعين
| BFS | DFS | |
|---|---|---|
| هيكل البيانات | Queue | Stack / Recursion |
| الاستكشاف | بالعرض (مستوى بمستوى) | بالعمق (فرع كامل) |
| الاستخدام | ايجاد اقصر مسار | كشف الدورات، التمرير |
7. خوارزميات الترتيب والبحث
هذي الخوارزميات تجي في كل اختبار تقريبا. لازم تعرفين كيف تشتغل وايش تعقيدها.
Bubble Sort — ترتيب الفقاعة
تقارنين كل عنصرين متجاورين وتبدلين مكانهم لو مو بالترتيب. ابسط خوارزمية لكن ابطأها.
public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - i - 1; j++)
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
Selection Sort — ترتيب الاختيار
تلاقين اصغر عنصر وتحطينه في مكانه الصحيح، ثم ثاني اصغر عنصر، وهكذا.
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIdx = i;
for (int j = i + 1; j < n; j++)
if (arr[j] < arr[minIdx]) minIdx = j;
int temp = arr[minIdx];
arr[minIdx] = arr[i];
arr[i] = temp;
}
}
Binary Search — البحث الثنائي
يشتغل بس على مصفوفة مرتبة. كل خطوة ينصف المصفوفة ويقارن مع العنصر الوسط.
public static int binarySearch(int[] arr, int target) {
int low = 0, high = arr.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target) return mid;
else if (arr[mid] < target) low = mid + 1;
else high = mid - 1;
}
return -1; // ما لقيناه
}
جدول مقارنة خوارزميات الترتيب
| الخوارزمية | افضل حالة | متوسط | اسوا حالة | مستقرة؟ |
|---|---|---|---|---|
| Bubble Sort | O(n) | O(n²) | O(n²) | نعم |
| Selection Sort | O(n²) | O(n²) | O(n²) | لا |
| Insertion Sort | O(n) | O(n²) | O(n²) | نعم |
| Merge Sort | O(n log n) | O(n log n) | O(n log n) | نعم |
| Quick Sort | O(n log n) | O(n log n) | O(n²) | لا |
⚠️ نقطة مهمة عن خوارزميات الترتيب
في الاختبار ممكن يعطيك مصفوفة ويطلب منك تطبقين خوارزمية ترتيب خطوة بخطوة وتكتبين حالة المصفوفة بعد كل مرحلة. تمرني على هذا النوع من الاسئلة على ورقة. مو بس تحفظين الكود، فهمي الخطوات.
تحليل التعقيد (Big-O Notation)
Big-O يقيس كيف يتغير اداء الكود مع زيادة حجم البيانات. هذا المفهوم يخترق كل مواضيع CS 212. لازم تفهمينه من البداية.
التعقيدات الاساسية
O(1) — وقت ثابت: العملية تاخذ نفس الوقت بغض النظر عن حجم البيانات. مثل الوصول لعنصر بالفهرس في المصفوفة.
O(n) — خطي: الوقت يزيد بنفس نسبة زيادة البيانات. مثل البحث الخطي في مصفوفة غير مرتبة.
O(log n) — لوغاريتمي: كل خطوة تنصف البيانات. مثل البحث الثنائي (Binary Search). لو عندك مليون عنصر، تحتاجين بس 20 خطوة.
O(n²) — تربيعي: حلقتين متداخلتين. مثل Bubble Sort. لو البيانات 1000 عنصر، العمليات تكون مليون عملية.
جدول مقارنة التعقيدات
| التعقيد | الاسم | مثال | n = 1,000 عملية |
|---|---|---|---|
| O(1) | ثابت | الوصول بالفهرس | 1 |
| O(log n) | لوغاريتمي | البحث الثنائي | ~10 |
| O(n) | خطي | البحث الخطي | 1,000 |
| O(n log n) | خطي لوغاريتمي | Merge Sort | ~10,000 |
| O(n²) | تربيعي | Bubble Sort | 1,000,000 |
💡 طريقة سريعة لتحليل التعقيد
- حلقة من 0 الى n = O(n)
- حلقتين متداخلتين = O(n²)
- حلقة تنصف كل مرة (القسمة على 2) = O(log n)
- حلقتين متتاليتين (مو متداخلتين) = O(n) + O(n) = O(n)
في الاختبار غالبا يعطيك كود ويسالك “ايش التعقيد؟” تمرني على هذا النوع كثير.
اخطاء شائعة في CS 212
الاخطاء الاكثر تكرارا في هياكل البيانات
- NullPointerException في Linked List: تحاولين توصلين لـ
node.nextبدون ما تتاكدين انnodeمو null. دائما تحققي من null اول - نسيان ربط العقد بعد الحذف: لما تحذفين عقدة من النص، لازم تربطين السابقة بالتالية والا تضيع باقي القائمة
- Stack Overflow في التكرار: نسيان حالة الاساس (Base Case) في الدوال التكرارية. الدالة تستدعي نفسها بلا نهاية
- خلط LIFO و FIFO: المكدس LIFO (اخر داخل اول طالع) والطابور FIFO (اول داخل اول طالع). لا تخلطين بينهم
- اضافة عنصر في BST بالمكان الغلط: تذكري القاعدة: الاصغر يسار، الاكبر يمين. دائما
- خلط بين انواع التمرير: Inorder و Preorder و Postorder. احفظيهم بالحيلة: Pre = الجذر اول، In = الجذر نص، Post = الجذر اخر
- عدم التحقق من المصفوفة الفارغة: قبل اي عملية على المصفوفة او القائمة، تاكدي انها مو فارغة
- نسيان ان Binary Search يحتاج مصفوفة مرتبة: لو طبقتيه على مصفوفة غير مرتبة، النتيجة غلط
- حساب التعقيد غلط للحلقات المتداخلة: لو الحلقة الداخلية ما تبدا من 0 كل مرة، التعقيد مو بالضرورة O(n²)
- عدم التفريق بين الحذف بالقيمة والحذف بالموقع: في Linked List، حذف العقدة رقم 3 غير عن حذف العقدة اللي تحمل القيمة 3
خطة مذاكرة المادة اسبوع باسبوع
خطة مذاكرة CS 212 هياكل البيانات
- الاسبوع 1-2: المصفوفات و ArrayList: راجعي اساسيات المصفوفات من CS 110 وتعلمي الفرق بين Array و ArrayList. حلي تمارين اضافة وحذف وبحث
- الاسبوع 3-4: القوائم المتصلة: ابدئي بالقائمة الاحادية، ارسمي كل عملية على ورقة قبل ما تكتبين الكود. بعدها انتقلي للقائمة المزدوجة. اطلعي على دليل هياكل البيانات والخوارزميات لتمارين اضافية
- الاسبوع 5: المكدسات: افهمي LIFO وطبقي امثلة عملية مثل توازن الاقواس و Undo. حلي تمارين التحويل بين Infix و Postfix
- الاسبوع 6: الطوابير: افهمي FIFO والطابور الدائري. قارني بين Stack و Queue وتاكدي انك تعرفين متى تستخدمين كل واحد
- الاسبوع 7-8: اختبار نصفي + مراجعة: راجعي كل المواضيع السابقة. حلي اختبارات سابقة لو لقيتي. ركزي على اسئلة تتبع الكود
- الاسبوع 9-11: الاشجار: ابدئي بالمفاهيم الاساسية، ثم BST، ثم التمرير. ارسمي اشجار كثيرة على ورقة وطبقي الاضافة والبحث يدويا
- الاسبوع 12: الرسوم البيانية: افهمي الفرق بين قائمة التجاور ومصفوفة التجاور. طبقي BFS و DFS على امثلة بسيطة
- الاسبوع 13: خوارزميات الترتيب والبحث: احفظي التعقيدات وتمرني تطبقين كل خوارزمية خطوة بخطوة على ورقة
- الاسبوع 14: تحليل التعقيد Big-O: راجعي كل التعقيدات مع بعض. سوي جدول يلخص تعقيد كل عملية على كل هيكل بيانات
- الاسبوع 15: مراجعة شاملة: حلي اختبارات سابقة كاملة بوقت محدد. ركزي على نقاط ضعفك. راجعي نصائح التحضير للاختبارات لاستراتيجيات اضافية
🔴 نصيحة ذهبية للاختبار
في اسئلة تتبع الكود على هياكل البيانات، ارسمي الهيكل (الشجرة، القائمة، المكدس) وحدثيه مع كل عملية. لا تحاولين تتبعين الكود في راسك. الرسم يوفر وقت ويقلل الاخطاء بشكل كبير.
ربط المادة بمسارك الاكاديمي
CS 212 مو نهاية المشوار، هي البداية الحقيقية. بعد ما تنهينها بنجاح، هذي المواد اللي راح تستفيدين فيها مباشرة من اللي تعلمتيه:
- مادة الخوارزميات: تبني على هياكل البيانات وتعلمك تصممين حلول اذكى. كل خوارزمية تعتمد على هيكل بيانات معين
- قواعد البيانات: الفهارس والاستعلامات مبنية على اشجار وجداول هاش. لو فهمتي BST، راح تفهمين كيف قاعدة البيانات تلاقي البيانات بسرعة
- هندسة البرمجيات: تصميم الانظمة الكبيرة يعتمد على اختيار هياكل البيانات المناسبة
- مشروع التخرج: اي مشروع فيه بيانات يحتاج منك تختارين كيف تخزنينها وتنظمينها. المعرفة اللي تاخذينها في CS 212 تفرق بين مشروع بطيء ومشروع سريع
لو تحسين انك تحتاجين دعم اضافي في البرمجة عموما، اطلعي على خدمة الدروس الخصوصية في البرمجة اللي نقدمها لطالبات جامعة الاميرة نورة.
خلاصة
مادة CS 212 هياكل البيانات بجامعة الاميرة نورة مو مادة سهلة، لكنها مو مستحيلة. المفتاح ثلاث اشياء: ارسمي كل شيء على ورقة، اكتبي الكود بنفسك، و لا تراكمين. كل هيكل بيانات مبني على اللي قبله: لو فهمتي القوائم المتصلة صح، المكدسات والطوابير تصير سهلة لانها بالاساس قوائم متصلة بقيود.
تذكري:
- ArrayList لما تحتاجين حجم ديناميكي ووصول سريع بالفهرس
- Linked List الخيار الافضل لو عندك اضافة وحذف متكرر من البداية
- Stack فكري فيه كل ما واجهتي مشكلة تحتاج LIFO (اخر داخل اول طالع)
- Queue عكس المكدس، FIFO (اول داخل اول طالع) مثل اي نظام انتظار
- BST يتفوق في البحث السريع داخل بيانات مرتبة
- Graph استخدميه لتمثيل العلاقات بين العناصر، مثل الشبكات والخرائط
لو تحسين ان المادة ضاغطتك او عندك واجب والديدلاين قريب، لا تترددين تطلبين مساعدة. مو عيب، بالعكس هذا ذكاء.
تحتاجين مساعدة في CS 212؟
فريقنا متخصص في مساعدة طالبات علوم الحاسب بجامعة الاميرة نورة. سواء واجب، مشروع، او تحضير للاختبار، ارسلي لنا على واتساب وراح نرد عليك خلال ساعة.
تواصلي معنا على واتساب