time1

Linked List القوائم المتصلة - الدرس الثاني - تكملة بقية العمليات الاساسية على القائمة

19 ردود في هذا الموضوع

بسم الله الرحمن الرحيم

الدرس الثاني من القوائم المترابطة Linked List :

فيما سبق تحدثنا من خلال الدرس الأول عن ماهية القوائم المترابطة , وكيفية انشاء اول عقدة في القائمة ,

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

الاضافة - التعديل - الحذف - عرض العناصر -البحث- التعداد .

ولقد تكلمنا عن اول العمليات ( الاضافة ) بالتفصيل من خلال الدرس الاول , راجع الـــدرس الأول

سوف نكمل حديثنا اليوم عن بقية العمليات من خلال هذا الدرس .

----------------------------------------------------------------------------------------------------------------------

2 - عرض العناصر :

تكمن فكرة عرض العناصر بالوصول إلى بداية القائمة , ومن ثم التقدم خطوة خطوة إلى الامام , مع طباعة الحقل الاول من كل عقدة ( حقل القيم او البيانات ) , تحدثنا في الدرس السابق عن آلية التقدم والسير عبر عقد اي قائمة , ولكن كنا نستخدم طريقة التقدم إلى الامام وهي ماسنركز حديثنا عليه , لكن يا ترى , هل يوجد طريقة للتقدم إلى الخلف ؟ ؟

طبعا يوجد ولكن ليست محور حديثنا .

سنقوم الان بأنشاء دالة عرض العناصر Display والتي تأخذ الوسيط q , يبدأ عمل هذه الدالة بتعريف متغير اخر من نوع node_ptr نسميه p ونساويه بقيمه q وذلك لسلامة القائمة .

post-82612-1204031718_thumb.jpg

void Display(node_ptr&q)
{
node_ptr p;
p=q;
while(p!=NULL)
{
cout<<p->name<<":"<<p->num<<endl;
p=p->next;
}
}

1- نساوي المتغير p بالمتغير q وذلك كما قلنا لسلامة القائمة .

2- ننشأ حلقة تكرار شرطها اننا لم نصل إلى نهاية القائمة NULL وذلك لأن المساواة جعلتنا في بداية القائمة كما هو مبين بالصورة السابقة .

3- نطبع القيم المراد طباعتها بالتنسيق الذي نريده .

4- ننتقل إلى العقدة التاليه .

3- التعداد :

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

int Count(node_ptr&q)
{
node_ptr p;
p=q;
int count=0;
while(p!=NULL)
{
count++;
p=p->next;
}
return count;
}

post-82612-1204031772_thumb.jpg

هذه الدالة Count تعيد قيمة من النوع int تمثل عدد العقد الموجودة ,لا اعتقد ان هذه الداله تحتاج لشرح طويل , فهي تقوم على الوصول إلى بداية القائمة ومن ثم زيادة قيمة count بواحد , ومن ثم الانتقال إلى العقدة التاليه حتى نصل إلى نهاية القائمة اي NULL .

3- الحذف :

وهو على ثلاثة انواع :

1- الحذف من اليسار ( من البداية ) .

2- الحذف من اليمين (من النهاية ) .

3- الحذف من الوسط .

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

1-الحذف من اليسار :

لحذف عقدة باستخدام هذه الطريقة نتبع الخطوات التاليه :

1- نجعل العقدة التاليه للعقدة الاولى هي بداية القائمة .

2- تكون العقدة الاولى حرة , عندها نقوم بحذفها .

3- تصبح القائمة الجديدة هي القائمة المعتمدة عن طريق المساواة مع القائمة القديمة.

لنأخذ هذه الدالة :

void DelFirst(node_ptr&q)
{
node_ptr d;
if(q->next!=NULL)
{

d=q->next;
d->next=q->next->next;
delete q;
q=d;
}
else
delete q;
}

تحتوي هذه الدالة على الوسيط q والذي يمثل لنا القائمة , يجري بعد ذلك اختبار لحقل التأشير لنرى ما اذا كانت القائمة تحتوي على عقدة واحدة او اكثر من عقدة , راجع الدرس الأول .

على فرض ان لدينا قائمة تحتوي على ثلاثة عقد ونرغب بحذف عقدة من اليسار وباتباع الخطوات السابقة نقول :

post-82612-1204031799_thumb.jpg

نمثل القائمة الجديدة من خلال المتغير d والذي يبدأ من اول عقدة بعد العقدة الاولى (الخطوة الأولى ) , وذلك بواسطة حقل التأشير للعقدة الاولى :

