为什么我的推送和流行方法不起作用?

时间:2011-09-27 02:06:53

标签: perl stack push pop

我正在尝试在Perl中实现一个堆栈,我有一个数组。我想在数组上推送项目,弹出项目并打印出新数组,如下所示:“1,2,3,5,6

我该怎么做?我的代码只是将数字6添加到数组的顶部。

#!usr/bin/perl

@array = 1..5;
push @array, 6; #Push the number 6 into the array 
pop @array, 4; #Pop the number 4 out of the array
print "The array is now $array[-1].\n";

3 个答案:

答案 0 :(得分:8)

首先,使用use strict; use warnings;

pop @array, 4;应该做什么?

弹出四个元素?

splice(@array, -4);

将最后一个元素替换为值4?

$array[-1] = 4;

过滤掉值4?

@array = grep { $_ != 4 } @array;

参考:


顺便说一句,#usr/bin/perl毫无意义。它应该是#!/usr/bin/perl

顺便说一下,换行符的转义序列为\n,而不是/n

答案 1 :(得分:4)

堆栈的整个要点是您只能从顶部访问项目。您只能将项目推到堆栈顶部或从堆栈顶部弹出一个项目。中间的元素无法访问。使用Perl的shift和unshift函数,您还可以实现队列和出队(或双端队列)。

#!/usr/bin/perl
use strict;
use warnings;

my @array = 1..5;

push @array, 6;
push @array, 7;

my $top = pop @array;

print "Top was $top\n";
print "Remainder of array is ", join(", ", @array), "\n";

答案 2 :(得分:0)

语法不正确:pop @array, 4;

pop最多应该使用一个参数(数组)。它将弹出数组堆栈中的最后一个元素,而shift从堆栈中获取第一个元素。