Arrays 在没有内置方法的情况下实现入队和出队

Arrays 在没有内置方法的情况下实现入队和出队,arrays,angular,typescript,queue,Arrays,Angular,Typescript,Queue,我有两个函数,一个用于出列,另一个用于将用户输入的项目分别从/排入数组 我对队列的了解 我对队列的了解非常有限,我知道它们类似于堆栈,但不像堆栈那样是后进先出(LIFO),它们是先进先出(FIFO),因此基本上,首先进入数组的任何元素都将首先从数组中取出 我现在正在尝试的 我现在要做的是使用Enqueue按钮,将项目添加到数组中,同时每次按下按钮将变量计数增加1,以便将每个新用户输入添加到下一个数组位置。在dequeue函数中,我通过增加dequeueCount变量,将dequeue数组的每个元

我有两个函数,一个用于出列,另一个用于将用户输入的项目分别从/排入数组

我对队列的了解

我对队列的了解非常有限,我知道它们类似于堆栈,但不像堆栈那样是后进先出(LIFO),它们是先进先出(FIFO),因此基本上,首先进入数组的任何元素都将首先从数组中取出

我现在正在尝试的

我现在要做的是使用
Enqueue
按钮,将项目添加到数组中,同时每次按下按钮将变量计数增加1,以便将每个新用户输入添加到下一个数组位置。在dequeue函数中,我通过增加
dequeueCount
变量,将
dequeue
数组的每个元素设置为等于原始数组的每个元素

问题出在哪里 这里的问题是,当我按下“出列”按钮时,我基本上需要对所有内容重新编制索引,以便在我将一个元素出列后,索引1处的元素现在采用位置索引0,基本上我总是希望将元素0处的项出列

队列.component.ts

从'@angular/core'导入{Component,OnInit,Input};
@组成部分({
选择器:“应用程序队列”,
templateUrl:'./queue.component.html',
样式URL:['./queue.component.css']
})
导出类QueueComponent实现OnInit{
@Input()userInput:String
数组=[]
arrayCount=0
出列计数=0
出列数组=[]
退出队列=空
构造函数(){}
恩戈尼尼特(){
}
enQ(){
this.array[this.arrayCount++]=this.userInput;
}
deQ(){
deQ(){
如果(this.arrayCount>0){
this.dequeueArray[this.dequeueCount++]=this.array[this.dequeueCount-1]
this.dequeued=this.dequeueArray[this.dequeueCount-1]
这是arrayCount--
}
否则{
this.dequeued=“没有其他东西可以排队”
}
}
}
我试图在这里显示数组的当前值


阵列的输入:

排队 出列 阵列 {{array}

出列项 {{dequeued}}


当我按下enqueue函数时,一切似乎都正常工作,并且在正确的位置向数组中添加了一个值,因此enqueue函数没有问题,但是使用dequeue函数时,我需要能够以某种方式将项目出列,并从数组中删除第一个项目,然后重新显示
{array}
已删除排队项目。

我认为您的方法复杂而模糊,我根据您的意图制定了一个新的方法

即使这段代码不符合您的需要,至少您可以从这段代码开始

队列.component.ts

从“@angular/core”导入{Component,Input}”;
@组成部分({
选择器:“我的应用程序”,
templateUrl:“./app.component.html”,
样式URL:[“/app.component.css”]
})
导出类AppComponent{
@Input()用户输入;
数组=[];
arrayCount=0;
dequeuedCount=0;
退出队列;
获取队列(){
常数q=[];
for(设i=this.dequeuedCount;ithis.dequeuedCount){
this.dequeued=this.array[this.dequeuedCount++];
}否则{
this.dequeued=“没有其他东西可以排队”;
}
}
}
queue.component.html


阵列的输入:

排队 出列 阵列 {{queue}json}

出列项 {{dequeued | json}}


stackblitz:

试试这个片段,它应该可以解决问题

import { Component } from "@angular/core";

@Component({
  selector: "my-app",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.css"]  
})
export class AppComponent {
  userInput: String;

  array = [];
  dequeued = [];

  enQ() {
    this.array.push(this.userInput);
  }

  deQ() {
    if (this.array.length > 0) {
      this.dequeued.push(this.array[this.array.length - 1]);
      this.array.shift();
    }
  }
}


<div>
   <label for="userInput">Input to Array:
   <input [(ngModel)]="userInput" type="text">
   </label><br>
   <button (click)="enQ()">Enqueue</button>
   <button (click)="deQ()">Dequeue</button>

   <h3>Arrays</h3>
   <p> {{ array |json}} </p>

   <h3>Dequeued Item</h3>
   <p> {{ dequeued|json}} </p>
</div>
从“@angular/core”导入{Component};
@组成部分({
选择器:“我的应用程序”,
templateUrl:“./app.component.html”,
样式URL:[“/app.component.css”]
})
导出类AppComponent{
userInput:String;
数组=[];
出列=[];
enQ(){
this.array.push(this.userInput);
}
deQ(){
如果(this.array.length>0){
this.dequeued.push(this.array[this.array.length-1]);
this.array.shift();
}
}
}
阵列的输入:

排队 出列 阵列 {{array}json}

出列项 {{dequeued | json}}

在代码中,您缺少
dequeue
变量上的
pipe
,因此当它保存数组时,值将不会由角度渲染


这很复杂,因为我们的目标是只使用一个数组和一个计数来实现排队和出列,以便更好地了解这些函数如何工作以及队列如何工作work@Banani720好的,我已经更新了我的帖子。我不确定使用
Array.prototype.slice是否正确。所以从技术上讲
.slice()
可以工作,但会给函数一个O(n)时间复杂度,对吗?我得到的提示是,在这个场景中,我需要两个索引来使用线性时间进行操作complexity@Banani720我的意思是,如果你最初的目标是了解它在引擎盖下是如何工作的,我不确定使用它是否合适。对于那些告诉我这种方法很复杂的人,我知道是这样,这是基于这是一项任务,我只需要使用数组、计数和索引就可以入队和出队,而不需要使用内置函数,如push、shift等。这项工作很有效,我可能应该把我的问题写得更好,我已经编辑了标题并相应地更新了问题文本,希望它现在更有意义,我不能使用任何内置的乐趣摩擦