لماذا أتعلم هياكل البيانات بلغة C؟
لأن لغة C لا تخفي شيئاً. فمع غياب القائمة والخريطة والطابور المدمجة، تنفّذ كل هيكل من كتل ذاكرة ومؤشرات، وهذا بالضبط ما هو عليه الهيكل. وبعد ذلك يصبح HashMap في Java وdict في Python الأفكار نفسها وقد أُنجزت عنك إدارة الذاكرة، وتستطيع أن تقدّر تكلفتها.
ما الذي يجب أن أعرفه قبل تعلم هياكل البيانات بلغة C؟
المؤشرات، والبُنى (structs)، والمصفوفات، وmalloc وfree. والمؤشرات قبل كل شيء: القائمة المترابطة سلسلة من حقول struct node *next، والشجرة الثنائية فيها حقلان منها في كل عقدة. إن كانت المؤشرات ما تزال غير واضحة لك، فدورة C من Coddy تغطيها أولاً مجاناً.
كيف تنفّذ جدول تجزئة بلغة C؟
بمصفوفة من الدلاء، ودالة تجزئة تحوّل المفتاح إلى فهرس، وقاعدة لمفتاحين يقعان في الدلو نفسه: عادةً قائمة مترابطة لكل دلو (التسلسل) أو السَّبر بحثاً عن الخانة الفارغة التالية. وحين يمتلئ الجدول إلى ما بعد معامل تحميل محدد، تحجز مصفوفة أكبر وتعيد إدراج كل شيء. ودورة جدول التجزئة في الخطوة الأولى تبني واحداً من الصفر.
هل C لغة جيدة لمقابلات البرمجة؟
قلّة من المرشحين يجرون مقابلاتهم بلغة C خارج وظائف الأنظمة المضمّنة وبرمجة الأنظمة، لأن كتابة جدول تجزئة من الصفر في منتصف المقابلة تستهلك وقتاً توفّره عليك اللغات الأخرى. لكن المعرفة تنتقل كاملة، وC++ على بعد خطوة صغيرة: الصياغة نفسها، مضافاً إليها STL. والطريق الشائع أن تتعلم الهياكل بلغة C، ثم تحل حزم المقابلات بلغة C++ أو Java أو Python، وهذا المسار يتيحها كلها.
ما الدورات في هذا المسار التي لا تُدرَّس بلغة C؟
ثلاث دورات: البرمجة الديناميكية وسلسلة مقابلات Python تُدرَّسان بلغة Python، وعمليات البتات بلغة C++. وهي مدرجة بعد الخطوات، ولكل منها رابط يفتحها بلغتها. وعمليات البتات هي أسهل الثلاث متابعةً لمن يعرف C: فقد احتفظت C++ بالمعاملات & و| و^ و~ و<< و>> من C كما هي تماماً.
هل أتعلم هياكل البيانات بلغة C أم C++؟
لغة C لتفهم الهياكل، ولغة C++ لتستخدمها. في C تبني كل شيء، ولهذا تدرّس برامج جامعية كثيرة المادة بها؛ وفي C++ تبني كل هيكل مرة واحدة ثم تلجأ إلى STL، ولهذا يستخدمها مبرمجو المسابقات. والبدء بلغة C ثم الانتقال إلى C++ لا يُفقدك شيئاً.