ممكن أحد يشرحها لي ب two head and one current والشكر لكل من يعلم ويتعلم
multilinkedlist
السلام عليكم ورحمة الله وبركاته
الراءه في linked list بطريقتين
طريقة
Read From head
وهي نعتبرها كانها stack
اي اخر مايدخل هو اول مايخرج
يعني عندا ارقام : 1 2 3 4
لما نقرائها تكون : 1234
وطريقة كتابة كودها بهذه الطريقه
struct node
{
int x;
node* next;
}
void main ()
{
node * first;
first =NULL;
node* temp;
do
{
temp=new node;
cin>>temp->x;
temp->next=NULL;
if(first==NULL)
first=temp;
else
{
temp->next=first;
first=temp;
}هذا هو كود الادخال فيها
وطبعا الطريقه الثانيه
Read fromtail (end)
هذي تدخل العناصر وتقرائها بنفس الترتيب
مثل ادخلنا :1234
تقرائها : 1234
طبعا كودها يختلف
struct node
{
int x;
node* next;
}
void main ()
{
node * first;
node* curn;
first =NULL;
curn=first;
node* temp;
do
{
temp=new node;
cin>>temp->x;
temp->next=NULL;
if(first==NULL)
first=temp;
else
{
while(curn->next !=NULL)
curn=curn->next
curn->next=temp;
}وإن شاء الله اكون عرفت اشرح
الشكر الجزيل لك يا أخي الكريم على سرعة الرد ولكن لم اجد ماأريد ولاأعرف كيف أوصل المعلومه
لقد فهمت سؤالك بهذا الشكل
هو كيف نضرب عدادين مقرؤين من linked list
ونرتبها بطريقة head
كل ماعليك عمله هو انك تضع في temp اللي في الكود ناتج ضرب العددين
وترتب بنفس الطريقه
واذا فهمي غلط يالليت تشرح السؤالك
السلام عليكم
يبدو ان مشكله linked list هى من اكبر المشاكل التى تواجه طلبة الحاسوب, دعونا نوضح الصوره بالنسبه لإ linked list ثم ننتقل ل doubel llinked list و اخيراً mutli linked list او ما يسمى graph .
Linked list
دعونا نفترض الاتى :
كل عضو من اعضاء الفريق العربى يعرف عنوان عضو اخر, وهناك عضو واحد لا يعرف عنوان احد, مثلاً انا اعرف عنوان الاخ هيثم, والاخ هيثم يعرف عنوان الاخ طارق وهاكذا.
احمد->هيثم->طارق->مصطفى->...->رامى
الان إذا اردنا الوصول إلى الاخ طارق مثلاً, فلا بد ان نسئل احمد (إلى هو انا), فيدلنا على عنوان الاخ هيثم, وهيثم بدوره يدلنا على الاخ طارق.
ولكن إذا اردنا ان نصل إلى احمد عن طريق الاخ طارق فلا توجد طريقه, لان طارق يعرف عنوان الاخ مصطفى وعن طريق الاخ مصطفى لن نصل إلى إلى عنوان الاخ رامى فى الاخر, والاخ رامى لا يعرف عنوان احد.
كذالك كل عضو لديه معلومات شخصيه عن نفسه فقط ولا يعرف اى معلومات شخصيه عن عضو اخر.
لنسمى كل عضو node وكل عنوان يعرفه next:
احمد غريب شارع الجيزه ... عنوان هيثم = next -------------- هيثم ؟؟؟؟ شارع المطار .... عنوان طارق = next --------------
كل عنصر يعرف نفس نوع المعلومات عن نفسه, بمعنى ان كل المعلومات الشخصيه التى يعرفها احمد عن نفسه هى نفس المعلومات التى يعرفها هيثم عن نفسه.
struct Link{
char name[30];
char address[50]
...
Link *next
}Double linked list
فى هذه الحاله كل عضو يعرف عنوان الذى يليه وعنوان الذى سبقه, بمعنى ان كل عضو يعرف عنوان عضو اخر وعنوان الشخص الذى يعرف عنوانه.
مثال.
احمد->هيثم->طارق->مصطفى->...->رامى رامى->...->مصطفى->طارق->هيثم->احمد لاحظ ان اللسته الثانيه هى عكس اللسته الاولى.
ما عدى الشخص الاول والاخير, فالاول يعرف عنوان الذى يليه فقط, والاخير يعرف عنوان الذى سبقه قفط.
struct Link{
char name[30];
char address[50]
...
Link *next
Link *prev
}Multi linked list
هذه الحاله يصعب شرحها بنفس الطريقه, ولكن الفكره الاساسيه هى ان كل عضو يعرف عناوين ثلاثة اعضاء.
struct Link{
char name[30];
char address[50]
...
Link *P1
Link *P2
Link *P3
}والسلام
لا إله إلا الله محمد رسول الله
busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.
السلام عليكم
أحمد غريب دائم مبدع ماشاء الله - شرح جدا جميل -.
أخي احمد طيب بالنسبة double list الطريقة الاولى واضحة يعني ممكن نكتب التالي
link *k,kk;
k->next = k'
kk->next = ...;
وهكذا لكن الطريقبالنسبة للمؤشر الثاني الي هو prive كيف ممكن تكتب؟؟؟
أما الطريقة الثالثة multi list فالمؤشرات الثلاثة هل واحد لبداية القائمة واخر الى اخرها والثالث يمر على كل القائمة أم ماذا .
بارك الله فيك ونفعنا بعلمك .
ومعليش على الاطالة
اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم
سبحان الله وبحمده سبحان الله العظيم
لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).
السلام عليكم
اخى السهم النارى احي فيك روح المثابره وحب المعرفه , ساحاول شرح الموضوع بطريقه مبسطه ولكن ارجو ان تعذرونى لجهلى بلغه السى++.
ال linked list هى مثل الطريق إتجاه واحد, يعنى إذا بدات من بداية الطريق تستطيع فقط الذهاب إلى الامام, مثلاً إذا كنت فى النقطه a تستطيع الذهاب إلى النقطه b ومن ثم إلى النقطه c ولكن لا تستطيع العوده إلى النقطه a مره اخرى.
k->next تاخذك إلى النقطه التاليه و k->next->next تاخذك إلى النقطه التى تليها وهكذا والان نفترض انك فى النقطه c و اردت العوده إلى النقطه a, فى ال linked list لابد ان تبدا من البدايه وتتدرج إلى ان تصل إلى النقطه a.
اما فى doubel linked list فيمكنت إستخدام k->prev و k->prev->prev وهكذا إلى ان تصل إلى النقطه a .
بعض الامثله البسيطه:
while (k->next.name!= a){
k=k->next
...
}هذه الطريقه تصلح فى الحالتين, فى حالة ال linked list و فى حالة double linked list.
while (k->prev.name!= a){
k=k->next
...
}هذه الطريقه تصلح فقط لل double linked list, يعنى بال double linked list يمكنك الذهاب إلى الامام وإلى الخلف, ولكن فى ال linked list تستطيع فقط الذهاب إلى الامام.
توجد ايضاً طريقه مشابه لطريقة ال doubel linked list وتستخدم فى الاشجار binary tree ولكن بد الذهاب إلى الامام والخلف يذهب المؤشر إلى اليمين واليسار.
بالنسبه لل multi linked list فشرحها يطول, وهى تستخدم فى ما يسمى ال graph كل عنصر يخرج منه عدد من المؤشرات ويعود إليه عدد اخر من المؤشرات, وفى هذه الحاله ايضاً يوجد نوع من الاشجار يستخدم هذه الطريقه ولكن بدون العوده إلى الخلف.
موضوع ال graph و ال Tree ضخم جداً ومتشعب, رسمت صوره توضيحيه بسيطه تعطى بعض الامثله ولو فى سؤال انا فى الخدمه إن شاء الله.
والسلام
لا إله إلا الله محمد رسول الله
busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.
هذا الموضوع مغلق.