"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > فهم بنية بيانات المكدس: دليل خطوة بخطوة لتنفيذ المكدس في JavaScript

فهم بنية بيانات المكدس: دليل خطوة بخطوة لتنفيذ المكدس في JavaScript

تم النشر بتاريخ 2024-11-17
تصفح:969

المكدس عبارة عن بنية بيانات خطية بسيطة تعمل مثل كومة من اللوحات؟️. وهو يتبع مبدأ الوارد أخيراً يخرج أولاً (LIFO). فكر في الأمر على أنه كومة من الأطباق: يمكنك فقط إضافة أو إزالة الأطباق من أعلى الكومة.

من أجل فهم أفضل للمكدس، فلنبدأ في رحلة قصيرة من الخيال؟.
تخيل أنك في مطعم فاخر ⁉️، وموظفو المطبخ يستعدون لقضاء ليلة مزدحمة ‍‍؟. في منطقة الطبق، هناك كومة طويلة من الأطباق في انتظار استخدامها. مع وصول رواد المطعم وتدفق الطلبات، يأخذ الموظفون الأطباق من أعلى الكومة. عند إضافة لوحات نظيفة، فإنها تذهب مباشرة إلى الأعلى. يضمن هذا النظام البسيط أن يتم استخدام الألواح الموجودة في الجزء السفلي من الكومة والتي كانت هناك لفترة أطول، في حين يتم استخدام اللوحات التي تم تنظيفها حديثًا في الأعلى أولاً ✨.

Understanding Stack Data Structure: A Step-by-Step Guide to Implementing Stack in JavaScript

هذه، في جوهرها، هي الطريقة التي تعمل بها بنية بيانات Stack. المكدس عبارة عن بنية بيانات خطية تتبع مبدأ آخر ما يدخل أولاً يخرج (LIFO). تمامًا كما هو الحال مع مجموعة الأطباق لدينا، فإن العنصر الأخير المضاف إلى المجموعة هو أول عنصر تتم إزالته.

جدول المحتويات

في هذا البرنامج التعليمي الشامل حول بنية بيانات المكدس، سنستكشف المواضيع التالية بأسلوب بسيط وسهل للمبتدئين:

  1. ما هو المكدس؟
  2. إيجابيات وسلبيات استخدام Stack
  3. تطبيقات العالم الحقيقي للمكدسات
  4. العمليات الرئيسية على المكدس
  5. تنفيذ المكدس في جافا سكريبت
  6. خاتمة


هل أنت مستعد؟ دعونا نتعمق في

Understanding Stack Data Structure: A Step-by-Step Guide to Implementing Stack in JavaScript

ما هو المكدس؟

المكدس عبارة عن بنية بيانات خطية تتبع مبدأ "آخر ما يدخل يخرج أولاً" (LIFO). وهذا يعني أن العنصر الأخير المضاف إلى المكدس سيكون أول عنصر تتم إزالته. فكر في الأمر كمجموعة من الكتب: يمكنك فقط إضافة أو إزالة الكتب من أعلى المجموعة.

إيجابيات وسلبيات استخدام المكدس

قبل أن نواصل التدفق ونكتب بعض الأكواد، من الرائع أن نفهم أين وأين لا يجب استخدام Stack. يقدم الجدول أدناه إيجابيات وسلبيات المكدس بالتفصيل.

الإيجابيات السلبيات
بسيط وسهل التنفيذ وصول محدود (يمكن الوصول مباشرة إلى العنصر العلوي فقط)
فعالة لعمليات آخر دخول أولاً (LIFO) غير مناسب للوصول العشوائي للعناصر
الوقت الثابت O(1) لعمليات الدفع والبوب يمكن أن يؤدي إلى تجاوز سعة المكدس إذا لم تتم إدارته بشكل صحيح
مفيد لتتبع الحالة في الخوارزميات (على سبيل المثال، بحث العمق أولاً) ليست مثالية للبحث أو الوصول إلى العناصر العشوائية
يساعد في إدارة الذاكرة (على سبيل المثال، مكدس الاستدعاءات في لغات البرمجة) حجم ثابت في بعض التطبيقات (المكدسات القائمة على المصفوفات)
مفيد لعكس البيانات قد يتطلب تغيير الحجم في التطبيقات الديناميكية، الأمر الذي قد يكون مكلفًا
يدعم الخوارزميات العودية بشكل طبيعي غير فعالة لمجموعات البيانات الكبيرة التي تتطلب اجتيازًا متكررًا
يساعد في تقييم التعبير وتحليل بناء الجملة احتمال حدوث تجاوز في حالة استدعاء عملية البوب ​​على مكدس فارغ
مفيد في آليات التراجع في البرامج وظائف محدودة مقارنة بهياكل البيانات الأكثر تعقيدًا
فعالة لأنواع معينة من تنظيم البيانات (على سبيل المثال، سجل المتصفح) غير مناسب للمشاكل التي تتطلب سلوكًا يشبه قائمة الانتظار (FIFO)

