اذهب إلى المحتوى

السؤال

نشر (معدل)

Write a program to create a linked list of 30 integers by adding a node at the front of the linked list. Print the created linked list in its normal order and print it again in reverse order.

هل من الممكن حل هذا السؤال؟ 

تم التعديل في بواسطة عبود سمير
تنسيق العنوان

Recommended Posts

  • 1
نشر

مرحباً ..
يُمكنك عمل المطلوب من خلال البرنامج التالي:

#include <iostream>

using namespace std;

// تعريف بنية العقدة التي تتكون منها القائمة المترابطة
struct node
{
    int data; // البيانات عبارة عن أعداد
    node *next; // مؤشر على العقدة القادمة
};

// دالة مساعدة لطباعة البيانات بشكل معاكس إنطلاقا من عقدة ما
void printReverse(node *head)
{
    // شرط التوقف
    if (head == NULL)
        return;

    printReverse(head->next); // إستعمال الطريقة التعاودية

    cout << head->data << " ";
}

// تعريف صنف القائمة المترابطة
class LinkedList
{
private:
    node *head,*tail;
public:
    LinkedList() // الدالة البانية
    {
        head = NULL;
        tail = NULL;
    }

    void addNode(int n) // دالة لإضافة عقدة جديدة للقائمة
    {
        node *tmp = new node;
        tmp->data = n;
        tmp->next = NULL;

        if(head == NULL)
        {
            head = tmp;
            tail = tmp;
        }
        else
        {
            tail->next = tmp;
            tail = tail->next;
        }
    }

    void printList() // طباعة بيانات القائمة المترابطة
    {
        node *n = this->head;
        while (n != NULL)
        {
            cout << n->data << " ";
            n = n->next;
        }
    }

    void printReverseList() // طباعة بيانات القائمة المترابطة بشكل عكسي
    {
        printReverse(this->head); // إستعمال الدالة المساعدة السابقة مع تمرير رأس القائمة لها
    }


    void fillList(int total) // ملأ القائمة بعدد محدد من العناصر
    {
        int data;
        for (int i = 0; i < total; ++i) {
            cout << "data " << i << " = " << endl;
            cin >> data;
            addNode(data); // إستعمال دالة الإضافة
        }
    }
};

int main() {

    LinkedList l; // تعريف قائمة مترابطة
    l.fillList(6); // ملأ القائمة ب 6 عناصر يُمكنك تغيير العدد حسب ما تريد

    l.printList(); // طباعة عناصر القائمة بشكلها الطبيعي
    cout << endl;
    l.printReverseList(); // طباعة عناصر القائمة بالشكل العكسي
    return 0;
}

و هذه نتيجة لتجربة البرنامج:

cpp_linkedlist.thumb.PNG.c38cb967dec58245baa16aa157360989.PNG

يُمكنك تجربة البرنامج من خلال الرابط التالي: إضغط هنا
للإطلاع على تفاصيل أكثر حول بنى أو هياكل المُعطيات أدعوك إلى قراءة توثيق موسوعة حسوب حول الموضوع: القوائم المترابطة توثيق موسوعة حسوب و بنى المعطيات ( Data Structure ) توثيق موسوعة حسوب

بالتوفيق

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...