Perl 实现一个堆栈
在Perl中,堆栈是一种线性数据结构,遵循 LIFO (后进先出)或 FILO (先进后出)的顺序。更简单地说,堆栈是一个数组,其中的插入和删除只发生在称为堆栈顶部的一端。
推入 是将元素插入堆栈的过程。
弹出 是将堆栈中最顶端的元素移除的过程。
创建一个堆栈
在Perl中创建一个堆栈是相当简单的。我们所要做的就是声明一个数组。
这个堆栈可以是空的,如下所示。
@stack;
或者它可以被初始化。
@stack = (1, 2, 3);
向堆栈中推送项目
推送可以用 push() 函数或 splice() 函数来完成。
- 使用push()推送
语法: push(@stack, list);
- 使用splice()推送。
-
@stack – 要进行推送的堆栈。
- list – 要推入堆栈的元素。这些元素可能是标量、数组、哈希或这些元素的任何组合。
示例:
#!/usr/bin/perl
# Intitialising the Stack
@stack = (1..3);
# Original stack
print "Original Stack: @stack";
# Scalar to be pushed
scalar = "scalar";
# Array to be pushed
@array = ("a", "r", "r", "a", "y");
# Hash to be pushed
%hash = ("Geeks" => 10,
"for Geeks" => 20);
# scalars, arrays and hashes can be
# inserted at the same time
push(@stack, (scalar, @array, %hash));
# Updated Stack after
# Push operations
print("\nUpdated Stack: @stack");
输出:
Original Stack: 1 2 3
Updated Stack: 1 2 3 scalar a r r a y Geeks 10 for Geeks 20
- 使用splice()推送。
语法: splice(@stack, scalar(@stack), 0, list);
参数:
- splice()函数在@stack的末尾添加’list’。
- ‘list’可以是一个标量,一个数组或一个哈希。
示例:
#!/usr/bin/perl
# Intitialising the Stack
@stack = (1..3);
# Original stack
print "Original Stack: @stack";
# Scalar to be pushed
scalar = "scalar";
# Array to be pushed
@array = ("a", "r", "r", "a", "y");
# Hash to be pushed
%hash = ("Geeks" => 10,
"for Geeks" => 20);
# scalars, arrays and hashes can be
# inserted at the same time
splice(@stack, scalar(@stack), 0,
(scalar, @array, %hash));
# Updated Stack after
# Push operations
print("\nUpdated Stack: @stack");
输出:
Original Stack: 1 2 3
Updated Stack: 1 2 3 scalar a r r a y Geeks 10 for Geeks 20
从堆栈中弹出元素
弹出可以用pop()函数或splice()函数来完成。
- 使用pop()进行弹出。
语法: $popped_element = pop(@stack);
参数:
- pop()函数返回弹出的元素。
- $popped_element包含从堆栈中弹出的元素。
示例:
#!/usr/bin/perl
# Intitialising the Stack
@stack = (1..3);
# Original stack
print "Original Stack: @stack";
# Topmost element i.e. 3 is
# removed and returned
popped_element = pop(@stack);
# Printing popped element
print "\nPopped element:popped_element";
# Updated Stack after
# Pop operation
print("\nUpdated Stack: @stack");
输出:
Original Stack: 1 2 3
Popped element: 3
Updated Stack: 1 2
- 如果堆栈是空的,将返回undef。undef类似于Java中的NULL和Python中的None。然而,不会产生错误。
示例:
#!/usr/bin/perl
# Creating a Stack
@stack;
# undef is returned since the
# stack is empty.
# No error is raised.
popped_element = pop(@stack);
# Printing popped element
# Since it contains no value,
# hence a blank space is returned
print "Popped element:popped_element";
输出:
Popped element:
- 使用 splice() 进行弹出 : 。
语法。 $popped_element=splice(@stack, -1);
参数
- splice()函数删除堆栈的最后一个元素并返回。
- $popped_element存储返回的值。
例子
#!/usr/bin/perl
# Intitialising the Stack
@stack = (1..3);
# Original stack
print "Original Stack: @stack";
# popping using splice()
popped_element = splice(@stack, -1);
# Printing popped element
print "\nPopped element:popped_element";
# Updated Stack after
# Pop operation
print("\nUpdated Stack: @stack");
输出
Original Stack: 1 2 3
Popped element: 3
Updated Stack: 1 2
- 如果堆栈是空的,会产生一个错误。下面的代码引发了一个错误。
use warnings;
#!/usr/bin/perl
use warnings;
# Creating a Stack
@stack;
# popping using splice()
# An error is raised here
popped_element = splice(@stack, -1);
# Printing popped element
print "\nPopped element:popped_element";
# Updated Stack after
# Pop operation
print("\nStack: @stack");
Runtime Error:
Useless use of a variable in void context at /home/59c7c19979aa9e46564cd145d5fe5601.pl line 6.
Modification of non-creatable array value attempted, subscript -1 at /home/59c7c19979aa9e46564cd145d5fe5601.pl line 10.