• 第章 实现复杂的数据结构


    用户定义数据结构:
    
    perl 中不存在这种内建的模板功能,一种常用的方式就是使用散列表来仿真结构类型,如图2-1所示:
    
    例子 :矩阵:
    
    在我们讨论这个例子之前,你必须知道如果你需要的是一个好的,高效的矩阵实现的话,就应该查看一下CPAN中的PDL模块
    
    在Perl中使用数组的数组是最为直观的一种矩阵表达方式,因为Perl不直接支持二维数组:
    
    zjzc01:/root/hei# cat a17.pl 
    @matrix=([1,2,3],[4,5,6],[7,8,9]);
    
    print @matrix;
    print "
    ";
    ##将第1行,第2列的元素值改为100
    print $matrix[1][2]."
    ";
    
    $matrix[1][2]=100;
    print $matrix[1][2]."
    "; 
    
    zjzc01:/root/hei# perl a17.pl 
    ARRAY(0x12c5d48)ARRAY(0x12e25a8)ARRAY(0x12e2620)
    6
    100
    
    
    ($line =~ /^([A-Za-z]w*)/)  ###匹配字母开头
    
    w 匹配一个字母、数字或下划线字符,相当于[a-zA-Z_0-9]
    
    zjzc01:/root/hei# cat a18.pl 
    sub matrix_read_file {
       my ($filename) = @_;
       open (F,$filename) || die;
    while ($line=<F>){
         chomp ($line);
    next if $line=~/^s*$/;  ##开头后面0个或者而多个空格结尾 ,表示空行
    
    if ($line =~ /^([A-Za-z]w*)/){
        $matrix_name=$1}
       else{
        my @row = split (/s+/,$line);
       push (@{$matrix_name},@row);#将行数组插入到外层的矩阵数组中
    print @{$matrix_name}[0]->[2];
    }
    };
    print $matrix_name;
    print "
    ";
    close (F);
    };
    &matrix_read_file(aa);
    zjzc01:/root/hei# perl a18.pl 
    3qqqa2
    zjzc01:/root/hei# cat aa
    abc
    1 2 3
    a1
    1 b q
    2
    3
    a2
    
    散列表的散列表:
    
    如果矩阵大而稀疏(只有一小部分的元素值不为0)的话 
    
    200zjzc01:/root/hei# cat a19.pl 
    $matrix={0=>{2=>100},1=>{0=>200},2=>{1=>300}};
    print $matrix;
    print "
    ";
    print $$matrix{0}{2};
    print "
    ";
    print $$matrix{1}{0};
    
    zjzc01:/root/hei# perl a19.pl 
    HASH(0xbc6518)
    100
    200zjzc01:/root/hei# 
    
    格式化打印工具:
    
    在构建复杂的数据结构时,如果手头能有一种供调试用的格式打印工具就好了。
    
    zjzc01:/root/hei# cat a20.pl 
    @sample=(11.233,{3=>4,"hello"=>[6,7]});
    print @sample;
    print "
    ";
    print "111111111
    ";
    print $sample[1]{hello}[0];
    print "
    ";
    zjzc01:/root/hei# perl a20.pl 
    11.233HASH(0x196e2c0)
    111111111
    6
    

  • 相关阅读:
    poj2187 Beauty Contest (凸包 + 旋转卡壳)
    codevs1298, hdu1392 (凸包模板)
    Codeforces Round #427 (Div. 2) E. The penguin's game (交互题,二进制分组)
    poj1655 Balancing Act (dp? dfs?)
    poj1654 -- Area (任意多边形面积)
    codeforces#426(div1) B
    poj1011 Sticks (搜索经典好题)
    考试题
    使用SMM框架开发企业级应用-----打印机案例
    使用SMM框架开发企业级应用-----Spring简介即Spring Ioc
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351109.html
Copyright © 2020-2023  润新知