مقدمة: في الحياة اليومية ، يستخدم الناس في كثير من الأحيان قوائم. على سبيل المثال ، عندما يتعين علينا أحيانًا الذهاب للتسوق ، من أجل شراء كل الأشياء التي نريد شراؤها قبل أن نذهب ، وهي قائمة الأشياء التي نحتاج إلى استخدامها. أو عندما كنا في المدرسة عندما كنا صغارًا ، وبعد كل امتحان ، ستقوم المدرسة بإدراج التصنيفات والنصوص الخاصة بالطلاب العشرة الأوائل في هذا الامتحان ، وما إلى ذلك. نستخدم أيضًا قوائم في أجهزة الكمبيوتر الخاصة بنا ، فأين هي القائمة المناسبة للاستخدام؟ أين ليست مناسبة للاستخدام؟
مناسبة للاستخدام: عندما لا يكون هناك العديد من العناصر في القائمة ، يمكنك استخدام القائمة لأن الكفاءة عالية جدًا عند البحث أو فرز العناصر في القائمة. على العكس من ذلك ، إذا كان هناك العديد من العناصر في القائمة ، فهي غير مناسبة لاستخدام القائمة.
1: تجريد نوع البيانات تعريف القائمة
من أجل تصميم نوع البيانات المجردة في القائمة ، نحتاج إلى تقديم تعريف للقائمة ، بما في ذلك السمات التي يجب أن يكون لها القائمة ، وما هي العمليات التي يجب تنفيذها في القائمة ، إلخ.
القائمة هي مجموعة من البيانات المطلوبة. تسمى عناصر البيانات في كل قائمة العناصر. في JavaScript ، يمكن أن تكون العناصر الموجودة في القائمة من أي نوع بيانات. لا يوجد اتفاق مسبق على عدد العناصر التي يمكن حفظها في القائمة. ومع ذلك ، فإن عدد العناصر محدودة بذاكرة البرنامج عند استخدامها بالفعل.
الآن نريد تصميم قائمة ، ثم يمكننا التفكير في تنفيذ قائمة. ما هي السمات والأساليب التي يجب أن تحتوي عليها؟ بالطبع ، تم تصميم تصميمي أدناه بناءً على العروض التوضيحية في كتاب "هياكل بيانات JavaScript والخوارزميات". لذلك يمكننا أن نتعلم كيفية تصميم فصولنا التجريدية كمرجع عندما نكتب البرامج في المستقبل. أهم شيء نتعلمه عن العروض التوضيحية في الكتاب هو تعلم أفكار التصميم الخاصة بهم وكيفية كتابة التعليمات البرمجية. لديهم السمات التالية.
1. قوائم (خاصية): استخدم متغير قوائم لحفظ عدد العناصر في القائمة.
2. POS (الخاصية): الموضع الحالي للقائمة ، فهرس العنصر.
3. مخزن البيانات (الخاصية): تهيئة صفيف فارغ لحفظ عدد العناصر. إذا أردنا الحصول على العناصر في القائمة المحددة ، فيمكننا استخدام سمة POS أعلاه ؛ مثل مخزن البيانات [pos] ؛
جميع الطرق ؛ سيتم شرح القائمة التالية ، ولن يتم تقديمها واحدًا تلو الآخر.
الثاني: كيفية تنفيذ فصول القائمة
استنادًا إلى نوع البيانات المجردة المحددة أعلاه ، يمكننا تنفيذ فئة القائمة التالية ، على النحو التالي من خلال نمط النموذج الأولي للمنشئ +.
نسخة الكود كما يلي:
قائمة الوظائف () {
// عدد العناصر في القائمة
this.listize = 0 ؛
// ما هو الموضع الحالي للقائمة
this.pos = 0 ؛
// تهيئة صفيف فارغ لحفظ عناصر القائمة
this.datastore = [] ؛
}
list.prototype = {
// أضف عنصرًا إلى نهاية القائمة
إلحاق: وظيفة (عنصر) {
var self = this ؛
self.datastore [this.listize ++] = element ؛
} ،
// إزالة العناصر من القائمة
إزالة: وظيفة (عنصر) {
var self = this ؛
var curindex = self.find (element) ؛
if (curindex> -1) {
self.datastore.splice (curindex ، 1) ؛
-الذات.
العودة صحيح.
}
العودة كاذبة
} ،
// ابحث عن عناصر في القائمة لإرجاع الفهرس
البحث: وظيفة (عنصر) {
var self = this ؛
لـ (var i = 0 ، datalen = self.datastore.length ؛ i <datalen ؛ i ++) {
if (self.datastore [i] == element) {
العودة أنا.
}
}
العودة -1 ؛
} ،
// إرجاع عدد العناصر في القائمة
الطول: وظيفة () {
إرجاع هذا.
} ،
// إظهار عناصر في القائمة
tostring: function () {
إرجاع this.datastore ؛
} ،
/*
* أدخل عنصرًا بعد العنصر المحدد
* @Param Element Current Element
* param elementafter أدخل العنصر الحالي وراء هذا العنصر
*/
إدراج: وظيفة (عنصر ، elementafter) {
var self = this ؛
var insertpos = self.find (elementAfter) ؛
if (insertpos> -1) {
self.datastore.splice (insertpos+1،0 ، element) ؛
++ self.listize ؛
العودة صحيح.
}
العودة كاذبة
} ،
// مسح جميع العناصر في القائمة
واضح: وظيفة () {
حذف هذا.
this.datastore = [] ؛
this.liStize = this.pos = 0 ؛
} ،
// تحديد ما إذا كان العنصر المحدد في القائمة
يحتوي على: وظيفة (عنصر) {
var self = this ؛
لـ (var i = 0 ، ilen = self.datastore.length ؛ i <ilen ؛ i ++) {
if (self.datastore [i] == element) {
العودة صحيح.
}
}
العودة كاذبة
} ،
// انقل العنصر الحالي في القائمة إلى الموضع الأول
الجبهة: وظيفة () {
this.pos = 0 ؛
} ،
// انقل العنصر الحالي في القائمة إلى الموقف الأخير
النهاية: وظيفة () {
this.pos = this.listsize - 1 ؛
} ،
// حرك الموضع الحالي واحدًا تلو الآخر
السابق: وظيفة () {
if (this.pos> 0) {
-هذا.
}
} ،
// حرك الموضع الحالي واحدًا تلو الآخر
التالي: الدالة () {
if (this.pos <this.listize - 1) {
++ this.pos ؛
}
} ،
// العودة إلى الموقع الحالي للقائمة
curpos: function () {
إرجاع هذا.
} ،
// انقل الموضع الحالي إلى الموضع المحدد
Moveto: وظيفة (n) {
this.pos = n ؛
} ،
// إرجاع العنصر في الوضع الحالي
getElement: function () {
إرجاع this.datastore [this.pos] ؛
}
} ؛
على النحو الوارد أعلاه: قم بتنفيذ فئة قائمة ، بما في ذلك العديد من الأساليب المذكورة أعلاه. بالطبع ، يمكننا أيضًا تمديد بعض الطرق الأخرى لإثراء تنفيذ فئة القائمة. الشيء الأكثر أهمية هو تعلم طريقة الترميز على النحو الوارد أعلاه.