سؤال

أنا أكتب برنامج Perl النصي وأرغب في استخدام بنية بيانات شجرة n-ary.

هل هناك تطبيق جيد متاح كرمز مصدر (بدلاً من جزء من مكتبة بيرل)؟

هل كانت مفيدة؟

المحلول

إضافة إلى ما قاله ماثيو بالفعل، يبدو أن الوحدات التالية ستكون مناسبة:

الشجرة::ناري
الشجرة::بسيطة
شجرة

نصائح أخرى

لا أفهم حقًا سبب رغبتك في أن يكون "مصدرًا" وليس مكتبة Perl، ولكن يمكنك تنزيل المصدر لأي وحدة CPAN.

لم أستخدمه، ولكن شجرة يبدو لملء الاحتياجات الخاصة بك.

اعتمادًا على ما تحتاج إليه من بنية شجرة، قد لا تحتاج إلى أي تطبيق تم إنشاؤه مسبقًا.يدعمها Perl بالفعل باستخدام صفائف من المصفوفات.

على سبيل المثال، تمثيل بسيط لهذه الشجرة

             t
           /   \
          a     d
         / \   / \
        b   c e   f

يمكن تمثيله برمز Perl التالي:

$tree = [ t => [ a => [ b => [], c => [] ]
                 d => [ e => [], f => [] ] ] ];

هنا، تمثيل الشجرة هو كأزواج متداخلة:أولاً العنصر (في هذه الحالة، الحرف)، ثم مرجع مصفوفة مجهولة تمثل أبناء هذا العنصر.لاحظ أن => هي مجرد فاصلة فاخرة في لغة Perl تعفيك من الاضطرار إلى وضع علامات الاقتباس حول الرمز المميز على يسار الفاصلة، بشرط أن تكون كلمة واحدة.من الممكن أيضًا كتابة الكود أعلاه على النحو التالي:

$tree = [ 't', [ 'a' , [ 'b' , [], 'c' , [] ]
                 'd' , [ 'e' , [], 'f' , [] ] ] ];

فيما يلي مُراكم بسيط للعمق الأول لجميع العناصر الموجودة في الشجرة:

sub elements {
    my $tree = shift;

    my @elements;
    my @queue = @$tree;
    while (@queue) {
        my $element  = shift @queue;
        my $children = shift @queue;
        push @elements, $element;
        unshift @queue, @$children;
    }

    return @elements;
}

@elements = elements($tree)     # qw(t a b c d e f)

(للعرض أولاً، قم بتغيير الخط unshift @queue, @$children ل push @queue, @$children)

لذا، اعتمادًا على العمليات التي تريد تنفيذها على شجرتك، قد يكون أبسط شيء هو استخدام دعم Perl المدمج للمصفوفات ومراجع المصفوفات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top