Perl 实现一个堆栈

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.

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程