Data structures 包含单个整数的队列

Data structures 包含单个整数的队列,data-structures,Data Structures,我们有一个队列,它只包含一个整数,比如a。 现在,a可以取不同的值,即最初a=2。当我向队列中添加另一个数字时,它将变为24。如果我再加一个整数,比如说5,它就会变成245。当我从队列中删除一个元素时,它会变为24,然后变为2,然后变为空,依此类推 我们可以有一种情况,其中有前导和尾随0,即a=000123。但由于a是一个整数,因此在内部它将表示为123。因此,我们如何执行从该队列元素中删除元素的操作,并且仍然确保按预期表示。i、 e.当删除3,2,1时,我们内部将有0,但我们希望确保不会丢失3

我们有一个队列,它只包含一个整数,比如a。 现在,a可以取不同的值,即最初a=2。当我向队列中添加另一个数字时,它将变为24。如果我再加一个整数,比如说5,它就会变成245。当我从队列中删除一个元素时,它会变为24,然后变为2,然后变为空,依此类推

我们可以有一种情况,其中有前导和尾随0,即a=000123。但由于a是一个整数,因此在内部它将表示为123。因此,我们如何执行从该队列元素中删除元素的操作,并且仍然确保按预期表示。i、 e.当删除3,2,1时,我们内部将有0,但我们希望确保不会丢失3个0的线索

现在需要注意的是,内部a将表示为123。但是我们可以使用额外的变量来跟踪前导零

我的解决方案是使用一个整数来跟踪a(作为字符串)的长度,并对这样转换为字符串的字符串执行操作。如果a=00123,len(a)=5,那么我们有2个前导0。因此,当a.remove()被调用为3,2,1时,我们知道实际上有两个前导0

我的解决方案正确吗? 还有更好的办法吗


谢谢

嗯,您似乎在描述堆栈而不是队列(添加2,然后添加4,然后添加5;然后删除5,然后添加4,然后添加2)

我想说,最好的解决方案是使用真正的堆栈或队列,最好是内置在您使用的任何语言的标准库中。如果您需要添加的位数超过您的语言的
int
long
所能表示的位数,会发生什么情况

但是,假设您有(奇怪的)约束,这意味着您需要将其实现为单个整数,那么我觉得您的解决方案还可以

请注意,实际上不需要将任何内容转换为字符串

下面是我提出的一些伪/C代码:

类MyStack{
int leadingZeros=0;
int值=0;
公共空白添加(int i){
如果(值==0&&i==0){
引线零++;
}否则{
值=值*10+i
}
}
公共int-Remove(){
如果(值==0){
前导零--;
返回0;
}否则{
int i=值%10;
数值/=10;
返回i;
}
}
}

注意,我假设你只会增加一个数字,并且我已经排除了任何错误处理。

你需要考虑多组零点。例如“001001”

有了这个,我们可以得到主要的算法:

def dropLeadingZeros(stack):
     "Remove any leading zeros, at the bottom of the stack"
     # Another stack, to hold the values we
     # pop from the main stack.
    accum = DigitStack()
    while stack:  # not empty
        digit = stack.pop()
        accum.push(digit)
   # Drop the last zeros.
   accum.dropZeros()
   # Put it all back, except for the leading zeros.
   while accum:  # not empty
       digit = accum.pop()
       stack.push(digit)

听起来像是在描述堆栈,而不是队列。在任何情况下,为什么不使用一个真正的堆栈/队列,每个数字添加一个元素呢?首先,我对混淆堆栈和队列表示歉意。它应该是一个队列。有了这个条件,我想答案是相似的。为了澄清,是的,队列只包含一位数字。
def dropLeadingZeros(stack):
     "Remove any leading zeros, at the bottom of the stack"
     # Another stack, to hold the values we
     # pop from the main stack.
    accum = DigitStack()
    while stack:  # not empty
        digit = stack.pop()
        accum.push(digit)
   # Drop the last zeros.
   accum.dropZeros()
   # Put it all back, except for the leading zeros.
   while accum:  # not empty
       digit = accum.pop()
       stack.push(digit)