UNPKG

gxc-js-data-structure

Version:

Use JavaScript to implement some data structures and algorithms

2 lines (1 loc) 2.49 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).dataStructures={})}(this,(function(e){"use strict";class t{_items;constructor(e=[]){Object.defineProperty(this,"_items",{enumerable:!1,configurable:!1,writable:!1,value:e})}get[Symbol.toStringTag](){return"Stack"}push(e){return this._items.unshift(e),this._items}pop(){return this._items.shift()}peek(){return this._items[0]}isEmpty(){return 0===this._items.length}get size(){return this._items.length}toString(){return this._items.toString()}}class i{_items;constructor(e=[]){Object.defineProperty(this,"_items",{enumerable:!1,configurable:!1,writable:!1,value:e})}get[Symbol.toStringTag](){return"Queue"}enqueue(...e){this._items.push(...e)}dequeue(){return this._items.shift()}front(){return this._items[0]}isEmpty(){return 0===this._items.length}get size(){return this._items.length}toString(){return this._items.join(" ")}}class n{data;next;constructor(e){this.data=e,this.next=null}get[Symbol.toStringTag](){return"NodeItem"}}class s{head;constructor(){this.head=null}get[Symbol.toStringTag](){return"LinkedList"}get size(){let e=0,t=this.head;if(null===this.head)return 0;for(;t;)e++,t=t.next;return e}get isEmpty(){return 0===this.size}insert(e,t=this.size){this.judgedIndex(t);const i=new n(e);if(0===t){const e=this.head?.next||null;this.head=i,i.next=e}else{let e=this.getPreviousItem(t);i.next=e.next?.next||null,e.next=i}}update(e,t){const i=this.findNodeItem(t);if(i)return i.data=e,i.data;throw new Error("update failed, there is no node at this location ")}find(e){return this.findNodeItem(e)?.data}removeAt(e){this.judgedIndex(e);const t=this.findNodeItem(e);if(t){if(0===e)return this.head=t.next,t.data;this.getPreviousItem(e).next=t.next}}remove(e){let t=this.head,i=0;for(;t;){if(e(t)){return this.getPreviousItem(i).next=t.next,t.data}i++,t=t.next}}findNodeItem(e){let t=0,i=this.head;for(;i;){if(t===e)return i;i=i.next,t++}}judgedIndex(e){if(e<0||e>this.size)throw new Error(`index must be a non-negative number no greater than length! at judgedIndex(${e})`)}getPreviousItem(e){if(0===e)throw new Error("The first node has no previous node at getPreviousItem");let t=this.head,i=0;for(;t&&i!==e-1;)t=t.next,i++;return t}}e.DoubleLinkedList=class{head;constructor(){this.head=null}},e.LinkedList=s,e.Queue=i,e.Stack=t,Object.defineProperty(e,"__esModule",{value:!0})}));