العمليات الرئيسية على المكدس

العمليات الأساسية التي يمكن إجراؤها على المكدس هي:

  1. Push(): إضافة عنصر إلى أعلى المكدس.
  2. pop(): إزالة العنصر العلوي من المكدس.
  3. نظرة خاطفة (): إرجاع العنصر العلوي للمكدس دون إزالته.
  4. isEmpty(): يتحقق مما إذا كان المكدس فارغًا.
  5. size(): إرجاع عدد العناصر في المكدس.

تطبيقات العالم الحقيقي للأكوام

توجد الأكوام في كل مكان في علوم الكمبيوتر وتطوير البرمجيات. فيما يلي بعض التطبيقات الشائعة:

  1. وظيفة التراجع : في برامج تحرير النصوص أو برامج التصميم الجرافيكي، يتم دفع كل إجراء إلى مكدس. عندما تضغط على "تراجع"، يتم إخراج الإجراء الأخير من المكدس وعكسه.

  2. سجل المتصفح : عند زيارة صفحة جديدة، يتم دفعها إلى المكدس. يقوم زر "الرجوع" بإخراج الصفحة الحالية من المكدس، مما يكشف عن الصفحة السابقة.

  3. مكدس استدعاء الوظائف : في لغات البرمجة، تتم إدارة استدعاءات الوظائف باستخدام المكدس. عندما يتم استدعاء دالة، يتم دفعها إلى مكدس الاستدعاءات. عندما يعود، برزت.

  4. تقييم التعبير: يتم استخدام الأكوام لتقييم التعبيرات الحسابية، وخاصة تلك الموجودة في تدوين postfix.

  5. خوارزميات التتبع التراجعي: في مشاكل مثل حل المتاهة أو حل الألغاز، يمكن للأكوام تتبع المسار المتخذ، مما يسمح بالتراجع بسهولة عند الحاجة.

تنفيذ المكدس في جافا سكريبت

الآن، دعونا ننفذ المكدس في JavaScript. من المهم معرفة أن هناك طرقًا مختلفة لتنفيذ المكدس في JavaScript. إحدى الطرق الشائعة لتنفيذ المكدس هي استخدام المصفوفة، والطريقة الأخرى هي استخدام القائمة المرتبطة. في هذه المقالة، سنقوم بتنفيذ مكدس باستخدام القائمة المرتبطة (قائمة مرتبطة منفردة).

تنفيذ المكدس باستخدام القائمة المرتبطة

آمل أنك لا تزال تتذكر كيف تعمل القائمة المرتبطة؟ قد تحتاج إلى التحقق من تنفيذ القائمة المرتبطة في إحدى مقالاتنا السابقة في نفس هذه السلسلة.

الآن، لنبدأ في تنفيذ مكدسنا باستخدام القائمة المرتبطة بشكل فردي. هلا فعلنا؟

Understanding Stack Data Structure: A Step-by-Step Guide to Implementing Stack in JavaScript

أولاً، سنقوم بإنشاء فئة Node لتمثيل العنصر الفردي في مكدسنا.

class Node {
  constructor(data) {
    this.data = data;
    this.next = null;
  }
}

بعد ذلك، سنقوم بإنشاء فئة Stack لتمثيل مجموعتنا.

class Stack {
  constructor() {
    this.top = null;
    this.size = 0;
  }

  // Stack Operations will be implemented here ?
}

عملية الدفع

تضيف عملية الدفع عنصرًا جديدًا إلى أعلى المكدس. يقوم بإنشاء StackNode جديد، ويضبط المؤشر التالي على القمة الحالية، ثم يقوم بتحديث القمة للإشارة إلى هذه العقدة الجديدة. وأخيرا، فإنه يزيد الحجم.

  // Push element to the top of the stack
  push(element) {
    const newNode = new Node(element);
    newNode.next = this.top;
    this.top = newNode;
    this.size  ;
  }

عملية البوب

