19
1 م ي ح ر ل ا ن م ح ر ل له ا ل م ا س ب ن ع ي ف ل ووا م رح كا ش م لك دم$ وم اق ي ل ا الlinked list 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $ ا ارت اذ ى للا ا$ ق$ ت3 نلا ا

Linked List AR

Embed Size (px)

DESCRIPTION

Nice presentation of Linked List Algorithms.

Citation preview

Page 1: Linked List AR

1

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

كامل شرح لكم اقدم اليومالـ عن linked listووافي

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 2: Linked List AR

2

: من كًال& بشرح الكتاب هذا في سأقوم

الــ • عن .linked listمقدمةللـ • العامة .linked listالصيغة•: التالية العمليات شرح

الـ- 1 باستخدام الذاكرة في العناصر ترتيب linked listكيفية.

2. القائمة- اول في عنصر اضافة 3. القائمة- وسط عنصر اضافة 4. القائمة- اخر عنصر اضافة 5. محتوياتها- وطبع القائمة زيارة عملية 6. القائمة- داخل عنصر عن البحث 7. القائمة- عناصر عدد حساب 8. القائمة- من حذفعنصر

الـــ بشرح سأقوم ذالك .Double linked listبعد

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 3: Linked List AR

3

Linked listLinked list: is a data structure wherein each element

contains both a data value and a pointer to next element in the list.

الـ مايلي : linked listبعضمميزاتكانت ولو حتى الذاكرة في العناصر بترتيب تقوم

عشوائيةفي كما المدخلة البيانات عدد لمعرفة نحتاج ال هناالتيسوف البيانات عدد نحدد التي المصفوفات

) الــ) على يطلق لذالك المصفوفة حجم نحدد ندخلهاlinked list . الديناميكية المصفوفات

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 4: Linked List AR

4

ولو حتى الذاكرة في العناصر ترتيب يتم البعضكيف يقول قدعشوائية؟ كانت

الذي العنصر موقع بحفظ يقوم عنصر كل أن هو الجواب.) بعدة) الذي يليه

: مايلي فلنرى أكثر وبتوضيح

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 5: Linked List AR

5

-: التالية الطًالب قائمة لدينا

null

الطالب الثالث

الطالب الثاني

االول الطالب

بيـــانات

بيـــانات

بيـــانات

0030 0070 next

0030

0070

الذاكرة

الطالب األول

الطالب الثاني

بيــــــــــــــــــــــــــانات

0070

بيــــــــــــــــــــــــــانات

Next

( الذاكرة عنوان كتابه Baseيتمaddress )الطالب فيها يوجد التي

. وهكذا التالي

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 6: Linked List AR

6

: الجد في ندخل سوف أالن

للــ العامة الصيغة :-linked listهذهstruct nodeptr {

char info;struct node*next;

;}This is the pointer to the next node

تعريف الرابط

الـــ في العمليات بأهم أالن نبدأ :linked listسوفإنشاء : أوال الــــ nodeعملية بداخل :50الرقم nodeوإضافة

: التالية الخوارزمية خًالل من ذالك سيتم

Initial)node*f({

f=getnode;) (

f->link=null;

f->info=50;;}

الـ بإنشاء قمنا المثال هذا :nodeفي التالية

وضع new nodeإنشاء ثم منعليها fالمؤشر

الـــ ذراع بوضع أخر nullبــ fيقوم بأنة إشارةالقائمة في عنصر

بإدخال الـ 50يقوم التي nodeداخلالمؤشر إليها fيشير

f

50

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 7: Linked List AR

7

a الـ: ثانيا ربط : nodeعملية القائمة أولالـ هذه ربط nodeلدينا ووضعها nodeونريد جديدةالقائمة في ولى إال

50

f

Insert_B)node*f({

node*c;

c=getnode;) (

c->info=40;

c->link=f;

f=c;

}

وضع new nodeإنشاء ثم منعليها cالمؤشر

الـ بربط بالـ nodeيقوم أنشئنها nodeالتيالقائمة في firstاألولى

المؤشر بنقل الـ fيقوم التي nodeإلىأول أصبحت التي بالقائمة في nodeربطناها

القائمة

القائمة ستكون: يلي كما

50

f

70

c

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 8: Linked List AR

8

a ربط: ثالثا (:nodeعملية وليسبآخرها ) بأولها ليس القائمة وسطرقمه وكان الطًالب احد بيانات مثًال& لدينا حسب 36هنا القائمة في نضعه إن ونريد

: يلي كما الحل سيكون الطًالب ألرقام التسلسلي الرقم

Insert_l)node*f({

node*c,*p;

c=getnode;) (

c->info=30;

p=f;

while)c->info > f->info && c->info > p->info(

p=p->link;

c->link=p->link;

p->link=c;

}

المؤشر new nodeإنشاء وضع ثم cمن

داخل البيانات وضعnodeالـ

المؤشر بوضع الـ pيقوم الـ nodeفي إليها يشير fالتيالمؤشر باستخدام التنقل يتم مما pحتى القائمة في

ضياعها دون يحول

( : طالما بالتالي يقوم السطر الـ( c->info >f->infoهذا يشير nodeمعلومات التيالمؤشر الـ cإليها معلومات من المؤشر nodeاكبر إليها يشير و )&&)fالتي

(c->info>p->linked->info )الـ المؤشر nodeمعلومات إليها يشير الـ ) cالتي معلوماتnode ) الـ معلومات من اكبر بالقائمة ربطها ذراع nodeالمراد إليها يشير التي

