JS 实现数据结构
2021-01-03 11:29
标签:OLE 向量空间 指点 instance gets 添加元素 自己 font length 使用JS实现数据结构。 1.栈 栈作为简单的数据结构,JS对其实现的方法也相对简单。 代码: 示例代码: 队列 队列有着先进先出的特点,在使用JS来实现单队列是很简单的一件事。 代码: 有一种队列,每一个值都带有自己的优先级,这种队列成为优先级队列。 代码: 为充分利用向量空间,克服假溢出现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列 代码: 上述代码可在我的GitHub上下载,欢迎大家指点批评。 JS 实现数据结构 标签:OLE 向量空间 指点 instance gets 添加元素 自己 font length 原文地址:https://www.cnblogs.com/FuloliyaLansfroya/p/13569395.htmlclass Stack {
constructor() {
this.stack = [];
}
push(item) {
this.stack.push(item);
}
pop() {
this.stack.pop();
}
peek() {
return this.stack[this.getCount() - 1];
}
getCount() {
return this.stack.length;
}
clear() {
this.stack = [];
}
isEmpty() {
return this.getCount() === 0;
}
getStack() {
console.log(this.stack);
}
}
function Stacked() {
let stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.push(6);
stack.getStack();
stack.pop();
console.log(stack.peek());
}
class Queue {
constructor() {
this.queue = [];
}
enQueue(item) {
this.queue.push(item);
}
deQueue() {
return this.queue.shift();
}
getHeader() {
return this.queue[0];
}
getLength() {
return this.queue.length;
}
clear() {
this.queue = [];
}
isEmpty() {
return this.getLength() === 0;
}
getQueue() {
console.log(this.queue);
}
}
class PriorityQueue {
constructor() {
this.queue = [];
}
// 向队列添加元素(一个或多个)
// 参数obj的数据格式:{element, priority}
enQueue(obj) {
if (obj instanceof Array) {
for (let i = 0, data; (data = obj[i]); i++) {
this.enQueue(data);
}
} else {
let added = false;
for (let i = 0, data; (data = this.queue[i]); i++) {
// 最小优先级,即将priority值小的元素插入到队列的前面
if (obj.priority data.priority) {
this.queue.splice(i, 0, obj);
added = true;
break;
}
}
// 如果元素没有插入到队列中,则默认加到队列的尾部
if (!added) this.queue.push(obj);
}
}
deQueue() {
return this.queue.shift();
}
getHeader() {
return this.queue[0];
}
getLength() {
return this.queue.length;
}
clear() {
this.queue = [];
}
isEmpty() {
return this.getLength() === 0;
}
getQueue() {
this.queue.forEach(function (item) {
console.log(`${item.element} - ${item.priority}`);
});
}
}
class SqQueue {
constructor() {
this.queue = new Array();
this.first = 0; // 队头
this.last = 0; // 队尾
this.size = 0; // 实际大小
}
enQueue(item) {
// 每当插入一个数据时,进行判断,如果此时first和last相等且last与队列长度相等时,将队列伸长,保证足够的空间填装数据
if (
this.first === this.last % this.queue.length &&
this.last >= this.getLength()
) {
this.resize(this.getLength() + 1);
}
this.queue[this.last] = item;
this.size++;
this.last = this.last + 1;
}
deQueue() {
if (this.isEmpity()) {
throw Error("queue is empty");
}
let r = this.queue[this.first];
this.queue.shift();
this.size--;
return r;
}
getHeader() {
if (this.isEmpity()) {
throw Error("queue is empty");
}
return this.queue[this.first];
}
getLength() {
return this.queue.length;
}
isEmpity() {
return this.first === this.last && this.getLength() === 0;
}
resize(length) {
// 生成新数组,代替原数组。
let q = new Array(length);
for (let i = 0; i ) {
q[i] = this.queue[(i + this.first) % this.getLength()];
}
this.queue = q;
this.first = 0;
this.last = this.size;
}
getSqQueue() {
console.log(this.queue);
}
}
上一篇:ExtJs中Grid下拉框联动
下一篇:如何提升网站关键词的优化排名?