2011-09-27 65 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