pالمؤشر

المؤشر بنقل الـ pيقوم الـ nodeمن إلى إليها يشير nodeالتيتليها التي

توقف بعد بتنفيذها :wileيقوم بالتالي يقوم السطر وهذا طبعا&الـ ذراع بربط بالـ nodeيقوم ربطها إليها nodeالمراد يشير التي

الـ pذراع

المؤشر ذراع بنقل الـ pيقوم يشير nodeمن كان التيالـ إلى ) nodeإليها الـ ربطها تم (cالتي

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 9: Linked List AR

9

القائمة تكون راح كله هذا بعد: الشكل بهذا

30

p

35 4020

f

36

c

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 10: Linked List AR

10

& ربط: رابعا في nodeعمليةالقائمة :أخر

: القائمة هذه لدينا30 35 4020

f

الــ نربط أن التالية nodeونريد: القائمة أخر في

Insert_l)node*f({node*c;

c=getnode;) (

c->info=70;

l=f;

while)l->link !=NULL(

l=l->link;

l->link=c;

c->link=NULL;

}

70

c إحضارالقائمة

وضع new nodeإنشاء ثم منعليها cالمؤشر

داخل البيانات وضعnodeالـ

المؤشر بوضع المؤشر lيقوم يشير يتم fحيث حتى وذالكالمؤشر باستخدام تفادين lالتنقل وذالك القائمة أخر إلى

العنصر نقل تم أذا حيث القائمة ضياع في fلعدم مكانة منوذالك بأكملها القائمة نفقد سوف فإننا القائمة في عنصر أول

. & جدا فادح خطأ

الــ ذراع lطالماموجودة

المؤشر بنقل الــ fيقوم إلى nodeمن عليها يشير التيحتى ) nodeالــ القائمة أخر إلى يصل إن إلى تليها التي

