Upload
sneetsher-crispy
View
2.003
Download
2
Embed Size (px)
DESCRIPTION
Nice presentation of Linked List Algorithms.
Citation preview
1
الرحيم الرحمن الله بسم
كامل شرح لكم اقدم اليومالـ عن linked listووافي
123456789
10111213141516171819
ارت اذاالى االنتقال
2
: من كًال& بشرح الكتاب هذا في سأقوم
الــ • عن .linked listمقدمةللـ • العامة .linked listالصيغة•: التالية العمليات شرح
الـ- 1 باستخدام الذاكرة في العناصر ترتيب linked listكيفية.
2. القائمة- اول في عنصر اضافة 3. القائمة- وسط عنصر اضافة 4. القائمة- اخر عنصر اضافة 5. محتوياتها- وطبع القائمة زيارة عملية 6. القائمة- داخل عنصر عن البحث 7. القائمة- عناصر عدد حساب 8. القائمة- من حذفعنصر
الـــ بشرح سأقوم ذالك .Double linked listبعد
123456789
10111213141516171819
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
4
ولو حتى الذاكرة في العناصر ترتيب يتم البعضكيف يقول قدعشوائية؟ كانت
الذي العنصر موقع بحفظ يقوم عنصر كل أن هو الجواب.) بعدة) الذي يليه
: مايلي فلنرى أكثر وبتوضيح
123456789
10111213141516171819
ارت اذاالى االنتقال
5
-: التالية الطًالب قائمة لدينا
null
الطالب الثالث
الطالب الثاني
االول الطالب
بيـــانات
بيـــانات
بيـــانات
0030 0070 next
0030
0070
الذاكرة
الطالب األول
الطالب الثاني
بيــــــــــــــــــــــــــانات
0070
بيــــــــــــــــــــــــــانات
Next
( الذاكرة عنوان كتابه Baseيتمaddress )الطالب فيها يوجد التي
. وهكذا التالي
123456789
10111213141516171819
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
9
القائمة تكون راح كله هذا بعد: الشكل بهذا
30
p
35 4020
f
36
c
123456789
10111213141516171819
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
11
القائمة تكون راح كله هذا بعد: الشكل بهذا
70
c
l
30
35
40
20
f
123456789
10111213141516171819
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
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
ارت اذاالى االنتقال
19
بشرح قامالمحاضرة:
داود: • صالح راشد محمد الطالب•. اليمن --------- صنعاء جامعة•. االلي الحاسب كلية•. التاسعة المجموعة ـــــــــ ثانية سنةباعلوي • فضل الدكتور شرح من مستنبط المحاضر شرحالدكتور • الى التاسعة المجموع الخاصوشكر شكري مع
. باعلوي فضلIf you have any question or feeler pleas send to me by this email:[email protected]
123456789
10111213141516171819
ارت اذاالى االنتقال