تؤدي عملية البوب ​​إلى إزالة العنصر العلوي من المكدس. يتحقق أولاً مما إذا كانت المكدس فارغة. إذا كان الأمر كذلك، فإنه يقوم بإرجاع رسالة خطأ. وبخلاف ذلك، فإنه يزيل العنصر العلوي، ويحدث المؤشر العلوي إلى العقدة التالية، ويقلل الحجم. وأخيراً، تقوم بإرجاع العنصر المحذوف.

  // Remove and return the top element
  pop() {
    if (this.isEmpty()) {
      return "Stack is empty";
    }
    const poppedElement = this.top.data;
    this.top = this.top.next;
    this.size--;
    return poppedElement;
  }

عملية نظرة خاطفة

تقوم عملية النظرة الخاطفة بإرجاع العنصر العلوي دون إزالته. يتحقق أولاً مما إذا كانت المكدس فارغة. إذا كان الأمر كذلك، فإنه يقوم بإرجاع رسالة خطأ. وإلا فإنه يقوم بإرجاع بيانات العنصر العلوي.

  // Return the top element without removing it
  peek() {
    if (this.isEmpty()) {
      return "Stack is empty";
    }
    return this.top.data;
  }

عملية فارغة

تتحقق العملية isEmpty مما إذا كان المكدس فارغًا. يُرجع صحيحًا إذا كان المكدس فارغًا، ويُرجع خطأً بخلاف ذلك.

  // Check if the stack is empty
  isEmpty() {
    return this.size === 0;
  }

عملية الحصول على الحجم

تقوم عملية getSize بإرجاع حجم المكدس. تقوم بإرجاع عدد العناصر في المكدس.

  // Return the size of the stack
  getSize() {
    return this.size;
  }

عملية الطباعة

تقوم عملية الطباعة بطباعة المكدس. تقوم بإرجاع بيانات العنصر العلوي.

  // Print the stack
  print() {
    let current = this.top;
    let result = "";
    while (current) {
      result  = current.data   " ";
      current = current.next;
    }
    console.log(result.trim());
  }

مثال الاستخدام

// Usage example
const customStack = new CustomStack();
customStack.push(10);
customStack.push(20);
customStack.push(30);
console.log(customStack.pop()); // 30
console.log(customStack.peek()); // 20
console.log(customStack.getSize()); // 2
console.log(customStack.isEmpty()); // false
customStack.print(); // 20 10

في هذا التنفيذ، استخدمنا بنية قائمة مرتبطة (قائمة مرتبطة منفردة) لتمثيل مجموعتنا. كل عنصر عبارة عن عقدة ذات قيمة بيانات ومرجع إلى العقدة التالية. دائمًا ما يكون الجزء العلوي من المكدس هو أحدث عقدة تمت إضافتها.

خاتمة

المكدسات هي بنية بيانات أساسية في علوم الكمبيوتر تتبع مبدأ "آخر ما يدخل يخرج أولاً" (LIFO). يتم استخدامها في تطبيقات مختلفة، بما في ذلك إدارة استدعاءات الوظائف، وتنفيذ وظيفة التراجع، وتقييم التعبيرات الحسابية.

في هذا البرنامج التعليمي، قمنا بتغطية أساسيات الأكوام وإيجابيات وسلبيات استخدامها وتنفيذها في JavaScript (باستخدام القائمة المرتبطة). إن فهم الأكوام لا يقتصر فقط على معرفة كيفية تنفيذها، ولكن أيضًا التعرف على متى تكون الأداة المناسبة لحل المشكلة.

بينما تواصل رحلتك في تطوير البرمجيات، ستجد أن الأكوام هي أداة لا غنى عنها في مجموعة أدوات حل المشكلات لديك. إنها بسيطة لكنها قوية، وسيؤدي إتقانها إلى تعزيز قدرتك بشكل كبير على تصميم خوارزميات وهياكل بيانات فعالة.



ابق على اطلاع دائم ومتصل

لضمان عدم تفويت أي جزء من هذه السلسلة وللتواصل معي لإجراء المزيد من المناقشات المتعمقة حول تطوير البرامج (الويب أو الخادم أو الهاتف المحمول أو الكشط / الأتمتة)، وهياكل البيانات والخوارزميات، وغيرها من التقنيات المثيرة المواضيع تابعوني على:

  • جيت هاب
  • لينكد إن
  • X (تويتر)

ترقبوا البرمجة وسعيدة ‍؟؟






          

            
  

            
                    
بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/emmanuelayinde/understanding-stack-data-structure-a-step-by-step-guide-to-implementing-stack-in-javascript-3f62?1إذا كان هناك أي التعدي، يرجى الاتصال بنا اتصل على [email protected] للحذف
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3