gxc-js-data-structure
Version:
Use JavaScript to implement some data structures and algorithms
2 lines (1 loc) • 2.21 kB
JavaScript
class t{_items;constructor(t=[]){Object.defineProperty(this,"_items",{enumerable:!1,configurable:!1,writable:!1,value:t})}get[Symbol.toStringTag](){return"Stack"}push(t){return this._items.unshift(t),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 e{_items;constructor(t=[]){Object.defineProperty(this,"_items",{enumerable:!1,configurable:!1,writable:!1,value:t})}get[Symbol.toStringTag](){return"Queue"}enqueue(...t){this._items.push(...t)}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 i{data;next;constructor(t){this.data=t,this.next=null}get[Symbol.toStringTag](){return"NodeItem"}}class r{head;constructor(){this.head=null}get[Symbol.toStringTag](){return"LinkedList"}get size(){let t=0,e=this.head;if(null===this.head)return 0;for(;e;)t++,e=e.next;return t}get isEmpty(){return 0===this.size}insert(t,e=this.size){this.judgedIndex(e);const r=new i(t);if(0===e){const t=this.head?.next||null;this.head=r,r.next=t}else{let t=this.getPreviousItem(e);r.next=t.next?.next||null,t.next=r}}update(t,e){const i=this.findNodeItem(e);if(i)return i.data=t,i.data;throw new Error("update failed, there is no node at this location ")}find(t){return this.findNodeItem(t)?.data}removeAt(t){this.judgedIndex(t);const e=this.findNodeItem(t);if(e){if(0===t)return this.head=e.next,e.data;this.getPreviousItem(t).next=e.next}}remove(t){let e=this.head,i=0;for(;e;){if(t(e)){return this.getPreviousItem(i).next=e.next,e.data}i++,e=e.next}}findNodeItem(t){let e=0,i=this.head;for(;i;){if(e===t)return i;i=i.next,e++}}judgedIndex(t){if(t<0||t>this.size)throw new Error(`index must be a non-negative number no greater than length! at judgedIndex(${t})`)}getPreviousItem(t){if(0===t)throw new Error("The first node has no previous node at getPreviousItem");let e=this.head,i=0;for(;e&&i!==t-1;)e=e.next,i++;return e}}class n{head;constructor(){this.head=null}}export{n as DoubleLinkedList,r as LinkedList,e as Queue,t as Stack};