post-82612-1204031818_thumb.jpg

ايضا نعدل حقل التأشير للقائمة الجديدة d ونجعله يؤشر لثاني عقدة بعد العقدة الاولى :

post-82612-1204031839_thumb.jpg

الان لدينا القائمة الجديدة , والتي سنساويها بعد قليل بالقائمة القديمة ( الخطوة الثالثة ) ولكن قبل ذلك لابد من تنفيذ الحذف للعقدة الحرة ( الخطوة الثانية ) :

post-82612-1204031866_thumb.jpg

2- الحذف من اليمين :

بهذه الطريقة , نقوم بالتنقل عبر العقد إلى ان نصل إلى العقدة التي قبل العقدة الاخيرة , لجعلها العقدة الاخيرة اولا , ومن ثم حذف العقدة الاخيرة , نلخص ذلك بما يلي :

1- تحديد العقدة التي تسبق العقدة الاخيرة .

2- جعلها تؤشر إلى NULL اي ان نجعلها العقدة الاخيرة ( راجع الدرس الأول ) .

3- حذف العقدة الاخيرة .

void DelLast(node_ptr&q)
{
node_ptr p,d;
p=q;
while(p->next->next!=NULL)
{

p=p->next;
}
d=p->next;
p->next=NULL;
delete d;
}

هذه الدالة تحتوي على حلقة تكرار شرطها ان يستمر تنفيذ التكرار بالحلقة حتى نصل إلى الحلقة التي تسبق الحلقة الاخيرة ,

post-82612-1204031894_thumb.jpg

يمثل لنا المتغير d العقدة الاخيرة والتي نرغب بحذفها , نعدل تأشير العقدة الاخيرة الجديدة إلى NULL لنعلن بذلك انها نهاية القائمة, ( الخطوة الثانية ) ومن ثم نحذف العقدة الاخيرة القديمة ( الخطوة الثالثة ) .

3- الحذف من الوسط :

في هذه الطريقة نبحث عن العقدة المراد حذفها , مثلا نبحث بواسطة القيمة num عندها نستطيع ان نقول على سبيل المثال احذف العقدة لصاحب الرقم 50 , ......

في هذه الطريقة نتبع مايلي :

1- نحدد العقدة المراد حذفها .

2- نجعل العقدة السابقة لها تؤشر للعقدة التاليه لها .

3 - نحذف العقدة الحرة.

void DelMid(node_ptr&q,int m)
{

node_ptr p,d;
p=q;
while(p->next->num!=m &&p->next->next!=NULL)
{
p=p->next;
}

d=p->next;
p->next=d->next;
delete d;
}

نستمر بالتقدم عبر العقد إلى ان نصل إلى العقدة التي تسبق العقدة المراد حذفها وذلك من خلال التقدم مالم نصل إلى قيمة البحث m او إلى نهاية القائمة NULL

post-82612-1204032045_thumb.jpg

يمثل لنا d العقدة المراد حذفها وذلك من خلال مساواته مع العقدةالتي يؤشر لها حقل التأشير لـ p

post-82612-1204032069_thumb.jpg

نجعل العقدة السابقة p للعقدة المراد حذفها تؤشر للعقدة التاليه للعقدة المراد حذفها d->next

post-82612-1204032101_thumb.jpg

بعد ذلك نقوم بحذف d

----------------------------------------------------------------------------------------------------------------------

4- التعديل :

فكرة التعديل مشابهه لبعض الافكار التي وردت معنا في هذا الدرس او الدرس الاول , والتي تقوم على البحث عن عقدة ما بموجب قيمة , وتعديل قيمة اخرى بالعقدة ,

على سبيل المثال : البحث عن العقدة لصاحب الرقم 50 وتعديل اسمه من Ali إلى Naser

void edit (node_ptr &first,int s,char name[10])
{

node_ptr p;
p=first;
while(p->num!=s && p->next!=NULL)
p=p->next;

if(p->next!=NULL)
strcpy(p->name,name);
}

يتم التنقل عبر عناصر القائمة بشرط مالم نصل إلى نهاية القائمة او إلى القيمة المراد البحث عنها ,

عند العثور على القيمة نقوم بتعديل الاسم القديم إلى الاسم الجديد .

من العمليات ايضا البحث وهي نفس الفكرة بالاستغناء عن التعديل بأي غرض نرغب البحث من اجله .

----------------------------------------------------------------------------------------------------------------------

