Почему мои методы push и pop не работают? - PullRequest
0 голосов
/ 27 сентября 2011

Я пытаюсь реализовать стек в 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 ]

8 голосов
/ 27 сентября 2011

Перво-наперво, используйте 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.

Кстати, escape-последовательность для новой строки - \n, а не /n.

4 голосов
/ 27 сентября 2011

Весь смысл стека в том, что вы можете получить доступ только к элементам сверху.Вы можете только поместить предмет на вершину стека или вытолкнуть предмет с верха стека.Элементы в середине не доступны.Используя функции сдвига и снятия в Perl, вы также можете создавать очереди и очереди (или двусторонние очереди).

#!/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";
0 голосов
/ 27 сентября 2011

Неверный синтаксис: pop @array, 4;

pop должен принимать не более одного аргумента (массив). Он извлечет последний элемент из стека массивов, тогда как shift берет первый элемент из стека.

...