السلام عليكم سؤال ما هي data structure وماذا يمكنها فعلة
- yousif_majeed
- 2023-03-10T19:35:46+00:00
- 2023-03-10T19:37:51+00:00
السلام عليكم سؤال ما هي data structure وماذا يمكنها فعلة ؟
مع مثال
وشكراً
Data structure أو هياكل البيانات هو مصطلح يشير إلى طريقة تنظيم وتنسيق وإدارة وتخزين البيانات التي تتيح الوصول والتعديل عليها داخل برنامج معين ، بحيث يتم تخزينها وتنظيمها بشكل مناسب وفعال لتحقيق أهداف محددة وتعتبر من أحد العناصر الأساسية في مجالات علوم الحاسوب وتطوير البرمجيات
تضم هياكل البيانات مجموعة واسعة من التقنيات والأساليب منها :-
- القوائم المرتبة (Ordered Lists): وتشمل القوائم المرتبة على سبيل المثال القوائم الربطية (Linked Lists) والمصفوفات (Arrays) والقوائم الديناميكية (Dynamic Lists) والقوائم المرتبة بطريقة الفرز (Sorted Lists)، وهي تستخدم عادةً لتخزين وإدارة مجموعة من البيانات التي تحتوي على عناصر تحتاج إلى ترتيب معين.
- الأشجار (Trees): وتتكون الأشجار من عقد وفروع تمثل البيانات، ويمكن استخدامها لتمثيل الهيكل التنظيمي للملفات أو البيانات، وكذلك لإنشاء برامج البحث والترتيب والتصفية.
- الجداول (Tables): وتتمثل في جداول البيانات الذي تتكون من صفوف وأعمدة، ويتم استخدامها عادة لتخزين البيانات في قواعد البيانات.
- القوائم (Stacks): وتتمثل في قائمة مكدس (Stack) والتي تتكون من عناصر متراكمة في أعلى بعضها البعض، وتستخدم عادة في بناء البرامج التي تحتاج إلى تتبع العمليات.
ويتم استخدام هياكل البينات في البرمجة لتنظيم وتخزين البيانات بشكل فعال وبالتالي تحسين أداء البرامج وزيادة كفائتها .
يمكنك الإطلاع على هذه المقالات :-
عليكم السلام،
"هياكل البيانات" أو "Data Structures" تعني ببساطة طريقة تنظيم وتخزين البيانات في الحاسوب بحيث تكون متاحة للاستخدام والإدارة. تُستخدم هذه الهياكل لتحسين أداء البرامج، وتوفير الوقت والموارد، وتحليل البيانات بطريقة فعالة.
أنواع هياكل البيانات
سأذكر بعض الأنواع الشهيرة وأمثلة باستخدام جافاسكريبت.
- Arrays: تقوم بتخزين البيانات في صف أو عمود واحد، وهي من أكثر الهياكل استخدامًا في البرمجة.
let arr = [1, 2, 3, 4, 5]; console.log(arr[0]); // يطبع الرقم 1
- Linked Lists: هي هيكل بيانات يتكون من عناصر متصلة ببعضها البعض، وكل عنصر يشير إلى العنصر التالي. يستخدم غالبًا في تطبيقات مثل قوائم التشغيل (playlists) والصفحات الإلكترونية التي تحتوي على روابط متداخلة. هنا مثال بسيط:
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
this.tail = null;
}
addToTail(value) {
const node = new Node(value);
if (!this.head) {
this.head = node;
} else {
this.tail.next = node;
}
this.tail = node;
}
}
const list = new LinkedList();
list.addToTail(1);
list.addToTail(2);
list.addToTail(3);
console.log(list.head.value); // يطبع الرقم 1
- كائن (Object): هي هيكل بيانات يحتوي على مجموعة من الخصائص، حيث يتم تمثيل كل خاصية باستخدام مفتاح (key) وقيمة (value). يمكن الوصول إلى الخصائص باستخدام اسم المفتاح، وهذا يجعل الكائنات هيكل بيانات قوي ومفيد في البرمجة. مثال بسيط:
let person = {name: "Ahmed", age: 30, job: "developer"};
console.log(person.age); // يطبع الرقم 30
- Trees: يتم ترتيب البيانات في شكل شجري، وهي مناسبة للاستخدام في البحث بين البيانات.
- Graphs: يتم تمثيل البيانات في شكل رسم بياني ويتكون من العقد (النقاط) والحواف (الخطوط)، وتستخدم بشكل رئيسي في علم الرسومات وتحليل البيانات الكبيرة.
- هناك أنواع أخرى بالطبع مثل Stack و Queue وغيرهم.
الاستخدامات الشائعة لهياكل البيانات في البرمجة
- تخزين المعلومات وتنظيمها بشكل فعال.
- إمكانية الوصول إلى البيانات بسرعة وكفاءة.
- تحليل البيانات بشكل فعال واستخراج المعلومات الهامة منها.
- تحسين أداء البرامج بتقليل وقت الوصول إلى البيانات.
هل يجب عليك تعلم هياكل البيانات؟
في بداية تعلمك للبرمجة قم بتعلم الهياكل الأساسية مثل المصفوفات Arrays والكائن Object.
ولكن من المفيد أن تكون على دراية بها وتعرف كيفية استخدام بعضها. بشكل عام، من الأفضل أن تركز على تعلم أساسيات البرمجة مثل المتغيرات والشروط والحلقات والدوال وما إلى ذلك، ثم تتعمق في تعلم هياكل البيانات عندما تصبح أكثر خبرة أو بحاجة إليها بسبب عملك على مشاريع كبيرة وبيانات ضخمة.
ومن الهياكل البيانات الأساسية التي يجب على المبتدئين في البرمجة تعلمها:
- المصفوفات (Arrays): لحفظ وتنظيم مجموعة من القيم بنفس النوع، مثل قائمة الأرقام أو الأسماء.
- الكائنات (Objects): لحفظ مجموعة من القيم المرتبطة بمفتاح معين، مثل كائن يمثل شخص يحتوي على الاسم والعمر والعنوان.
- القوائم المتسلسلة (Linked Lists): تستخدم في العادة لحفظ بيانات مرتبطة بطريقة خطية، وتتكون من عقد (node) يحتوي على قيمة ورابط إلى العقد التالي.
- الأشجار (Trees): تستخدم لتنظيم البيانات بشكل تسلسلي، حيث تتكون من عقد يحتوي على قيمة ورابطات إلى عقدات أخرى.
- الرسوم البيانية (Graphs): تستخدم لتمثيل العلاقات بين العناصر، وتتكون من عقد يحتوي على قيمة ورابطات إلى عقدات أخرى.
يمكن استخدام كل هذه الهياكل في جافاسكريبت، ويمكن البدء بتعلمها بعد اكتساب بعض الخبرة في أساسيات البرمجة.
ستحتاج إلى الإطلاع على المصادر التالية.
تم شرح بنية البيانات بشكل مفصل في التعليقات السابقة وسأقوم بتوضيح الأهمية مع أمثلة من خلال التالي
في علوم الكمبيوتر ، أهمية بنية البيانات موجودة في كل مكان. توفر بنية البيانات عناصر أساسية لحل المشكلات. يمكن فهم أهميتها من خلال ما يلي:
- يحتوي البرنامج على جزأين من الواجهة الأمامية والخلفية. توفر الواجهة الأمامية واجهة وتسمى النهاية الخلفية قاعدة بيانات تحتوي على سجلات العملاء. يمكن أن يكون هناك مليون أو تريليون عميل. إذا كان علينا معرفة سجل معين أو عدد من العملاء ، يتم ذلك بواسطة طريقة بحث وهي عملية على هيكل البيانات.
- إذا كان سيتم تشغيل أي برنامج ، في البداية يتم إدخاله في ذاكرة الكمبيوتر. يتم إدخال وظائف ذاكرة الكمبيوتر في قوائم الانتظار. وقائمة الانتظار هي أيضًا مفهوم لهيكل البيانات.
- كما نعلم عند إدخال الوظائف والعمليات ، يتم تشكيل قوائم الانتظار. يمكن أن تحتوي قوائم الانتظار هذه على عدد كبير جدًا من الوظائف أو العمليات. في قوائم الانتظار ، تتم معالجة المهام بنفس الترتيب الذي تم إدخالها به. إذا تم إنشاء أي وظيفة يتم وضعها في نهاية قائمة الانتظار. افترض أنه يتعين علينا إضافة أو حذف أي وظيفة بأي ترتيب ، فسوف يفشل مفهوم قائمة الانتظار وسيتم استخدام مفهوم قائمة الارتباط.
- إذا كان سيتم تخزين أي بيانات بطريقة هرمية ، فسيتم استخدام مفهوم الشجرة.
- إذا كان سيتم ترتيب البيانات أبجديًا أو رقميًا ، فسيتم ذلك عن طريق طريقة الفرز وهي عملية على بنية البيانات.
لذلك تعلم واستخدام بنية البيانات المناسبة توفر سرعة واستخدام أقل للموارد
تعدّ هياكل البيانات (Data Structures) أساسيةً في عالم البرمجة، فهي تساعد على التغيير من أداء وسلوك التطبيقات المختلفة. لذا، نحتاج إلى تعلمها كمبرمجين، سواء كنا نعمل في تطوير تطبيقات ويب أو موبايل، أو حتى العاب الفيديو.
إليك بعض الأسباب التي توضح لماذا يجب علينا تعلّم هياكل البيانات:
1- تحسين أداء التطبيق
إذا كان عدد البيانات يزيد، يصبح من المهم استخدام الهياكل البيانية الصحيحة والفعالة. فكل هيكل يعمل بشكل مختلف، ويتيح لنا إظهار وتنظيم بياناتنا بشكل مختلف، كما أنّ كلٌ منها يأخذ وقتًا معينًا لتنفيذه، لذا يجب أختيار الهيكل المناسب والفعال لأداء عمل المطلوب.
مثلًا، قد يستغرق البحث عن بيانات معينة في بعض الحالات للوصول إلى قيمة محددة، ساعات بسبب بنية البيانات المستخدمة. ولكن باستخدام الهياكل البيانية المناسبة، يمكن تقليل الوقت اللازم للبحث عن تلك البيانات.
2- تحسين جودة الشفرة وتوفير الوقت
بفهم أفضل لهياكل البيانات، يتمكن المبرمجون من كتابة أكواد أفضل و تنظيم الأكواد وتوزيعها بشكل أفضل، وهذا يعني تحقيق جودة الشفرة البرمجية، وكذلك أيضًا توفير الوقت اللازم للبرمجة.
3- استخدام كود معدل
يجب علينا تعلم هياكل البيانات، لكي نتمكن من قراءة وفهم وتعديل الشفرة المصدرية للهياكل البيانية الأخري، كي يسهل علينا فهم وتعديل الأكواد.
بعد هذا الشرح، سوف أقوم بتوضيح أمثلة واقعية على كيفية كتابة بعض الهياكل البيانية الرئيسية في لغة الجافاسكريبت:
1- المصفوفات / Arrays
تعتبر المصفوفات من أساسيات هياكل البيانات، إذ تسمح لنا بتخزين العديد من العناصر في مكان واحد. فيما يلي مثال بسيط على انشاء المصفوفات في جافاسكريبت:
var myArray = [10,20,30,40];
2- اﻟﻘواﺌم اﻟﻤﺘراﺒطﺔ / Linked Lists
في القوائم المرتبة (Linked List)، يتم ربط عدة عناصر (العقد) ببعضها البعض، وتحويلها إلى مجموعة. يمكن استخدام القوائم المرتبة في حلول بسيطة مثل البحث في النصوص. وإليك المثال:
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
this.size = 0;
}
add(data) {
let node = new Node(data);
let current;
if (this.head == null) this.head = node;
else {
current = this.head;
while (current.next) {
current = current.next;
}
current.next = node;
}
this.size++;
}
}
3- Stacks
في (Stacks)، فإن العمليات الأولى المضافة تكون أخر العمليات التي تم وضعها. وتستخدم Stacks غالبًا في العديد من البرامج، لعمليات مثل التراجع أو إعادة إرسال البيانات. يمكن استخدام Stacks ببساطة في جافاسكريبت كما يلي:
class Stack {
constructor() {
this.elements = [];
}
add(element){
this.elements.push(element);
}
remove(){
this.elements.pop();
}
peek(){
return this.elements[this.elements.length - 1];
}
}
مجتمع للمبرمجين من جميع المستويات لتبادل المعرفة والخبرات. ناقش لغات البرمجة المختلفة، الحلول البرمجية، والمشاريع.