إلى هنا اكون قد انتهيت من درسي الثاني ,

قمت بعرض فكرة عن القوائم المتصلة وبعض العمليات التي تجري عليها ,

جميع ماذكر هي عبارة عن افكار مع عدم مراجعة الاخطاء او انشاء استثنائات لتوقع اخطاء معينة , فهذه قد تركتها للقارئ ليجربها بنفسه

مثلا : دالة الحذف من البداية , ربما تستمري اذا كانت هناك قائمة ولكن ماذا لو لم تكن ؟

يوجد بعض الامور التي تستوجب من القارء مراعاتها وتعتمد على مهارة المبرمج ,

في المرة القادمة سيكون هناك مثال شامل على العمليات ومنقح من الاخطاء , لكن لن يكون الدرس القادم , لان درسي القادم هو طرق الـ Exception Handling

B)

تحياتي

تم تعديل بواسطه time1
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا لك أخي Time1

يعطيك العافية مجهود رائع جدا ,,

لكن يا أخي الحبيب عندي سؤال بسيط

أنا عندي كتاب علم نفسك سي++ في 21 يوم ووصلت إلى موضوع القوائم المرتبطه Linked List

سؤالي ماهو إستخدامات هذه القوائم وهل لها أهمية كبيرة وهل يجوز لي تجاوز هذا الفصل وهل لهو تأثير في الفصول القادمة إذا تجاوزته !!

الحقيقة أن موضوع Linked List من أعقد المواضيع عندي ولكن الحمدالله من موضوعك بدأ يبين لي فكرة هذا الموضوع

تحياااااتي وتقديري ،،،

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مرحبا اخوي ابو فهد ,

العفو يالغالي , وانا الي اشكرك على اطرائك .

بالنسبة لسؤالك عن القوائم المترابطة او المتصلة ,Linked List , نعم مهمه

على سبيل المثال تستخدم بشكل اساسي داخل البنوك , فحساب كل شخص هو عبارة عن عقدة node فهي تستخدم لحفظ البيانات بشكل مؤقت وتتعامل مع البيانات , وتستطيع التطبيقات ان تشكل القائمة من خلال قاعدة بيانات او ان تحفظ القائمة داخل قاعدة بيانات , وتستطيع ان تجري على العقد العمليات التي ترغبها , تستطيع ان تضيف حساب شخص بأي مكان من القائمة , تستطيع حذف حساب شخص متى مااردت ومن اي مكان بالقائمة , تستطيع ترتيب الحسابات , عرضها , تحريرها , ...إلخ بكل سهوله وكفاءة .

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

بالنسبة لتخطي هذا الفصل ,

شوف اذا تبغى نصيحتي , انا اقولك فصل data structure او تراكيب البيانات اهم فصل باللغة , انتبه ماتفهمه , ليش ؟!

لانه يعطيك حلول منطقيه وبسيطة وذات كفائة لكثير من المشاكل ومن دونه راح تتخبط وتلف وتدور عشان تحل مشكلتك , وهذا يعني : اكواد طويلة , حل اقل كفائة , نسبة اخطاء كبيرة ... إلخ

بعدين لها استخدامات كثيرة قاعدين نشوفها بالتطبيقات المشهورة

يعني القوائم المتصلة تستخدم مثل ماقلتلك داخل تطبيقات البنوك وتتعامل مع قواعد البيانات لتشكيل القائمة من جديد او لحفظ القائمة الحالية , وتستخدم كا cash لكثير من التطبيقات ,...إلخ

شجرة البحث الثنائي , تستخدم داخل قواعد البيانات

المكدس تستخدم داخل التطبيقات في ازرار التقدم والتراجع , الي نشوفها مثل برنامج الوورد ... إلخ

يعني نصيحتي افهمها . بعدين سهله وحلوة :lol:

نصيحة : اذا حبيت تبدع بهاللغة او اللغات الثانية , تعلم من كتاب جيد مثل How to Program in C++ لاني اتشائم من الكتب الي تقولي تعلم ب21 يوم وكذا , احس نفسي غبي اذا خلصت الـ 21 يوم وانا ماخلصته :lol:

مع اني اشك اذا انك خلصته قبل شهرين :lol:

تمنياتي لك بالتوفيق اخي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم اخي

time1

انا ابسالك برا الموضوع اللي تتكلم عنه

