Username: Password:

perl实例分析教程之十四
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00


  十、用关联数组创建数据结构

  用关联数组能够模拟在其他高级语言中常见的多种数据结构,本节讲述怎样用之实现:链表、结构和树。

  2、结构

  许多编程语言能够定义结构(structure),即一组数据的集合。结构中的每个元素有其自己的名字,并通过该名字来访问。

  Perl不直接提供结构这种数据结构,但能够用关联数组来模拟。例如模拟C语言中如下的结构:

  struce{

  int field1;

  int field2;

  int field3; }mystructvar;

  我们要做的是定义一个含有三个元素的关联数组,下标分别为field1、field2、field3,如:

  %mystructvar = ("field1" , "" ,

  "field2" , "" ,

  "field3" , "" ,);

  像上面C语言的定义相同,这个关联数组%mystrctvar有三个元素,下标分别为field1、field2、field3,各元素初始值均为空串。对各元素的访问和赋值通过指定下标来进行,如:

  $mystructvar{"field1"} = 17;

  3、树

  另一个经常使用的数据结构是树。树和链表类似,但每个节点指向的元素多于一个。最简单的树是二叉树,每个节点指向另外两个元素,称为左子节点和右子节点(或称孩子),每个子节点又指向两个孙子节点,依此类推。

  注:此处所说的树像上述链表相同是单向的,每个节点指向其子节点,但子节点并不指向父节点。

  树的概念能够如下描述:

  因为每个子节点均为一个树,所以左/右子节点也称为左/右子树。(有时称左/右分支)

  第一个节点(不是任何节点的子节点的节点)称为树的根。

  没有孩子(子节点)的节点称为叶节点。

  有多种使用关联数组实现树结构的方法,最好的一种应该是:给子节点分别加上left和right以访问之。例如,alphaleft和alpharight指向alpha的左右子节点。下面是用此方法创建二叉树并遍历的例程:

  1 : #!/usr/local/bin/perl

  2 :

  3 : $rootname = "parent";

  4 : %tree = ("parentleft", "child1",

  5 : "parentright", "child2",

  6 : "child1left", "grandchild1",

  7 : "child1right", "grandchild2",

  8 : "child2left", "grandchild3",

  9 : "child2right", "grandchild4");

  10: # traverse tree, printing its elements

  11: &print_tree($rootname);

  12:

  13: sub print_tree {

  14: local ($nodename) = @_;

  15: local ($leftchildname, $rightchildname);

  16:

  17: $leftchildname = $nodename . "left";

  18: $rightchildname = $nodename . "right";

  19: if ($tree{$leftchildname} ne "") {

  20: &print_tree($tree{$leftchildname});

  21: }

  22: print ("$nodenamen");

  23: if ($tree{$rightchildname} ne "") {

  24: &print_tree($tree{$rightchildname});

  25: }

  26: }

  结果输出如下:

  grandchild1

  child1

  grandchild2

  parent

  grandchild3

  child2

  grandchild4

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