поэтому я попробовал свой путь, который не сработал и, казалось, содержал слишком много контрольных операторов, что несколько запутало.Вопрос довольно очевиден.
Как реализовать три стека, используя один массив?
Я знаю, что ответ получен в Java, но я не смог найти ничего в Javascript.
На данный момент, потенциальное решение, которое имеет фиксированный объем пространства для каждого стека, было бы хорошо.,Я знаю, что решение, которое было бы более гибким в распределении пространства, также было бы более сложным.
Спасибо за вашу помощь:)
РЕДАКТИРОВАТЬ: Это мой код
function ThreeInOne() {
this.stack = [];
this.firstStackBeginning;
this.firstStackEnd;
this.secondStackBeginning;
this.secondStackEnd;
this.thirdStackBeginning;
this.thirdStackEnd;
this.addAtStack = function(stackIndex, value) {
if (this.stack.length === 0) {
this.stack.push(value);
if (stackIndex = 1) {
this.firstStackBeginning = 0;
this.firstStackEnd = 0;
} else if (stackIndex = 2) {
this.secondStackBeginning = 0;
this.secondStackEnd = 0;
} else if (stackIndex = 3) {
this.thirdStackBeginning = 0;
this.thirdStackEnd = 0;
} else if (stackIndex > 3) {
console.log("There are only 3 stacks available to add to")
}
} else if (this.stack.length > 0) {
if (stackIndex == 1) {
if (this.secondStackBeginning == 0) {
this.stack.unshift(value);
this.secondStackBeginning++;
this.secondStackEnd++;
this.firstStackBeginning = 0;
this.firstStackEnd = 0;
}
if (this.secondStackBeginning && this.secondStackBeginning !== 0) {
this.stack.splice(this.secondStackBeginning-1, 0, value);
this.firstStackEnd++;
}
} else if (stackIndex == 2) {
if (this.thirdStackBeginning==0) {
this.stack.unshift(value);
this.thirdStackBeginning++;
this.thirdStackEnd++;
this.secondStackBeginning = 0;
this.secondStackEnd = 0;
} else if (this.thirdStackBeginning != 0) {
this.stack.splice(this.thirdStackBeginning-1, 0, value);
this.secondStackEnd = this.thirdStackBeginning-1;
this.thirdStackBeginning++;
this.thirdStackEnd++;
}
} else if (stackIndex == 3) {
if (this.firstStackEnd && !this.secondStackEnd && !this.thirdStackBeginning) {
this.thirdStackBeginning = this.firstStackEnd+1;
this.stack.push(value);
} else if (this.seconStackEnd )
}
}
}
}
Это еще не закончено, но идея состояла в том, чтобы сохранить указатели начала и конца каждого стека и соответственно обновить их.Я думаю, что смысл в том, чтобы не использовать другую структуру данных (кроме этого одного массива), иначе я бы просто создал массив с тремя внутренними массивами и обновил их соответствующим образом.Таким образом, идея состоит в том, что, например, если мы начнем с массива = [4, 5, 1, 2, 0, 3, 6], этот массив на самом деле состоит из трех стеков, один = [4, 5), два = [1, 2) и три = [0, 3, 6).Идея состоит в том, что если я захочу добавить x в стек два, то получу массив = [4, 5, 1, 2, x, 0, 3, 6]
Я надеюсь, что этоделает это более ясным!