الكتاب اللي ذكرته بصراحة اشوفه صعب ماادري هل هو فعلا صعب او لانه الكتاب المقرر علي لكن انا مابديت افهم اللغة زين الا من منتداكم الرائع لان فيه تواصل اكثر يعني الف على مواقع كثيرة واذا مافمت شي رجعت لكم وسالتكم واثق في اجابتكم

من رب العالمين لكن فعلا انتم مميزين والشعار تيع المنتدى لايق عليه

اسف على الاطالة لكن وجهة نظري حبيت اوضحها في كتاب

c++ how to program

تحياااااااااااتي11

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا لك أخي Time1

وبنسبة للكتب الي تقول تعلم في 21 يوم ... فهي قد تكون مقبولة نظريا ولكن عمليا صعب أن تنهي كتاب يحتوي على 600صفحة يزيد أو ينقص

عل العموم كان بودي أن أقرء كتاب c++ how to program ولكن لايوجد باللغة العربية ..

تحياااااتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
السلام عليكم اخي

time1

انا ابسالك برا الموضوع اللي تتكلم عنه

الكتاب اللي ذكرته بصراحة اشوفه صعب ماادري هل هو فعلا صعب او لانه الكتاب المقرر علي لكن انا مابديت افهم اللغة زين الا من منتداكم الرائع لان فيه تواصل اكثر يعني الف على مواقع كثيرة واذا مافمت شي رجعت لكم وسالتكم واثق في اجابتكم

من رب العالمين لكن فعلا انتم مميزين والشعار تيع المنتدى لايق عليه

اسف على الاطالة لكن وجهة نظري حبيت اوضحها في كتاب

c++ how to program

بالعكس تماما اخي الذابح , كتاب c++ how to program جدا رائع وسهل ومبسط , وخالي من التعقيد الموجود في بعض الكتب , وانا مازلت انصحك وبشدة في هذا الكتاب

اخي ابو فهيد

شكرا لك أخي Time1

وبنسبة للكتب الي تقول تعلم في 21 يوم ... فهي قد تكون مقبولة نظريا ولكن عمليا صعب أن تنهي كتاب يحتوي على 600صفحة يزيد أو ينقص

عل العموم كان بودي أن أقرء كتاب c++ how to program ولكن لايوجد باللغة العربية ..

تحياااااتي

مرحبا اخي ابو فهيد

يوجد نسخة على مااعتقد عربيه موجودة في مؤسسة شعاع للنشر , اسمه كيف تبرمج بلغة سي ++ واعتقد للمؤلف صلاح الدوه جي , لكن لا تهتم كثيرا للكتب العربيه , صدقني تعريبها وطريقة شرحها دائما تكتشف بها اغلاط ,

تحياتي

تم تعديل بواسطه time1
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مشكور كتير اخي تايم على الموضوع

شعرت بالمتعة حين قرأت الموضوع

ولكن أخي الحبيب،،،

لدي سؤال:

سنقوم الان بأنشاء دالة عرض العناصر Display والتي تأخذ الوسيط q , يبدأ عمل هذه الدالة بتعريف متغير اخر من نوع node_ptr نسميه p ونساويه بقيمه q وذلك لسلامة القائمة .

انسخ الكود
  1.  
  2. void Display(node_ptr&q)
  3. {
  4. node_ptr p;
  5. p=q;
  6. while(p!=NULL)
  7. {
  8. cout<<p->name<<":"<<p->num<<endl;
  9. p=p->next;
  10. }
  11. }
  12.  
  13.  

لماذا عرفت باراميتر المؤشر على أنه مرجعي

الم تقل انك انشئت المؤشر p حفاظا على سلامة القائمة

وأيضا لم يكن لمرجعية الباميتر أي استخدام

ولي أيضا تعليق بسيط على نفس النقطة

هذه الاكواد اصبحت أكواد سي++ وليست سي

يعني لن تتمكن من ترجمتها على أنها سي

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

انسخ الكود
  1. void Display(node_ptr&q)
  2.  

ولكم مني التحيات العطرة

تم تعديل بواسطه mandareka
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اهلا اخي mandareka .

بالنسبة لسؤالك الاول حول المرجعيه .

كلامك صحيح ,نعم هناك دوال لاتستخدم المرجعيه بالرغم من وجودها كا باراميتر في الدالة مثل Count و Display و .... الداعي لاستخدامها هنا فقط للسير على نمطية الدوال الاولى , حتى ان مثل هذه الدوال لاتؤثر على القائمة بشئ فهي اما لطباعة العناصر او عدها ..

بالنسبة لسؤالك الثاني حول السي او السي ++

