سؤال

أقوم بتنفيذ مكدس في JavaScript.

يعتبر:

Stack{0,1,2,3} Top:0

الآن يقوم المستخدم بإبراز القيمة 2:

Stack{0,1,3} Top:0

هل هذا سلوك مقبول للمكدس؟أقوم بتجميع المكدس الخاص بي، ولكن هل هناك أي تعليمات برمجية مضمنة يمكنها القيام بذلك من أجلي؟

رمز بلدي:

function Stack() //Creating Stack Object
{
    // Create an empty array of cards.
    this.cards = new Array();  //Cards array inside stack object
    this.push  = pushdata;     //Call pushdata function on push operation
    this.pop   = popdata;      //Call popdata function on pop operation
    this.printStack = showStackData; //Call showStackData function on printstack operation
}

function pushdata(data)
{
    this.cards.push(data);
}

function popdata(data)
{
    return this.cards.pop();
}

function showStackData()
{
    return this.cards;
}

var a = new Stack(); //Create stack Object
a.push(12);          //Push Data onto Stack
a.push(32);
a.push(42);
var z = a.pop();
document.write("Data Popped: " + z);
document.write("Stack Output: " + a.printStack());

إذا لم يكن المكدس هو النوع الصحيح من بنية البيانات لهذا التطبيق، فما هو النوع الصحيح؟

هل كانت مفيدة؟

المحلول

هل من القانوني القيام بالعملية المذكورة أعلاه في المكدس؟

هذه ليست عملية مكدس تقليدية.لا يمكن حقًا تسمية بنية البيانات التي سمحت لك بالقيام بذلك بمكدس؛إنها أكثر من مجرد قائمة قديمة.

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

هل هناك شيء خاطئ مع بسيطة مجموعة مصفوفة؟يمنحك كتابة عنصر الوصول العشوائي الذي تريده:

var a= [0, 1, 2, 3];
a.splice(1, 1);
// a==[0, 2, 3]

بالإضافة إلى أساليب الراحة على نمط المكدس للوصول إلى كل من الحزم الأمامية والمكدسات الخلفية (وبالتالي قوائم الانتظار):دفع/البوب/التحول/إلغاء التحول.

ليس هناك فائدة كبيرة في إنشاء فئة مجمعة Stack() الخاصة بك عندما يغطي Array() بالفعل IMO.في حين أن عالم الكمبيوتر قد يكون مهتمًا بأشياء مثل التعقيد الخوارزمي للقوائم المرتبطة للمكدسات، فمن الناحية العملية، لن تتمكن من تحسين تنفيذ Array المُحسّن المدمج في مترجمات JavaScript الحديثة من التعليمات البرمجية ذات المستوى الأعلى.

نصائح أخرى

ليس من الممكن القيام بذلك باستخدام Pop (دون ظهور أشياء أخرى على طول الطريق).يجب أن تفكر في توفير طريقة أخرى للمستخدم للعثور على مكان الرقم 2 وطريقة أخرى للمستخدم لاستخراج ذلك، مثل استخدام لصق المصفوفة.ولكن بحلول ذلك الوقت لم يعد هذا كومة.

http://www.w3schools.com/jsref/jsref_splice.asp

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

يتم إجراء شيء مثل هذا بشكل شائع عن طريق عمليات التراجع/الإعادة في تطبيقات واجهة المستخدم الرسومية - فهي تحتوي على مجموعة من عمليات التراجع، ومجموعة متعارضة من عمليات الإعادة.يؤدي التراجع إلى نقل الإجراء من المكدس A إلى B، بينما ينقل Redo الإجراء من المكدس B إلى A.يدفع إجراء جديد إلى مكدس التراجع ويمسح مكدس الإعادة بالكامل.

مكان آخر يتم استخدامه فيه هو قوائم الخلف/الأمام في متصفحك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top