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

أرجو مساعدتي

مغلق
بدأه المشاكسة في 23 أبريل 2004 · 11 رد · 1,107 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاتة ....

لدي مشكلة في linked list وهي كيف أعمل ترتيب تصاعدي للقائمة عن طريق عنوان

العنصر وليس عن طريق الأرقام الموجودة داخل الnode ....

أرجو من لدية خبره في linked list مساعدتي ...

مع العلم أنني أستطيع ترتيب العناصر عن طريق الأرقام ولكن لا اعرف كيف أستطيع

ترتيبها عن طريق عنوان العنصر.....

ولكم الشكر الجزيل .....

#2

السلام عليكم ,,

لو اعطيتينا الكود الخاص بالترتيب بالارقام سنجيبك بشكل مباشر باذن الله ,,

وكل ماحاولتي تسهيل الامر علينا كل ماسنجيبك بشكل أسرع ,,

وفقك الله ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

في بادئ الأمر شكرا علي أهتمامك وأعتذر لعدم أرفاقي الكود

وها هو الكود تبع الترتيب التصاعدي لي ال linked list

void swap(linked *p1,linked *p2)
{
int s;
s=p1->number;
p1->number=p2->number;
p2->number=s;
}

vid sort ()
{
linked *p1,*p2;
if (list==NULL)
cout<<"the list is empty\n";
else
{p1=list;
while (p1->next!=NULL)
{
p2=p1->next;
while(p2!=NULL)
{
if (p2->number<p1->number)
swap(p1,p2);
;p2=p2->nexo\t
}
p1=p1->next;
}
}
}

ولكن هذا الكود يرتب علي حسب الأرقام الموجوده داخل ال node

وأنا أريد ترتيبها علي حسب العنوان.....

تم تعديل هذه المشاركة بواسطة HGB في 25 أبريل 2004 في 20:26

#4

لا يوجد حل للمشكلة؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

#5

السلام عليكم ,,

كيف تريدين ترتيبها حسب العنوان ؟ هي في الأصل مررتبة حسب العنوان ,, حيث أن العقدة Node الأولى موجودة في أول ال List والثانية هي p->next وهكذا الثانية والثالثة ,,

اما اذا كنتي تريدين ترتيبها عكسيا بطريقة تنازلية حسب العنوان فهذا أمر آخر ,,

وضحي أكثر مع ذكر مثال ولو مبسط لأفهم أكثر ,, ولاتشيلي هم :)

وفقك الله ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#6

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

شكرا لك يا HGB لأني بصراحة فقدت الأمل في أنه أحد ممكن يرد علي ......

بالنسبه لمثال التوضيح فمثلا لو كانت لدينا الأرقام التالية في داخل ال LINKED LIST وهي

3,1,2 (تقرأمن اليسار الي اليمين) فأريد وضع وضع 1 مكان 3 ووضع 3 مكان 2 فتصبح بهذه

الطريقة 1,3,2 ثم أضع 2 مكان 3 فتصبح 1,2,3 وتتم هذه العمليات ليس عن طريق أن 3

أكبر من 1 او أكبر من 2 ولكن تتم عن طريق عنوان كل رقم منهم حيث أن ال NODE يكون

بها مثلا الرقم 3 ويكون بها عنوان هذا الرقم ......

أتمني أن يكون المثال قد أوضح الفكرة وأرجو الرد .........

#7

ما زلت لا أفهم مالمطلوب في السؤال

أرجو التوضيح ببعض التفصيل

لأني بصراحة صدعت وأنا أقرى المشاركة أكثر من مرة حتى أحدد المشكلة.

#8

السلام عليكم ,,

:) هاها

أختي المشاكسة ,, كيف تكون عناوين العقد في ال List غير مرتبة ؟!!

لايمكن أبدا أن تكون العناوين الخاصة بالعقد غير مرتبة في الأصل ,,

لكن يمكن أن أبرر سؤالك بطريقة أخرى وأقول :

العقد يتم انشاءها بصيغ عشوائية في الذاكرة ,, وفي أماكن متفرقة ,, لكنها تكون مرتبة في انشائها ,, يعني عندما تنشئين العقدة الأولى تكون رقمها 0 مثلا والثاني يجب أن تكون 1 والثالثة 2 ,, وهكذا ,

لكن عناوين هذه العقد في الذاكرة ram تكون عشوائية ,, يعني ممكن تكون العقدة الأولى عنوانها 0x22fd33 والثانية 0xcffc344c والثالثة رقم عشوائي آخر وهكذا ,,

في هذا الحال لايوجد سبب في الأرض يدعوكي لترتيب هذه العناوين ,, لأن الكمبيوتر يصل اليها بمعرفة الروابط في ما بينها حتى لو كانت المسافة بينهما في الذاكرة كبيرة جدا ,,

فلا يوجد سبب لترتيبها في هذه الحالة ,,

هل هذا ماكنتي تقصدين ؟

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#9

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

الفكرة سوف أشرحها علي نفس المثال الذي ذكرته في أنني لا أريد تغير أماكن ال node

ولا الارقام التي بداخلها ولكن أريد عن طريق

ال pointer أبدل بينها فمثلا next الرقم 3 يكون به عنوانها فلنفترض أن عنوانها هو

0x22fd33عن طريق هذا العنوان أربطة بي pointer مع عنوان الرقم 2 وعنوان الرقم 1

ال next ة يرتبط مع عنوان الرقم 3 وهكذا ....

سوف تصبح ال inked list شكلا غير مرتبة ولكن عن طريق ارتباط ال pointer بالعنوانين

تترتب الأرقام وأعتقد هنا أنه لانحتاج لفكرة ال swap .....

أتمني أن تكو الفكرة وصلت بالشكل الصحيح .....

#10

السلام عليكم ,,

طيب قولي مثلا أن لديكي ارقام ال nodes كالتالي ,, وستكون مرتبة في الأصل وأنا أصر على ذلك :huh:

نفرض ال nodes ,,

1 -> 2 - > 3 -> 4 ,, هكذا مرتبة فثي الاصل ,,

نريد أن نجعلها ,,

4 -> 3 -> 2 -> 1 ,,

في هذه الحال ,, علينا بتغيير كود ال Swap فقط من :

void swap(linked *p1,linked *p2)
{
int s;
s=p1->number;
p1->number=p2->number;
p2->number=s;
}

الى

void swap(linked *p1,linked *p2)
{
linked* s;
s=p1;
p1=p2;
p2=s;

}

فقط هكذا ,,

هل هذا ماتريدين ؟

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#11

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

لقد جربت الطريقة .....

وبدلت الكود ولكن الارقام مثل ما أدلخها تطلع ولا يتغير فيها شئ .......

أنا ابغاها تترتب بدون ما أحرك ال node ولكن تترتب عن طريق pointer يؤشر علي العناصر

هل وصلت المعلومة ؟؟؟؟؟؟؟؟؟؟؟؟

#12

أهلين مرة أخرى !

طيب ,, يمكن فعل ذلك ,, ولو قلتي من البداية أنكي تريدين تغيير ترتيب وليس ترتيب فقط ,, لفهمناك وساعدناك بشكل أسرع ,, هذا أمر ,,

الأمر الآخر المثال الذي أعطيتك اياه المرة السابقة لن يعمل كما في طلبك الحالي فعلا ,, لأن قيم العناصر ستكون بنفس الترتيب ,, لكن لو قلتي لنا من البداية أنكي تريدين تغيير ترتيب عناوين العقد ,, أو ترتيب العناصر داخل العقد بدون تغيير قيم عناصر العقد الداخلية بشكل مباشر لحللنا الموضوع من البداية ,,

عموما لفعل ذلك عليك بمعرفة التالي :

أنه يوجد في Link List متغير يدعى Prev ومهمته أن يشير للعنصر الذي يسبق العنصر الحالي ,, هل هذا موجود في ال List الخاصة بكم ؟

اذا كانت موجودة ,, ويجب أن تكون موجودة ,, كل ماعليكي هو أن تبدأي من آخر عنصر ,, وبدون عمل أي Swap تجعلي مؤشر next لآخر عنصر يساوي ال Prev ,, ثم تقومي بجعل العنصر الحالي هو ال Prev ,, ثم ال Next للعنصر الحالي يساوي Prev ,, ثم هكذا حتى آخر عنصر ,, وستجدين أن العناصر قد تغير ترتيبها ,, كليا ,, هذا بالنسبة للترتيب ,, بالطريقة الأولى اذا وجد المتغير Prev الذي سيريحك كثيرا ,,

اما اذا أردتي فقط الترتيب بال Swap فعليك بتغيير الدالة Swap للتالي :

void swap(linked *p1,linked *p2)
{
linked* s;
s=p1;
p1->next=p2->next;
p2->next=s;

}

فقط وباذن الله سيعمل ,,

هل فهمتي ماحدث ؟ كل مافعلت هو أنني غيرت ال next الخاصة بالعنصر الأول لتكون هي نفسها next للعنصر الثاني ,, هكذا سيكون العنصر رقم 1 بعده مباشرة العنصر رقم 3 ,,

p1->next = p2->next

ثم جعلت ال next الخاص بالعنصر الثاني تساوي عنوان العنصر الأول نفسه ,, ولي ال next للعنصر الأول ,, كالتالي :

p2->next =s;

جربي الكود وسيعمل باذن الله ,, وان لم يعمل حاولي في الفكرة قليلا ,, وستجدينها ,, والأ فسنرفع حالة الطواريء القصوى لهذه المسألة :)

وفقك الله ,,

[/color

banner_60_468.gif

NOTHING IS IMPOSSIBLE

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

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