هذه الاكواد اصبحت أكواد سي++ وليست سي

يعني لن تتمكن من ترجمتها على أنها سي

بلا يمكن ترجمته للسي البحته او سي ++ البحته .

بصورة اخرى استخدامك لـ Ref تستطيع ان تعوض عنه بالـ Ptr

مثلا :

تستطيع ان تغير البارمتر من الصورة التالية

(node_ptr &first,.....)
{
first->num;
.
.
. //node *&q;
//q->num;
}

إلى الصورة التالية :

(node_ptr *first,.....)
{
(*first)->num;
.
.
.
. //node **q;
//(*q)->num;
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم الف شكر لك ع الشرح الوواضح والرائع وفقك الله

لكن انا حبيت اسئل عن طباعة الينكد ليست اريد طباعة العناصر في السينقل ليست بالعكس

ياريت تكتب لي كود

تقبل تحيااتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جوزيت خيرآ على الشـرح الأكثر من رآئع ..

أستفـدت كثيــر ..

بميزآن حسنآتك يآرب ,,

//

تم تعديل بواسطه إشراقــه فجــر
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
السلام عليكم الف شكر لك ع الشرح الوواضح والرائع وفقك الله

لكن انا حبيت اسئل عن طباعة الينكد ليست اريد طباعة العناصر في السينقل ليست بالعكس

ياريت تكتب لي كود

تقبل تحيااتي

يمكنك الاستفادة من الدالة Count التي قمنا بتعريفها سابقا في ذلك , حيث اننا في كل عقدة نمتلك عنوان العقدة التالية ولكن لانمتلك عنوان العقدة السابقة , اذا علينا ان نقوم بعملية المرور على عقد القائمة بشكل عكسي من خلال معرفة عدد العقد بواسطة Count :wink:

void Display_Re(node_ptr&q)
{
node_ptr p;
p=q;
for(int i=Count(q);i>0;i--)
{
for(int j=1;j<i;j++)
p=p->next;
cout<<p->name<<":"<<p->num<<endl;
p=q;
}

جوزيت خيرآ على الشـرح الأكثر من رآئع ..

أستفـدت كثيــر ..

بميزآن حسنآتك يآرب ,,

//

شكرا لكي اختي :happy: ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكراً لك اخي الكريم

شرح مفيدجدا

ولكن اتمنى ان نجعل برنامج يقوم بكل العمليات التى تقوم على القوائم المتصله

مثل انشاء واضافه

وحذف وعدد

اتمنى ان يوجد برنامج كامل

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

جرب هالمثآل .. فيه بعض العمليآت على الــ Linked List..

بآلتوفيق ..

//

Linked_List.rar

تم تعديل بواسطه إشراقــه فجــر
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
#include<iostream>
#include<string>
using namespace ::std;
struct node
{
int number;
node *next;

};
typedef node *node_ptr; // to use program easily
// prototype functions
//*********************************************************************

node_ptr make_new_node(node_ptr &first,int x);
void display_list(node_ptr first );
void create_nodes(node_ptr &first,int n);
void order_insert(node_ptr &first,int x);
void insert_begin(node_ptr &first);
void insert_last(node_ptr &first);
void delete_first(node_ptr &first);
void delete_last (node_ptr &first);

//************************************************************************
void main()
{
// declarations
//*************
node_ptr first;
first=NULL;
char choose;
int n;

done:
cout<<"\n\n\t\t WHAT DO YOU WANT TO DO ??\n\n"
<<"\t*******************************************\n"
<<"\t*\t 1- create alist *\n"
<<"\t*\t 2- display list *\n"
<<"\t*\t 3- insert_first *\n"
<<"\t*\t 4- insert_end *\n"
<<"\t*\t 5- insert_position *\n"
<<"\t*\t 6- delete_first *\n"
<<"\t*\t 7- delete_end *\n"
<<"\t*\t 8- delete_position *\n"
<<"\t*\t 9- summation nodes *\n"
<<"\t*\t *- maximum nodes *\n"
<<"\t*\t @- exit from application *\n"
<<"\t*******************************************\n";
cin>>choose;
switch(choose)
{
case '1':
cout<<"\t Enter number of nodes to create\n";
cin>>n;
create_nodes(first,n);

goto done;
break;

case '2':
display_list (first);
goto done;
break;

case'3':
insert_begin (first);

goto done;
break;

case'4':
insert_last (first);

goto done;
break;


case'5':

goto done;
break;

case'6':
delete_first(first);

goto done;
break;

case'7':
delete_last (first);

goto done;
break;

case'8':

goto done;
break;

case'9':

goto done;
break;
case'*':
goto done;
break;

default:

char continuo;
retry:
cout<<"are you sure you want to exit (y / n )\n";
cin>> continuo;
if(continuo=='n')
{
goto done;
}
else if(continuo=='y')
{

}
else
{
cout<<"you are not press acorrect botton,please Retry do\n";
goto retry;
}
break;
}
}


// functions
//-------------------
// TO MAKE anew node
//*********************

node_ptr make_new_node(int x)
{
node_ptr p;
p=new node;
p->number =x;
p->next =NULL;
return p;
}

// TO display anodes
// **********************
void display_list(node_ptr first )
{
node_ptr p;
if(first==NULL)
cout<<"NO, nodes founds>>>";
else
{
cout<<"\t The Data in the nodes are :\n";
p=first;
while(p!=NULL)
{
cout<<"value of node ---> ";
cout<<p->number <<endl;
p=p->next;
}
}
}

// TO CREATE lists of nodes
// ****************************

void create_nodes(node_ptr &first,int n)
{
int x;
cout<<"\t\t enter the data in nodes\n";
for(int i=1;i<=n;i++)
{
cout<<" node # "<<i<<endl;
cin>>x;
order_insert(first,x);
}
}

// Order insert
//*********************************
void order_insert(node_ptr &first,int x)
{
node_ptr p;
if(first==NULL)
{
first=make_new_node (x);
}
else if(x==first->number )
{
cout<<"\t This value in node is Exist \n";
}
else if(x<first->number )
{
p=make_new_node (x);
p->next =first;
first=p;
}
else
order_insert(first->next ,x);
}

// Insert in the Begining
// **************************
void insert_begin(node_ptr &first)
{
int x;
cout<<"enter value in new node\n";
cin>>x;
node_ptr p;
p=make_new_node(x);
p->next=first;
first=p;
}

// Insert in the last
// ************************
void insert_last(node_ptr &first)
{
int x;
cout<<"entr value in new node \n";
cin>>x;
node_ptr p,q;
if(first==NULL)
{
first=make_new_node (x);
}
else
{
p=first;
while(p->next!=NULL)
{
p=p->next ;
}
q=make_new_node (x);
p->next =q;
}
}

// TO delete first node
// ******************************************

void delete_first(node_ptr &first)
{
if(first==NULL)
{
cout<<"NO,nodes found .....\n";
}
else
{
node_ptr p;
p=first;
first=first->next;
delete p;
}
}


// TO delete last
// *****************
void delete_last (node_ptr &first)
{
if(first==NULL)
cout<<" NO;nodes found......\n";
else if (first->next ==NULL)
delete first;
else
delete_last (first->next );

}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

1-Creationإنشاء

2-InsertFront الإضافه في البدايه

3-InsertAfter الاضافه بعد عنصر معين

4-InsertRear الإضافه في النهاية

5-DeleteFront الحذف من البداية

6-DeleteAfter الحذف من بعد عنصر معين

7-DeleteRear الحذف من النهاية

8-Count Nodes ايجاد عدد العناصر

9-SortList ترتيب عناصر القائمة

10-Invert List عكس القائمة

11-Print List عرض محتويات القائمة

12-Concatenate عملية وصل قائمتين في قائمة واحدة

هذا مشروعي يجب ان اعمله على خوارزمية اتمنى ان تساعدوني

تحياتي وتقديري لكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم اخي الكري

صراحه موضوع رائع

بس لو سمحت ممكن تكمل على انواع القوائم المتصله

ارجوا ان تكتب لي الدروس لانها ضروريه بالنسبه لي

وهي:

القوائم الدائريه +عملياتها

القوائم الثنائيه + عملياتها

القوائم المشتركه + عملياتها

وكمان

المصفوفات الثنائيه والمتعدده الابعاد

وجزاك الله الف خير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الحقيقه شي ابداع وخيالي من مشرفنا المميز

واعيد واكرر قولي له

المميز لا يأتي منه الا كل مميز

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

حد قال لك من قبل انك مبدع

وربي لو قلت عليك انك مبدع قليله بحقك انت قمه بالابداع

مااقول الا

الله يجزاك خير على هذا الدرس لانه بصراحه ماكنت اطيقه

لكن باسلوبك صار له شكل ثاني :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جزاك الله الجنه يااخي

وجات في وقتها

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .