الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

برنامج في هياكل البيانات باستخدام c++

مغلق
بدأه بسام العبسي في 22 يوليو 2012 · 4 رد · 1,314 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ......

بعد محاولات عديده وتكررارت لعمل برنامج يقوم حذف القيم الزوجية في القوائم الاحادية الديناميكية

رغم ان البرنامج لايظهر لي اي خطأ لكنه لايؤدي العمل المطلوب !!!!!!

#include <iostream>
using namespace std;

//struct
struct list
{
    int data ;
    list *next ;
};

void del_Ev(list *&head, list *&tail)
{
    list *l_tail, *node ;
    int found = 0 ;
    node = tail ;

    while(tail != NULL && !found)
    {
        if(tail->data % 2 == 0)
        found = 1 ;

        else
        {
            l_tail = tail ;
            tail = tail->next ;
        }
    }
    if(found)
    {
        if(node == tail)
        {
            head = head->next ;
            delete node;
        }
        else
        {
            l_tail->next = tail->next ;
            node = tail ;
            tail = tail->next ;
            delete node ;
        }
    }
}
int main()
{
    list *node ,*tail ,
         *head = NULL ;

    int a[] = {1, 4, 6, 3, 7, 11, 8, 9, 10} ;

    for(int i = 8 ; i <= 0 ; i--)
    {
        node = new list ;
        node->data = a ;
        node->next = head ;
        head = node ;
    }

    while(head != NULL)
    {
        tail = head->next ;
        head = head->next ;
    }

    del_Ev(head,tail) ;

    return 0 ;
}

الرجاء ايضاح لي غلطتي وسأكون شاكر لكم

#2

السلام عليكم

أولا لديك خطأ هنا

  for(int i = 8 ; i <= 0 ; i--)

عليه أن يكون هكدا:

  for(int i = 8 ; i >= 0; i--)

تم تعديل هذه المشاركة بواسطة the inventor habib في 22 يوليو 2012 في 11:27

1
#3

السلام عليكم

هذا الجزء اﻻول من السؤال وهو المختص بتعبة القائمة الموصولة بتسعة قيم ....

#include <iostream>
using namespace std;
struct list {
    int data;
    list *next;
};

void del_Ev(list *head) {
    list *tmp = new list;
    while (head) {
        if (head->data % 2 == 0) {
            tmp = head;
            head = head->next;
            delete tmp;
        }
        head = head->next;
    }
}

int main() {
    list *node = NULL, *tail = NULL, *head = NULL;
    int a[] = {1, 4, 6, 3, 7, 11, 8, 9, 10};
    for (int i = 0; i < 9; i++) {
        node = new list; // create new node ...
        node->data = a; //set a value to date element in newnode structure
        node->next = NULL; //set next to null to be end of node ... 

        if (head == NULL) {
            head = node;
            tail = node; //set tail to piont to end of list .. 
        } else {
            tail->next = node;
            tail = node;
        }
    }
    // before deleting %2 = 0;
    cout << " before deleting %2 = 0" << endl;
    list *tmp = new list;
    tmp = head;
    while (tmp) {
        cout << tmp->data << " ";
        tmp = tmp->next;
    }
    return 0;
}

المخرجات:

 before deleting %2 = 0
1 4 6 3 7 11 8 9 10 
RUN SUCCESSFUL (total time: 158ms)

اﻵن ما عليك اﻻ بتعديل الكود الخاص بعملية حذف العنصر الزوجي .....

يمكن ان يكون صيعة اﻻعلان عن الدالة بهذة الطريقة

void del_Ev(list **head);

هذا والله ولى التوفيق

1

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#4

اشكرك اخي ((the inventor habib)) على التصحيح

اما بالنسبة لأخي ))محمد عودة))

الجزء الاول من البرنامج يتطبق عندي تمام

لكن عندما استدعي الدالة مثل ماقلت لي

#include <iostream>
using namespace std;

//struct
struct list
{
    int data ;
    list *next ;
};

void del_Ev(list *head) {
    list *tmp = new list;
    while (head) {
        if (head->data % 2 == 0) {
            tmp = head;
            head = head->next;
            delete tmp;
        }
        head = head->next;
    }
}

int main() {
    list *node = NULL, *tail = NULL, *head = NULL;
    int a[] = {1, 4, 6, 3, 7, 11, 8, 9, 10};
    for (int i = 0; i < 9; i++) {
        node = new list; // create new node ...
        node->data = a; //set a value to date element in newnode structure
        node->next = NULL; //set next to null to be end of node ...

        if (head == NULL) {
            head = node;
            tail = node; //set tail to piont to end of list ..
        } else {
            tail->next = node;
            tail = node;
        }
    }
    void del_Ev(list **head);
    // after deleting %2 = 0;
    cout << " after deleting %2 = 0" << endl;
    list *tmp = new list;
    tmp = head;
    while (tmp) {
        cout << tmp->data << " ";
        tmp = tmp->next;
    }
    return 0;
}

الناتج يكون لدي كالتالي

after deleting %2 = 0
1 4 6 3 7 11 8 9 10

العقد ذو القيم الزوجية ليست محذوفه

الشيء الاخر

while (head) {
        if (head->data % 2 == 0) {
            tmp = head;
            head = head->next;
            delete tmp;
        }
        head = head->next;

فمثلاً اذا تحقق الشرط سيقوم بتنفيذ الامر التالي

  head = head->next;

وعند الخروج من الif

سينفذ هذه التعليمه مره اخرى

  head = head->next;

لم افهم ذها الجزء

تم تعديل هذه المشاركة بواسطة بسام العبسي في 22 يوليو 2012 في 18:05

#5

الكود:

اقتباس
#include <iostream>
using namespace std;

struct list
{
    int data;
    list *next;
};

void del_Ev(list *&head, list *&tail)
{
    list *ptr = head, *bef_tail;
    while (ptr)
    {
        if (tail->data % 2 == 0)
        {
            list *bef_ptr = ptr;
            if (tail == head)
            {
                list *node = tail;
                head = head->next;
                delete node;
                tail = tail->next;
            }
            else
            {
                list *node = tail;
                tail = tail->next;
                bef_tail->next = tail;
                delete node;
            }
        }
        else
        {
            bef_tail = tail;
            tail = tail->next;
        }
        ptr = ptr->next;
    }
}

int main()
{
    list *node = NULL, *tail = NULL, *head = NULL;
    int a[] = {1, 4, 6, 3, 7, 11, 8, 9, 10};
    for (int i = 0; i < 9; i++)
    {
        node = new list; // create new node ...
        node->data = a; //set a value to date element in newnode structure
        node->next = NULL; //set next to null to be end of node ...

        if (head == NULL)
        {
            head = node;
            tail = node; //set tail to piont to end of list ..
        }
        else
        {
            tail->next = node;
            tail = node;
        }
    }

    tail = head;
    // after deleting %2 = 0;
    del_Ev(head, tail);
    list *tmp = new list;
    tmp = head;
    while (tmp)
    {
        cout << tmp->data << " ";
        tmp = tmp->next;
    }
    return 0;
}

الخرجات:

1 3 7 11 9 Press [Enter] to close the terminal ...

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…