データ構造は、後入れ先出し の原則に従う順序付けされたコレクションであり、皿のスタックと同様に、非常に正確です。は一番下に配置し、一番上のものは一番下に配置する必要があります。リリースされたばかりです。要素がスタックに追加されるとき、最初に追加される要素はスタックの一番下にあり、最後に追加される要素は一番上の要素と呼ばれます。
具体的な内容は
スタックの作成: jsではスタックに似た配列を使用します
スタックに要素を追加しますpush()
要素を削除しますdelete()
スタックサイズsize()
スタックの最上位要素を表示peek()
スタックが空かどうかを確認isEmpty()
スタックを空にするempty()
Print stack print()
codeを使用
function Stack(){ var stack=[]; this.push=function(para){ stack.push(para); }; this.delete=function(){ // 删除栈顶元素 stack.pop();//删除数组末尾元素, } this.size=function(){ return stack.length; } this.peek=function(){ return stack[stack.length-1]; } this.isEmpty=function(){ if(stack.length==0){ return true; }else{ return false; } } this.emptyStack=function(){ stack=[]; } this.print=function(){ return stack.toString(); } }
var myStack=new Stack(); myStack.push(1); myStack.push(4); myStack.push(6); console.log('删除前栈内元素'+myStack.print()); console.log('删除前栈顶元素'+myStack.peek()); console.log('删除前栈元素size'+myStack.size()); myStack.delete(); console.log('删除后栈内元素'+myStack.print()); console.log('删除后栈顶元素'+myStack.peek()); console.log('删除前栈元素size'+myStack.size()); console.log('栈是否为空'+myStack.isEmpty()); myStack.emptyStack(); console.log('清空栈,栈是否为空'+myStack.isEmpty()); console.log('清空栈,栈元素size'+myStack.size());
メンポースープを飲むために列に並ぶのと同じように、誰が来ますか先頭が先頭で、後から来る人が列に並びます。 列の最後尾では、前で飲み終えた人が順番に並び替えられます。 要素は列の先頭から削除されます。要素はキューの最後から追加されます。スタックの実装に似ています
function Queue(){ var queue=[]; this.push=function(para){ queue.push(para); } this.delete=function(){ // 从队首移除,即删除的是数组第一位 queue.shift(); } this.queueFront=function(){ return queue[0]; } this.isEmpty=function(){ if(queue.length==0){ return true; }else{ return false; } } this.size=function(){ return queue.length; } this.emptyQueue=function(){ queue=[]; } this.print=function(){ return queue.toString(); } }var myQueue=new Queue(); myQueue.push(1); myQueue.push(4); myQueue.push(6); console.log('删除前队列内元素'+myQueue.print()); console.log('删除前队列顶元素'+myQueue.queueFront()); console.log('删除前队列元素size'+myQueue.size()); myQueue.delete(); console.log('删除后队列内元素'+myQueue.print()); console.log('删除后队列顶元素'+myQueue.queueFront()); console.log('删除前队列元素size'+myQueue.size()); console.log('队列是否为空'+myQueue.isEmpty()); myQueue.emptyQueue(); console.log('清空队列,队列是否为空'+myQueue.isEmpty()); console.log('清空队列,队列元素size'+myQueue.size());
削除操作と最初(スタックの一番上)の要素へのアクセス方法が異なります。これは、lastの原理が異なるためです。 -in-first-out と first-in-first-out スタックは配列の最後のビット (pop()) を削除し、キューは配列の最初のビットを削除します (shift())。スタックの最上位要素は配列の最後のビットであり、キューの最初の要素は配列の最初の要素です。
追加の優先キュー
はっきり言って、この本には、優先順位が小さいものはフロントであると規定されています。それから私はそれを自分で実装しました。両方とも実行しました。優先順位はありませんが、ここにコードを掲載します。上記 2 つのメソッド (私が queue を宣言したことに注意してください。本ではそれは items ^_^)
function PriorityQueue(){ let items=[]; function QueueElement(element,priority){ this.element=element; this.priority=priority; } this.enqueue=function(element,priority){ let queueElement=new QueueElement(element, priority); let added=false; for(let i=0;i<items.length;i++){ if(queueElement.priority<isFinite([i].priority)){ items.splice(i,0,queueElement); added=true; break; } } if(!added){ items.push(queueElement); } }; this.print=function(){ return items; } }var pq=new PriorityQueue(); pq.enqueue('aa',2); pq.enqueue('aba',4); pq.enqueue('jjjj',8); pq.enqueue('aaaaaaa',8); pq.enqueue('aa',-1); console.log(pq.print());
Linked list は順序付けられた要素のセットを格納しますが、要素である array とは異なります。リンクされたリストは連続して配置されません。各要素は、要素自体を格納するノードと、次の要素を指す参照 (ポインター) で構成されます。
段落を書くためです セクションをテストするので、関数が一緒に書かれないように、最初に分けて、後でまとめます。
function PriorityQueue(){ // 按优先级从小到大排列, var queue=[]; function QueueElement(ele,prior){ this.element=ele; this.prior=prior; } this.enqueue=function(ele,prior){ //循环遍历队列内所有元素,如果当前优先级小,则放在该位之前 var curr=new QueueElement(ele, prior); if(queue.length==0){ queue.push(curr); }else{ if(curr.prior<=queue[0].prior){ queue.splice(0,0,curr); }else{ queue.push(curr); } } } this.print=function(){ return queue; } }var pq=new PriorityQueue(); pq.enqueue('aa',2); pq.enqueue('aba',4); pq.enqueue('jjjj',8); pq.enqueue('aaaaaaa',8); pq.enqueue('aa',-1); console.log(pq.print());
this.print=function(){ var result=[]; for(let j = 0, length2 = items.length; j < length2; j++){ result[j]=items[j].element; } return result; }
append(para) 在链表尾部添加元素appendAt(element,index) 在指定位置添加元素deleteAt(index) 删除指定位置的链表元素getHead() 获得链表头元素size() 获得链表大小print() 打印出链表内容 toString() 输出链表元素的内容indexOf(para) 查找元素如果在链表中找到了就返回他的位置,没找到就返回-1isEmpty() 判断链表是否为空size() 获取链表长度
function LinkList(){ let Node=function(element){ this.element=element; this.next=null; }; var list=[]; let length=0; let head=null; let currNode=null; this.append=function(para){ //链表尾部追加元素 var node=new Node(para); var current;//一直指向上一个添加的节点 if(head==null){ //插入第一个元素 head=node; currNode=head; // console.log(head); }else{ //不是第一个元素 //上一个的next指针指向当前node; currNode.next=node; // console.log(currNode); currNode=node; } length++; // list.push(node); } this.getHead=function(){ return head; } this.appendAt=function(element,index){ if(index>=0 && index<=length){ var node=new Node(element); var current=head; var previous; var position=0; if(index==0){ node.next=current; head=node; }else{ while(position++<index){ previous=current; current=current.next } node.next=current; previous.next=node; } length++; // return }else{ alert("参数错误"); } } this.deleteAt=function(index){ //从特定位置移除一个元素,index索引 if(index>=0 && index<length){ var previousNode=null; var node=head; var position=0; if(index==0){ head=node.next; return node.element; }else{ // console.log(node); while(position++<index){ // console.log(node); previousNode=node; node=node.next; } previousNode.next=node.next; return node.element; } }else{ alert("参数不正确!"); return null; } length--; } this.size=function(){ return list.length; } this.print=function(){ var result=[]; for(let i = 0, length1 = list.length; i < length1; i++){ result[i]=list[i]; } return result; } }
var linkList=new LinkList(); linkList.append('lorry1'); linkList.append('lorry2'); linkList.append('lorry3'); linkList.appendAt('lorry4',0); linkList.appendAt('lorry5',0);// 那么当前链表的元素顺序是 lorry5,lorry4,lorry1,lorry2,lorry3console.log(linkList.deleteAt(2)); console.log(linkList.getHead().next);//获取头元素的下一个元素
PHP はスタック データ構造とブラケット マッチングを実装します
PHP は 2 つのスタックを使用してキュー関数を実装します
phpリニアテーブルのプッシュとポップの詳しい説明
以上がJS スタック、キュー、リンク リスト データ構造の実装コード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。