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

بخصوص Linked Lists

مغلق
بدأه الحاسوبية في 7 نوفمبر 2003 · 5 رد · 1,647 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

نحن نعلم أن من أنواع

dynamic data structurees :Linked Lists

و Linked Lists لها أنواع منها singly ومنها doubly

وسؤالي بخصوص doubly linked list

إذا أردنا تعرف struct من هذا النوع

struct dlist {

Date d;

struct dlist *prev;

struct dlist *next ;

}

كيف أعمل insertion , deletion في linked list من هذا النوع ؟؟

كيف يعملان هذان المؤشران أود التوضيح إذا سمحتوا ؟

#2

هو بسيط للغاية و اسهل من الـ singal

هذا هو كود كامل لعمل ذلك

D_link.c

#3

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

سنتكلم هنا عن Linked Lists وهذا سيدخل بنا إلى عالم المؤشرات وإن لم أقل إلى أعماقها.ونسميها هكذا لأن كل فرد من اللائحة يتعلق بآخر وفي غالب الأحيان يتعلق بما قبله وما بعده ولا يهتم مباشرة بالآخرين .وهذه تصلح مكان Array إذ هي تكبر أو تنقص حسب محتواها.

وسنرى هنا مثالا لمثل هذه اللائحة وفي هذا المثال ندخل اسما ما إما في أول أو آخر اللائحة وهذه تتكلف بإعطائه موقعه في هذه اللائحة. في الأول سنقوم بصنع Struct نضع فيها المعطيات وسنكتفي هنا باسم و موقع هذا الإسم في اللائحة علما أنه يمكن إضافة ما قد نريد من هذه اللائحة عمله.هذا ويجب أن نزيد شيئا ما يدلنا على الفرد الذي قد يأتي بعد هذا وقد نزيد أيضا ما يدلنا على الفرد الذي يسبقه وفي مثالنا سنأخذ الإثنان وهذان سيكونان مؤشران على Struct بذاتها ولهذا سنكتب struct كما يلي :

struct dlist

{

char name[10]; //a name

int pos; //The position of the item in the list

dlist* next; // a pointer to the next item relative to this one

dlist* prev; //A pointer to the previews item

};

name هي الأسماء التي ستكون اللائحة و pos هو موقع الإسم في اللائحة. next و prev هما مؤشران من نوع struct نفسها الأول يدل على الفرد بعد هذا الحالي والثاني يدل على الفرد السابق.

ونضيف مؤشرا first يدل على أول اللائحة و last يدل على آخرها

والإجراءات تكون كما يلي:

لنفرض أن اللائحة فارغة وأننا سندخل الفرد الأول الذي سنسميه 1 P سندخل الإسم والموقع 1 أما next بما أنه ليس هناك آخر فسنعطيه مثلا إما 0 أو نقول أن next سيدل على نفس الفرد أي 1 Pوهذا ما سنعمله في مثالنا وكذلك بالنسبة ل prev لأن الآن ليس لدينا إلا عضوا واحدا. وكذلك first و last كلها ستكون 1P

الآن سنزيد فردا آخر 2P وفي هذه الحالة last ستكون 2P و next ل 1P سيكون 2P بينما prev ل 2P سيكون 1P علما أن first سيبقى دائما هو 1P .

إذا زدنا 3P سيكون عندنا last هو 3P و prev ل 3P سيكون 2P بينما next ل 2P سيكون هو 3P وهكذا بالنسبة لباقي أفراد اللائحة. وحين نريد حذف فرد نقوم بعكس ما سبق. مثلا إذا حذفنا 3P فسنرجع last إلى 2P وnext ل 2P سيكون هو نفسه. أما إذا حذفنا الأول فسيصبح first هو 2P و prev ل 2P هو نفسه لأنه سيصبح الأول في اللائحة.

وسنكتفي في هذا المثال بالزيادة أو الحذف إما في أول اللائحة أو في آخرها وقد نقوم أيضا بالزيادة أو الحذف في مكان ما نختاره والطريقة تكون دائما هي وإذا زدنا فردا في الوسط نحرس على تغيير وتبديل next للسابق و prev لما بعده.

ولكي نزيد فردا نستعمل new مثل : dlist* list=new dlist وحين نحذفه نستعمل delete list .وحين ننتهي من عملنا نزيل كل الأعضاء لنحرر الذاكرة المحجوزة.

وفي الملف المرافق تجدون ملف من نوع CPP. فيه مثال لهذا.

يمكن أن نزيد عضوا في اللائحة إما في الأول أو في الآخر كما يمكن أن نحذف الأول أو الآخر ويمكن أن نبرز على الشاشة جميع أعضاء اللائحة. وحين نغادر نحذف كل الأعضاء المتبقين.

هذه كتابة أولية ولم أجربه في جميع الحالات وإذا كان هناك خطء ما يمكن تصحيحه أو التعريف بالخطء هنا حتى يستفيد الجميع كما أن optimization ليست في حالتها القصوى ويمكن كتابة البرنامج بطريقة أحسن وأنا كتبته هكذا لكي تسهل قراءته وفهمه.

وإلى اللقاء.

LinkedList.cpp

#4

السلام عليكم

مشكورين أخواني

talal*c

chik

جزيل الشكر

وماقصرتوا .. الله يعطيكم العافية

و ياليت ياأخي طلال تنزل الدرس الجديد بخصوص هالموضوع

في الموسوعة .. نحن بالانتظار ..

وهل ممكن ألقى أمثلة بالنت عن linked list بأنواعها سهلة كانت أم صعبة؟ إذا تعرفوا

تدلوني عليه لو سمحتوا؟

الله يوفقكم ..ويزيدكم من فضله

#5

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

بخصوص الدرس فإن شاء الله راح اكتبه و لكن مع توفر الوقت :)

أما بخصوص الأمثله فيمكنك أن تبحثس في google و تفضلي هذا الرابط:

Linked list C

تحياتي ,,, طلال.

#6

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

مشكور أخي طلال

الله يعطيك العافية

ونحن بانتظار ماتقدمه بالموسوعة

وعسى الوقت مايطول..

الله يجزاك ألف خير ..

تحياتي

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

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