أخر إلى ( nodeيشير الشرط تحقق عدم عند القائمة في

الــ ذراع بربط القائمة lيقوم أخر إلى التيوصلتأنشئنها nodeبــ التي

الــ ذراع بربط أخر null بــ nodeيقوم في nodeألنهاالـ ذراع إن أخر بمعنى بــ cالقائمة ترتبط nodeال

أخرى

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 11: Linked List AR

11

القائمة تكون راح كله هذا بعد: الشكل بهذا

70

c

l

30

35

40

20

f

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 12: Linked List AR

12

& القائمة: خامسا زيارة عمليةمن بداخلها يوجد ما وطبع القائمة عناصر كل على المرور بعملية نقوم سوف أالن

معلومات:

Traverse)node*f({node*c=f;

while)c->link !=NULL({cout<<c->info;

c=c->link;}}

المؤشر ذراع ال cطالما nullتساوي

المعلومات بطبع يقومالـ في التي nodeالموجودة

الـ إليها cتشير

المؤشر ذراع بنقل الـ c يقوم إلىnode تليه التي

اذا باكملة بينهما ما تنفيذ ليتم القوسين وضعناwhileتحققشرط

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 13: Linked List AR

13

& القائمة: سادسا عناصر عدد معرفة ( الـ عدد القائمة عناصر عدد بعد نقوم سوف ( nodeهنا

Traverse)node*f({int count =0;

While)c-> !=NULL({count;++

c=c->link;

}}

الذيسوف العداد عرفناتبع الشرط يتضاعفطالما

while وذالك وهيئنه محققأذا حتى صفر القيمة بإعطائه

تحققشرط يقوم whileماصفر الــ nodeبطبع ذراع cطالما

موجودة

من العداد بمضاعفة يقومالقائمة تنتهي أن إلى الصفر

تحققشرط) (whileعدم

المؤشر ذراع بنقل الـ c يقوم إلىnode تليه التي

أذا بكاملة بينهما ما تنفيذ ليتم القوسين وضعناwhileتحققشرط

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 14: Linked List AR

14

: القائمة : داخل عنصر عن البحث سابعا&

Search)node*f , int key({

node*c=f;

cin>>key;

while)c->link != NULL( {

if)key == c->info( {

return c;}

else {

c=c->link;} }

return null;}

مع عنها البحث نريد التي المعلومات ندخلنوع من بأنها intمًالحظة

المدخل البيانات كانت ةاذامع التي nodeالـ بيانات متطابقة

الـ cيقفعليها

المؤشر الـ cنقل التي nodeإلىتليه

القيمة نجد NULLإخراج لم أذاالعنصر

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 15: Linked List AR

15

القائمة: من عنصر حذف ثامنا&

Delete )node*f , int key({

node*d; d=search)f , key(

If)d({

if)d==f(

f=f->link; else

{

p=getprv)d , f(

p->link=d->link}

free)d(}

else Display not font

}

القائمة عن fابحثفيkeyالعنصر

بداخلة نضع كوعاء نعتبره هذاداخل عنها البحث تم التي البيانات

الـ في ونضعها ذالك dالقائمة بعدالـ على بالعمليات هي dالـ )dنقوم

حذفها نريد التي (البيانات

الـ كان الـ dإذا في nodeموجودالـ إليها يشير (fالتي عنصر ) أول

المؤشر بنقل فقط الى fنقومكمنا nodeالـ وبذالك تليه التي

فيها كان التي النود بحذفكان fالمؤشر اذا القائمة لربط الذي) dالـ هذا

) حذفه بالوسطنريد

dحذف

العنصر يجد ال عندما بطبعها يقومحذفه المراد

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 16: Linked List AR

16

Double linked list

للـ : العامل الصيغة double linked listاوال&

struct nodeptr {

char info;struct node*next;struct node* proviso;

;}

This is the pointer to the next node

This is the pointer to the proviso node

للـ العام double linked listالشكل

f

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 17: Linked List AR

17

لربط: قائمة nodeثانيا& بالتالي double linked listفي : نقوم التالي نعرف دعونا ذالك قبل•(c->link )الـ ذراع . cمعناه•(c->llink )الـ ذراع التي cمعناه

. اليسار في•(c->rlink )الـ ذراع التي cمعناه

. اليمين ......................................................................فيبربط نقوم :nodeلكي بالتالي نقوم

1.)c->rlink=p->rlink2.)c->llink=p3.)p->rlink=c

4.)c->rlink->llink=c

معنى ) البعضما يسال :c->rlink->llink=cقد معناه( هذا أخبركم راحالـ تبع اليسرى الذراع إلى تشير الـ nodeهذه إليها تشير عليها nodeالتي التي

الـ cالمؤشر على لوضعها اليمين جهة المؤشر nodeمن اليها يشير .cالتيخًالل من الله انشاء تفهمو راح الكًالم بواسطة الشرح خًالل من مافهمتو اذا

: التالي الرسم

التالية الصفحة

123456789

10111213141516171819

ارت اذاالى االنتقال

Page 18: Linked List AR

18

f p

c

1.)c->rlink=p->rlink

2.)c->llink=p

3.)p->rlink=c

4.)c->rlink->llink=c

العملية : تظهر ثم من السابقة االوامر من سطر كل يظهر سوف مًالحظةالرسم) ( في القائمة على ستتم التي

. التركيز يرجا 1لذالك23456789

10111213141516171819

ارت اذاالى االنتقال

Page 19: Linked List AR

19

بشرح قامالمحاضرة:

داود: • صالح راشد محمد الطالب•. اليمن --------- صنعاء جامعة•. االلي الحاسب كلية•. التاسعة المجموعة ـــــــــ ثانية سنةباعلوي • فضل الدكتور شرح من مستنبط المحاضر شرحالدكتور • الى التاسعة المجموع الخاصوشكر شكري مع

. باعلوي فضلIf you have any question or feeler pleas send to me by this email:[email protected]

123456789

10111213141516171819

ارت اذاالى االنتقال