Введение: В повседневной жизни люди часто используют списки. Например, когда нам иногда приходится ходить по магазинам, чтобы купить все вещи, которые мы хотим купить перед тем, как уйти, это список вещей, которые нам нужно использовать. Или, когда мы учились в школе, когда мы были молодыми, после каждого экзамена в школе перечисляют рейтинги и стенограммы десяти лучших учеников на этом экзамене и т. Д. Это все списки списка. Мы также используем списки на наших компьютерах, так где же список подходит для использования? Где это не подходит для использования?
Подходит для использования: когда в списке не так много элементов, вы можете использовать список, потому что эффективность очень высока при поиске или сортировке элементов в списке. Напротив, если в списке есть много элементов, он не подходит для использования списка.
1: Определение абстрактного типа данных списка
Чтобы разработать абстрактный тип данных в списке, нам нужно дать определение списка, включая какие атрибуты должны иметь список, какие операции должны выполняться в списке и т. Д.
Список - это упорядоченный набор данных. Элементы данных в каждом списке называются элементами. В JavaScript элементы в списке могут быть любого типа данных. Нет предварительного соглашения о том, сколько элементов можно сохранить в списке. Тем не менее, количество элементов ограничено памятью программы, когда он фактически используется.
Теперь мы хотим составить список, тогда мы можем подумать о реализации списка. Какие атрибуты и методы они должны содержать? Конечно, мои проекты ниже разработаны на основе демонстраций в книге «Структуры и алгоритмы данных JavaScript». Таким образом, мы можем научиться разработать наши собственные абстрактные классы в качестве ссылки, когда мы пишем программы в будущем. Самое важное, что мы узнаем о демонстрациях в книге, - это изучить их идеи дизайна и как писать код. У них есть следующие атрибуты;
1. ListSize (свойство): используйте переменную ListSize, чтобы сохранить количество элементов в списке.
2. POS (свойство): текущая позиция списка, индекс элемента.
3. DataStore (свойство): инициализируйте пустой массив, чтобы сохранить количество элементов. Если мы хотим получить элементы в конкретном списке, мы можем использовать атрибут POS выше; такие как данные данных [pos];
Все методы; Следующий список будет объяснен и не будет представлен один за другим.
Два: как реализовать классы списка
Основываясь на абстрактном типе данных, указанный выше, мы можем реализовать следующий класс списка, следующим образом через шаблон прототипа конструктора +.
Кода -копия выглядит следующим образом:
Функциональный список () {
// количество элементов в списке
this.ListSize = 0;
// какова текущая позиция списка
this.pos = 0;
// Инициализировать пустой массив для сохранения элементов списка
this.datastore = [];
}
List.prototype = {
// добавить элемент в конце списка
Приложение: function (element) {
var self = это;
self.datastore [this.ListSize ++] = element;
},
// Удалить элементы из списка
удалить: function (element) {
var self = это;
var curindex = self.find (element);
if (curindex> -1) {
self.datastore.splice (curindex, 1);
-self.listsize;
вернуть истину;
}
вернуть ложь;
},
// Найти элементы в списке, чтобы вернуть индекс
Найти: function (element) {
var self = это;
for (var i = 0, datalen = self.datastore.length; i <dataLen; i ++) {
if (self.datastore [i] == element) {
вернуть я;
}
}
возврат -1;
},
// возвращать количество элементов в списке
длина: function () {
вернуть это.
},
// показать элементы в списке
toString: function () {
вернуть это.datastore;
},
/*
* Вставьте элемент после указанного элемента
* @param элемент тока тока текущего элемента
* @param elementafter Вставьте текущий элемент, стоящий за этим элементом
*/
Вставка: function (element, elementafter) {
var self = это;
var insertpos = self.find (elementafter);
if (insertpos> -1) {
self.datastore.splice (insertpos+1,0, элемент);
++ self.listsize;
вернуть истину;
}
вернуть ложь;
},
// очистить все элементы в списке
ясно: function () {
Удалить это.datastore;
this.datastore = [];
this.ListSize = this.pos = 0;
},
// Определите, находится ли заданный элемент в списке
содержит: function (element) {
var self = это;
for (var i = 0, ilen = self.datastore.length; i <ilen; i ++) {
if (self.datastore [i] == element) {
вернуть истину;
}
}
вернуть ложь;
},
// переместить текущий элемент в списке в первую позицию
Front: function () {
this.pos = 0;
},
// переместить текущий элемент в списке в последнюю позицию
end: function () {
this.pos = this.listsize - 1;
},
// переместить текущую позицию один за другим
Предыдущий: function () {
if (this.pos> 0) {
-это.
}
},
// переместить текущую позицию один за другим
Далее: function () {
if (this.pos <this.listsize - 1) {
++ this.pos;
}
},
// Вернуться в текущее местоположение списка
curpos: function () {
вернуть это.pos;
},
// переместить текущую позицию в указанную позицию
Moveto: function (n) {
this.pos = n;
},
// возвращать элемент в текущей позиции
getElement: function () {
вернуть this.datastore [this.pos];
}
};
Как указано выше: внедрить класс списка, в том числе столько методов, сколько выше. Конечно, мы также можем расширить некоторые другие методы для обогащения внедрения класса списка. Самое главное, чтобы изучить метод кодирования, как указано выше.