2011-09-27 63 views
0

我想在Perl中实现一个堆栈,我有一个数组。我想推动阵列上的项目,弹出项目并打印出如下新阵列:“1,2,3,5,6为什么我的push和pop方法不起作用?

我该怎么做?我的代码只是将数字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"; 
+4

你期望'pop @array,4;'做什么? – hobbs

+8

你没有严格使用,你没有使用警告。 – tchrist

+0

您应该在开发Perl代码时始终启用警告。 – tadmc

回答

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"; 
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

0

语法不正确(或双端队列。):pop @array, 4;

pop应该最多只有一个参数(阵列)。它将弹出阵列堆栈中的最后一个元素,而shift从堆栈中取出第一个元素。

+0

它可能相当于'pop(@array),4;',使用逗号运算符。 –

+0

是的,而基于他的描述,他想拼出包含值为“4”的元素 – vol7ron