✤  لیست پیوندی

        #ساختمان داده 
آنچه در این نوشته می‌خوانید:

مبحث لیست‌های پیوندی یکی از شاخه‌های ساختمان داده‌ها است که حرف اول را در آن آشنایی با اشاره‌گرها و مفهوم آن می‌زند. برای این که بتوانید در مباحث مختلف ساختمان داده‌ها از قبیل لیست‌های پیوندی، صف، پشته و به ویژه درخت موفق باشید، باید مفهوم اشاره‌گرها را خوب متوجه شده باشید.

در مطالب قبلی اشاره شد که آرایه‌های ایستا با توجه به ویژگی‌هایی که دارند، نمی‌توانند در همه مواقع نیاز ما را برآورده کنند. به همین خاطر آرایه‌های پویا را به خدمت می‌گیریم. اما آرایه‌های پویا هم معایبی دارند. بزرگترین مشکل آرایه‌ها - چه ایستا و چه پویا - این است که اندازه ثابتی دارند و امکان تغییر اندازه پس از تعریف آنها وجود ندارد. این ویژگی گاهی چندان مهم نیست. مثلا فرض کنید قصد داریم یک ماتریس با ابعاد نامشخص را در یک آرایه دو بعدی به گونه‌ای قرار دهیم که با مشکل کمبود فضا و یا فضای اضافی مواجه نشویم. آرایه ایستا در این مورد کمکی به ما نمی‌کند. اما آرایه پویا به خوبی این مشکل را برطرف می‌کند.

حال برنامه‌ای را در نظر بگیرید که نام و شماره تلفن دوستان شما را ذخیره می‌کند. تعداد دوستان شما چقدر است؟ آیا همواره می‌توان این عدد - و یا حتی سقف آن - را مشخص کرد؟ شما هر لحظه ممکن است اسمی را به این لیست اضافه یا از آن حذف کنید. در این حالت آرایه پویا هم کمک چندانی به ما نمی‌کند و باید به سراغ ساختار دیگری برویم: لیست پیوندی.

مفهوم لیست پیوندی با ساختمان در زبان برنامه‌نویسی ++C در ارتباط است. ساختمان مثال فوق به این صورت است:

  

struct person {

    unsigned id;

    string name;

    string tel;

};

  

از چنین تعریفی برای مشخص کردن گره‌های لیست پیوندی استفاده می‌کنیم. در واقع لیست پیوندی مجموعه‌ای از این گره‌ها است که به هم متصل شده‌اند. اما چگونه؟ تعریف بالا را کمی تغییر داده و یک اشاره‌گر به خود در آن تعریف می‌کنیم:

  

struct person {

    unsigned id;

    string name;

    string tel;

    person *next;

};

  

اشاره‌گر next به متغیری از نوع خود ساختمان اشاره می‌کند. در واقع ما آدرس گره بعدی را در این اشاره‌گر قرار می‌دهیم. با این روش یک لیست کامل به دست می‌آید. اولین داده که وارد شد، اشاره‌گر next آن را تهی قرار می‌دهیم. وقتی داده دوم وارد شد، آدرس آن را در فیلد next داده اول قرار می‌دهیم و فیلد next خود آن را تهی می‌کنیم و الی آخر.

تذکر: تهی قرار دادن فیلد next آخرین گره برای تشخیص انتهای لیست ضروری است.

با این روش می‌توان یک لیست پیوندی با هر تعداد گره تشکیل داد. تنها محدودیت موجود حافظه کامپیوتر است. علاوه بر این، لیست پیوندی این خاصیت را دارد که بر خلاف آرایه‌ها، داده‌های ذخیره شده در آن لزوما به صورت پیوسته در حافظه قرار نمی‌گیرند. آرایه‌ها به صورت پیوسته هستند. یعنی اگر طول آرایه 1000 باشد، همه 1000 خانه آن به صورت متوالی و پشت سر هم در حافظه کامپیوتر قرار می‌گیرند. این مسئله محدودیت‌هایی را پیش می‌آورد. مثلا اگر در کامپیوتر 10000 خانه حافظه خالی داشته باشید که حداکثر 500 خانه آن به صورت پیوسته هستند، تنها می‌توانید آرایه‌ای به طول 500 تعریف کنید. لیست پیوندی این نقص را بر طرف کرده است. چرا که هر گره خود به صورت مستقل در حافظه ذخیره می‌شود. البته این خاصیت یک مزیت خوب را هم از بین می‌برد؛ و آن قابلیت اندیس‌گذاری داده‌ها است. به عناصر آرایه با استفاده از اندیس می‌توان دسترسی داشت؛ اما در لیست پیوندی مثلا برای دسترسی به عنصر پنجم باید از ابتدای لیست شروع کرده و چهار گره پیش برویم.

در ادامه این بحث فرض می‌گیریم گره‌های لیست از نوع myrec - شامل عنصری به نام next از نوع اشاره‌گر به خود - هستند.

در ابتدا، همیشه باید دو اشاره‌گر عمومی (مثلا به نام‌های first و last) تعریف کنید که یکی به ابتدای لیست و دیگری به انتهای آن اشاره کنند. در لیست‌های پیوندی اگر آدرس عنصر اول را داشته باشید، می‌توانید به همه عناصر دسترسی پیدا کنید. عنصر آخر هم زمان اضافه کردن گره جدید به کار می‌آید. با داشتن آدرس این گره در زمان اضافه کردن گره جدید، لازم نیست لیست را از ابتدا تا انتها برای یافتن آخرین گره پیمایش کنید. پس وجود این اشاره‌گرها مهم بوده و حتما باید تعریف شوند. در تعریف این اشاره‌گرها باید به دو نکته توجه کرد:

1- باید عمومی تعریف شوند. اگر از کلاس استفاده می‌کنید، باید عضو مستقیم و خصوصی کلاس باشند.

2- باید در زمان تعریف با تهی (NULL برای ++C) مقداردهی شوند. مانند عبارت‌های زیر:

  

myrec *first = NULL;

myrec *last = NULL;

  

یادآوری: برای دسترسی به عناصر یک ساختمان توسط اشاره‌گر دو روش وجود دارد:

  

first->next

(*first).next

  

این دو دستور معادل هستند، اما اولی کمی بامسماتر است.

  

اضافه کردن گره به لیست پیوندی

  [برگرد بالا]

وظیفه تابع add اضافه کردن یک گره به انتهای لیست پیوندی است. این تابع باید یک ورودی - شامل اطلاعات گره جدید - داشته باشد و نیازی به خروجی ندارد. البته می‌توان خروجی را از نوع بولی تعریف کرد که نشان می‌دهد عملیات با موفقیت انجام شده است یا نه؟

  

void add(myrec info) {

    myrec *temp;

    temp = new myrec;

    *temp = info;

    if(first == NULL) {

        first = temp;

        first->next = NULL;

        last = first;

    }

    else {

        last->next = temp;

        last = temp;

        last->next = NULL;

    }

}

  

این تابع، ابتدا با دستور new یک فضا برای گره جدید رزرو می‌کند و آدرس آن را در متغیر temp قرار می‌دهد. سپس محتوای info را در temp کپی می‌کند. دستورات مهم از اینجا شروع می‌شوند: ابتدا بررسی می‌کند که آیا first تهی است یا نه؟ اگر تهی باشد، یعنی لیست خالی است و گره جدید اولین گره لیست خواهد بود. پس temp را در first و last (چون لیست خالی بود، گره اول همان گره آخر هم می‌شود) کپی می‌کند. اگر first تهی نبود، تنها محل last را تغییر می‌دهد.

  

حذف یک گره از لیست پیوندی

  [برگرد بالا]

رکوردهای اطلاعاتی عموما فیلد منحصر بفردی دارند که آنها را از هم متمایز می‌کند. مانند شماره دانشجویی، شماره شناسنامه، کد عضویت، کد کتاب. چنین فیلدی را کلید رکورد می‌نامند. از کلید برای تشخیص رکورد و ایندکس کردن استفاده می‌شود. فرض کنیم رکوردهای ما هم کلیدی به نام id داشته باشند. از این فیلد برای پیدا کردن گرهی که باید حذف شود استفاده می‌کنیم. تابع del که برای حذف گره استفاده می‌شود، یک id را دریافت کرده و گره مربوطه را حذف می‌کند. اگر هیچ رکوردی با این id موجود نباشد، تابع هیچ عملی انجام نمی‌دهد.

  

void del(unsigned long id) {

    myrec *prior , *cur;

    cur = first;

    prior = NULL;

    while(cur != NULL && cur->id != id) {

        prior = cur;

        cur = cur->next;

    }

    if(cur == NULL)

        return;

    if(cur == first) {

        first = first -> next;

        if(cur == last)

            last = NULL;

    }

    else if(cur == last)

        last = prior;

    else

        prior->next = cur->next;

    delete cur;

}

  

این تابع ابتدا گره با id مورد نظر را در لیست جستجو می‌کند. اگر چنین گرهی پیدا نشد، بدون انجام عمل دیگری از تابع خارج می‌شود. اشاره‌گر cur به گره حذف‌شدنی اشاره دارد و اشاره‌گر prior به گره قبل از cur. چهار حالت برای گره حذف‌شدنی وجود دارد:

1- هم گره اول باشد و هم گره آخر.

2- تنها گره اول باشد.

3- تنها گره آخر باشد.

4- نه گره اول باشد و نه گره آخر.

کد بالا برای هر چهار حالت عملیاتی را که لازم است انجام می‌دهد. برای درک بهتر عملکرد تابع فوق، آن را به صورت خط به خط به ازای گره‌هایی که در چهار وضعیت ذکر شده قرار دارند ردیابی کنید.

ما به اشاره‌گر prior نیاز داریم تا بتوانیم گره‌های قبل و بعد از cur را به هم متصل کنیم. حذف یک گره از لیست مانند آن است که حلقه‌ای را از وسط زنجیر جدا کنید. بعد از حذف حلقه، دو تکه زنجیر را باید به هم وصل کرد تا زنجیر کامل به دست بیاید.

آخرین خط تابع فضای cur را نیز که دیگر نیازی به آن نداریم آزاد می‌کند.

  

درج یک گره در لیست پیوندی

  [برگرد بالا]

تایع insert یک گره را به هر نقطه دلخواه لیست پیوندی اضافه می‌کند. این تابع دو ورودی دارد: ورودی اول اطلاعات گره جدید و ورودی دوم محل درج گره که عموما توسط کلید مشخص می‌شود. به این معنی که گره جدید قبل از گره با کلید مشخص شده قرار می‌گیرد.

  

void insert(myrec info, unsigned long id) {

    myrec *prior, *cur, *temp;

    cur = first;

    prior = NULL;

    while(cur != NULL && cur->id != id) {

        prior = cur;

        cur = cur->next;

    }

    if(cur == NULL)

        return;

    temp = new myrec;

    *temp = info;

    prior->next = temp;

    temp->next = cur;

}

  

در اینجا از سه اشاره‌گر استفاده شده است: اشاره‌گر cur برای اشاره به گره جاری، اشاره‌گر prior برای اشاره به گره قبل از cur و بالاخره اشاره‌گر temp برای اشاره به گره جدید. این تابع گره با id تعیین شده را پیدا کرده و گره جدید را قبل از آن درج می‌کند. در واقع گرهی که temp به آن اشاره دارد بین گره‌های cur و prior قرار می‌گیرد.

  

پاک‌سازی لیست پیوندی

  [برگرد بالا]

قسمت آخر آموزش لیست‌های پیوندی را به تعریف تابعی اختصاص دارد که کلیه گره‌های لیست را حذف و فضای اختصاص یافته به آنها را آزاد می‌کند. این تابع زمانی فراخوانی می‌شود که کار ما با لیست پیوندی تمام شده و یا به هر دلیلی می‌خواهیم لیست را خالی کنیم. اگر از لیست‌های پیوندی کلاسی تشکیل بدهید، این تابع نقش تابع مخرب را بازی می‌کند.

  

void deleteall() {

    myrec *temp, *cur = first;

    while(cur != NULL) {

        temp = cur;

        cur = cur->next;

        delete temp;

    }

    first = NULL;

    last = NULL;

}

  

تابع deleteall با دو اشاره‌گر کار می‌کند. اشاره‌گر temp به گرهی که باید حذف شود و اشاره‌گر cur به گره جاری (گرهی که بعد از گره حذف‌شدنی قرار دارد) اشاره دارند. در هر بار اجرای حلقه، یک گره حذف می‌شود. بعد از تمام شدن حلقه، اشاره‌گرهای first و last تهی می‌شوند، تا مشخص شود که لیست خالی است.

ممکن است این سوال پیش بیاید که چرا تابع deleteall به صورت زیر نوشته نشد:

  

void deleteall() {

    myrec *cur = first;

    while(cur != NULL) {

        del(cur->id);

        cur = cur->next;

    }

}

  

در این روش، به ازای تک‌تک گره‌ها تابع del - که وظیفه حذف گره را دارد - فراخوانی می‌شود. به نظر می‌رسد در این حالت قطعه کد کمتری داریم و در فضای استفاده شده برای متغیرهای محلی تابع هم صرفه‌جویی کرده‌ایم. اما مسئله اصلی این است که در این حالت قطعه کدهای بی‌اثر فراوانی در داخل تابع del اجرا می‌شود. اگر به خاطر داشته باشید در حذف گره چهار حالت مختلف وجود داشت. هر بار فراخوانی تابع باعث می‌شود که قسمتی از این حالت‌ها به صورت تکراری - بدون این که واقعا نیازی باشد - بررسی شوند. بنابراین زمان اجرای کل الگوریتم ممکن است بیش از حد انتظار شود.

مسعود اقدسی فام

مسعود اقدسی فام هستم.

دانش‌آموخته‌ی علوم کامپیوتر و فعال حوزه‌های علم داده و یادگیری ماشین؛ علاقه‌مند به یاد دادن و یاد گرفتن :)

algs.ir/spqxh5o     اشتراک‌گذاری در LinkedIn     اشتراک‌گذاری در Twitter     ارسال با Telegram
نوشته‌ها از این دست
       ✦   صف اولویت‌دار
آخرین نوشته‌ها
       ✦   الگوریتم آنلاین
نوشته‌های پرمخاطب
  • 1
  • 2
  • 3
  • 4
  • 5

نام: *  

پست الکترونیک (محرمانه):

متن پیام: *  

01 02 06 07 08 09 10 11 12 13 14

• sardasht
پنجشنبه، ۲۵ آبان ماه ۱۳۸۵، ساعت ۰۴:۴۱

send for me

• علی
یکشنبه، ۱۲ آذر ماه ۱۳۸۵، ساعت ۰۶:۲۷

لطف کنید کتاب c# آقای هاشمیان را برای من هم میل کنید ممنونم

• بابك
چهارشنبه، ۲۲ آذر ماه ۱۳۸۵، ساعت ۰۶:۳۳

سلام دوست عزيز  مي خواستم يه adt به زبان c بنويسم ولي نميدونم چه طوري ! لطفا كمكم كنيد.

خيلي هم از سايت خوبتون ممنون خيلي كاربردي و خوبه.

با تشكر موفق باشيد

• yalda
سه‌شنبه، ۱ اسفند ماه ۱۳۸۵، ساعت ۲۳:۵۳

قسمت دوم توضیحات در مورد لیست پیوندی

• vahdaneh
پنجشنبه، ۳ اسفند ماه ۱۳۸۵، ساعت ۱۱:۴۱

پس این قسمت دوم لیستهای پیوندی چه شد؟

میخواهم برنامه ای بنویسم  مشتمل بر توابع درج یک عنصر به لیست پیوندی و حذف یک عنصر از لیست و جست و جوی یک عنصر از لیست و نمایش کل عناصر لیست در قالب لیست تک پیوندی با استفاده از رکورد دانشجویی. لطفا مرا راهنمایی کنید.

در ضمن سایتتون عالیه.

• vahdaneh
پنجشنبه، ۳ اسفند ماه ۱۳۸۵، ساعت ۱۲:۰۳

سلام

چرا راجع به لیستهای تک پیوندی و دو پیوندی صحبت نکردید.

لطفا درباره این مبحث به ایمیل من  بفرستید.

با تشکر

• vahdaneh
پنجشنبه، ۳ اسفند ماه ۱۳۸۵، ساعت ۱۲:۴۲

سلام

در رابطه با درج و حذف یک گره از لیست برنامه داشتید اما درباره جست و جوی یک گره از لیست و نمایش کل گره های موجود در لیست برنامه نداشتید . لطف کنید انها را به من میل کنید خیلی عجله دارم.

از شما ممنونم.

• hosseini
یکشنبه، ۲۷ اسفند ماه ۱۳۸۵، ساعت ۰۸:۱۳

salam be hame dustane aziz:

man mikham ba "Message Queue" dar C#.Net ashna besham va betunam barname benevisam.

kasi mitune komakam kone? tarjihan chizayi ke mifrestin farsi bashe. ye mesal ba tozihat ke betunam befahmam.

kheili kheili mamnun.

bye

rasti message queue ra dar server explorere c#.net  mitunid bebinid!.

• ستایش
شنبه، ۱۵ اردیبهشت ماه ۱۳۸۶، ساعت ۱۱:۳۸

از من خواسته شده با برنامه ++c یک بازی طراحی کنم اما نمی دونم چه طوری؟

در ضمن تا بحال ++c  را بصورت گرافیکی کار نکردم

ممکنه کمکم کنید؟

• حدیث
یکشنبه، ۶ خرداد ماه ۱۳۸۶، ساعت ۱۷:۴۴

سلام خسته نباشید.لطفایک خلاصه از لیست پیوندی برام بنویسید.مرسی

• nasim
سه‌شنبه، ۸ خرداد ماه ۱۳۸۶، ساعت ۲۱:۴۶

سلام

ببخشید اگه امکانش هست راجع به حذف و اضافه یک ند درر درخت هم برنامه ایی ارایه بدید من خیلی بهش احتیاج دارم

ممنون

• bahareh
چهارشنبه، ۱۶ خرداد ماه ۱۳۸۶، ساعت ۱۰:۱۲

لطف کنین و منو درمورد الگوریتم های      پریم     و      راشال    و    سولین      کمک کنین. من اطلاعات کاملی در مورد این الگوریتم هامیخوام .لطفا به میل خصوصی ام بفر ستید

• محمد
چهارشنبه، ۱۶ خرداد ماه ۱۳۸۶، ساعت ۱۹:۰۰

سلام دوست عزيز

ميخواستم در مورد ليستهاي پيوندي در پاسکال کمکم کنيد

اگر ميشه و يا اگر تو بانکتون يه برنامه‌ي نمونه از ليستهاي پيوندي دارين که بتونه سه تا کار زير رو بکنه ممنون ميشم:

1- الحاق دو ليست پيوندي (يعني وصل کردن دو ليست به هم)

2- حذف گره‌ مورد نظر

3- نمايش محتواي ليست

البته اگر امکان معکوس کردن ليست رو هم داشت خيلي ازتون ممنون ميشم

واقعا متشکرم

ياعلي

• میثم
جمعه، ۲۲ تیر ماه ۱۳۸۶، ساعت ۰۷:۳۶

سلام

لطفا برنامه ای برای درج در لیست پبوندی (در ابتدا وانتها و هر جای دیگر)وحذف برام بنویسید.مرسی

• roozbeh
سه‌شنبه، ۲ مرداد ماه ۱۳۸۶، ساعت ۲۳:۴۵

agar mishe name english list e peyvandi ra be man begooid

merci

مسعود اقدسی فام
چهارشنبه، ۳ مرداد ماه ۱۳۸۶، ساعت ۰۸:۴۳

روزبه جان سلام

Linked List

• مصطفی
جمعه، ۱۹ مرداد ماه ۱۳۸۶، ساعت ۰۹:۵۷

الگوریتم حذف از اول صف را می خواهم

• محمد
شنبه، ۲۷ مرداد ماه ۱۳۸۶، ساعت ۱۶:۱۷

سلام نوکر داداشا

میخواستم درمورد لیستهای پیوندی با زبان پاسکال کمکم کنید.

درباره طراحی محیط editor فقط دو از کاراشو:

1-حذف گره

2-درج یک حروف بین کلمات

از سایت خیلی خیلی خوبتون ممنونم خیلی بی ادبیه اگه میشه تا آخر این هفته برام مشخص کنید خیلی معذرت میخوام

• شیما
شنبه، ۳ شهریور ماه ۱۳۸۶، ساعت ۱۱:۴۳

لطفا مرا در قوی شدن برنامه نویسی راهنمایی بفرمایید

• Mahsa
شنبه، ۱۷ شهریور ماه ۱۳۸۶، ساعت ۱۱:۲۴

لطفا در مورد پیچیدگی توابع هم مطالبی بدین

• rain
دوشنبه، ۱۹ شهریور ماه ۱۳۸۶، ساعت ۱۸:۰۹

با سلام.ممنون از مطالب مفیدتون.

خواهش می کنم اگه میشه در مورد مرتب کردن لیست پیوندی مطلبی به میلم بفرستید.

بازم ممنون

• علیرضا
جمعه، ۲۷ مهر ماه ۱۳۸۶، ساعت ۱۲:۴۶

با سلام وخسته نباشید

من دانشجوی کاردانی کامپیوتر و ترم اخر هستم با توجه به اینکه می خوام در کنکور کارشناسی شرکت کنکم در درس بسیا مشکل ساختمان داده ضعف دارم و شنیده ام که در کنکور دانشگاه دولتی در بحث ساختمان داده از ارشد نیز تست طرح مکنن لذا از شما خواهش مکنم یه کتاب خوب یا اگه جزوه مناسبی دارین به معرفی کنین خیلی متشکرم از شما بخاطر سایت بسیا مفیدتون

• نسترن
جمعه، ۲۷ مهر ماه ۱۳۸۶، ساعت ۱۹:۳۸

سلام!

ممنون ميشم اگه به ايميلم غملگرهاي ليست دو پيوندي و مفهوم ليست دو پيوندي رو بفرستين.

منتظر پيامتونم...

مرسي.

• نسترن
جمعه، ۲۷ مهر ماه ۱۳۸۶، ساعت ۱۹:۴۸

من تا 2شنبه مي خوام!

يه گزارش از مفاهيم ليست دو پيوندي و عملگر هاي اون مي خوام...

ممنون از سايتتون:-)

• mina
دوشنبه، ۲۱ آبان ماه ۱۳۸۶، ساعت ۱۴:۴۶

سلام لطفا کمکم کنيد .تمرينات فصل چهارم کتاب ساختمان داده مولف :مهندس مقسمي رو مي خوام

• sima
پنجشنبه، ۱ آذر ماه ۱۳۸۶، ساعت ۱۵:۰۸

سلام

من اولین بارمه که به سایت شما سر میزنم ولی خوب ... اینجور که معلومه سایت خوبیه! آخه همه ازش تعریف کردن!

من یه سوال دارم می خواهم در نوشتن یه برنامه به شرح زیر کمکم کنید

برنامه ای که یک لیست پیوندی از تعدادی عدد حقیقی نامنفی ایجاد کنه بعدش لیست رو پیمایش کنه و بزرگترین کوچکترین و میانگین اعداد رو چاپ کنه (فقط برای 5 تا عدد میخواهم)و البته برای خروج عدد منفی بگیره

با تشکر

• amir
پنجشنبه، ۱ آذر ماه ۱۳۸۶، ساعت ۱۸:۵۶

سلام. من دانشجوی رشته صنایع هستم . پروژه من ساخت برنامهbranch and bound با استفاده از لیست پیوندی پاسکال است . میخواستم منو راهنمایی کنید ... با تشکر

• mehrdad
یکشنبه، ۴ آذر ماه ۱۳۸۶، ساعت ۱۱:۰۰

ارایه پشته(stack) با استفاده از لیست پیوندی؟

• هایده
پنجشنبه، ۲۲ آذر ماه ۱۳۸۶، ساعت ۱۸:۵۸

الحاق دو لیست پیوندی

مشخص کردن سطح گره درخت

• lili
شنبه، ۲۲ دی ماه ۱۳۸۶، ساعت ۱۶:۱۰

Dear shima:

just practice and be brave don't afraid of errors and difficult programs just want to learn everithing will be solved. be sure. and  pratice and practic untill your fingers be painfull!

• samira
یکشنبه، ۷ بهمن ماه ۱۳۸۶، ساعت ۰۸:۴۴

میخواهم برنامه ای بنویسم با استفاده از رکورد دانشجویی مشتمل بر توابع اضافه کردن دانشجو حذف دانشجو از لیست که دانشجوها بصورت لیست دو پیوندی بهم مربوطند و هر دانشجو به درسهای آن بصورت تک پیوندی در ارتباط است درمورد حذف و اضافه دانشجو مشکلی ندارم ولی برای حذف و اضافه درس ، به یک دانشجوی خاص  . لطفا مرا راهنمایی کنید.

• عسل
سه‌شنبه، ۱۶ بهمن ماه ۱۳۸۶، ساعت ۰۸:۵۰

سلام می خواستم در موردبرنامه delete , back spaceدر editor کمکم کنید.متشکرم

• mahtab
پنجشنبه، ۲ اسفند ماه ۱۳۸۶، ساعت ۱۷:۱۹

salam khaste nabashid,

man ba trife liste peivandi moshkel daram,nemidunam chera hamash error mide age momkene ye mesal vasam bezanid ya laaghal tozih bedid.

mamnun misham.

keili ezterariye,vaght nadaram.

help!

مسعود اقدسی فام
پنجشنبه، ۲ اسفند ماه ۱۳۸۶، ساعت ۱۷:۲۸

مهتاب خانوم در مجموعه مطالبی که با هنوان لیست پیوندی در سایت اومده هر چیزی که بخواین هست!

• فائزه سیر
پنجشنبه، ۸ فروردین ماه ۱۳۸۷، ساعت ۱۹:۰۴

ادرس ارایه 3بعدی وچهار بعدی چیست؟  با یک مثال لطفا بگویید(با تشکر فراوان)

• azar
چهارشنبه، ۱۸ اردیبهشت ماه ۱۳۸۷، ساعت ۱۳:۰۴

سلام.

ببخشيد كسي مي دونه چه طوري مي شه توسط دو تا پشته يك صف ساخت؟

مسعود اقدسی فام
چهارشنبه، ۱۸ اردیبهشت ماه ۱۳۸۷، ساعت ۱۶:۳۱

آذر خانم داده ها رو وارد پشته شماره 1 می کنید. زمانی که می خواین عنصری رو خارج کنید تمام عناصر رو از پشته خارج و وارد پشنه بعدی می کنید. آخرین عنصری که از پشته خارج می شه همون عنصر خروجی شماست.

در واقع پشته شماره یک برای درج در صف و پشته شماره 2 برای حذف استفاده می شه.

• مهناز
سه‌شنبه، ۱۴ خرداد ماه ۱۳۸۷، ساعت ۲۱:۳۲

سلام

میشه تو نوشتن برنامه جمع دو عدد بسیار بزرگ با استفاده از پشته ها بهم کمک کنین؟

• ندا
شنبه، ۲۵ خرداد ماه ۱۳۸۷، ساعت ۰۱:۴۷

ممنون از این همه لطف

من این همه سرچ کردم  هیچ سایتی به این اندازه کمک نکرد

خسته نباشین کارتون  فوق العاده است

• ژرفا
سه‌شنبه، ۸ مرداد ماه ۱۳۸۷، ساعت ۱۹:۵۷

با سلام! میشه لطف کنید در مورد مرتب سازی لیست پیوندی دو طرفه راهنماییم کنید

ممنون!

مسعود اقدسی فام
پنجشنبه، ۱۰ مرداد ماه ۱۳۸۷، ساعت ۰۷:۱۵

ژرفا جان مرتب سازی لیست پیوندی دوطرفه با آرایه معمولی چندان تفاوتی نداره. فقط روشهایی مثل مرتب سازی ادغامی که اندیس ها هم نقش دارن در اجراشون کمی پیچیده می شن. در کل با توجه به نبود اندیس در لیست پیوندی کمی پیاده سازی الگوریتمها متفاوت می شن.

• لیما
شنبه، ۱۵ فروردین ماه ۱۳۸۸، ساعت ۱۸:۲۱

salam   man barnameye sakht node ,darje node ra baestefede az tabe da c++ anjam medaham vale dar farakhane dar main ashkal daram lotfan rahnemeye koned

• azi
چهارشنبه، ۱۹ فروردین ماه ۱۳۸۸، ساعت ۱۸:۳۵

سلام-لطفا يك خلاصه از ليست پيوندي دوطرفه نه ليست دو پيوندي برام ارسال كنيد0ممنون

•  ؟؟
شنبه، ۲ آبان ماه ۱۳۸۸، ساعت ۱۸:۴۳

چطور میشه یک لیست پیوندی را به وسیله آرایه پیاده سازی کرد؟؟

دوشنبه، ۱۱ آبان ماه ۱۳۸۸، ساعت ۱۹:۱۱
• مسعود اقدسی فام

سلام

نمی دونم منظورتون از پیاده سازی با آرایه چیه؟ لیست پیوندی خودش جایگزینی برای آرایه محسوب می شه! اگر هم ارتباطی بین آرایه و پیاده سازی لیست پیوندی وجود داشته باشه، من چیزی در موردش نشنیدم تا به حال.

• amir
سه‌شنبه، ۱۲ آبان ماه ۱۳۸۸، ساعت ۰۱:۰۳

اقا جون خیلی باحالی ...

امیدوارم در تمام مراحل زندگیت موفق باشی06

سه‌شنبه، ۱۲ آبان ماه ۱۳۸۸، ساعت ۰۹:۳۰
• مسعود اقدسی فام

ممنون امیر جان. 01

• الهه
دوشنبه، ۲ آذر ماه ۱۳۸۸، ساعت ۲۱:۱۴

سلام دوست عزیز

میشه لیست پیوندی رو با زبانه c هم بزاری آخه من سی++ یاد ندارم 06

دوشنبه، ۲ آذر ماه ۱۳۸۸، ساعت ۲۲:۰۸
• مسعود اقدسی فام

این قطعه برنامه هایی که اینجا نوشته شدن، تفاوت چندانی با معادل زبان C خودشون ندارن. کافیه چند خط رو تغییر بدید.

• سامان
یکشنبه، ۲۶ اردیبهشت ماه ۱۳۸۹، ساعت ۲۲:۰۱

سلام  ببخشید میخواستم بپرسم چه جوری میشه پشته را با استفاده از لیست پیوندی  پیاده سازی کنیم 10 من پروژم اینه ونمیدونم چه کار کنم کسی میتونه کمکم کنه خواهش میکنم07

دوشنبه، ۲۷ اردیبهشت ماه ۱۳۸۹، ساعت ۲۱:۳۴
• مسعود اقدسی فام

یه لیست پیوندی رو در نظر بگیر که همیشه گرهها به انتهای لیست اضافه می شن و فقط از انتهای لیست حذف می شن. یعنی نمی تونی گرهی رو به وسط یا ابتدای لیست اضافه کنی، یا ازش حذف کنی.

• سارا
چهارشنبه، ۱۲ خرداد ماه ۱۳۸۹، ساعت ۱۷:۱۰

سلام خسته نباشید

میخواستم بپرسم چطوری میشه با لیست پیوندی صف روپیاده سازی کرد؟درصورت امکان برنامش رو بنویسید ممنون060110

• محمد
پنجشنبه، ۲۰ خرداد ماه ۱۳۸۹، ساعت ۱۷:۰۳

لطفا" الگوریتم محاسبه تعداد گره های لیست را برایم بیان کنید

• اکرم
سه‌شنبه، ۱ تیر ماه ۱۳۸۹، ساعت ۰۱:۰۳

با سلام و عرض ادب

میشه لطفا تابع پیاده سازی ماتریس اسپارس به وسیله لیست پیوندی را بنویسید.

با تشکر فراوان

• nahid
یکشنبه، ۶ تیر ماه ۱۳۸۹، ساعت ۱۸:۵۳

سلام واقعا خسته نباشید و ممنون .

• ش
چهارشنبه، ۲۹ دی ماه ۱۳۸۹، ساعت ۲۱:۰۶

بسیار ممنون به خاطر این مطلب خوب

• علی
سه‌شنبه، ۲۰ اردیبهشت ماه ۱۳۹۰، ساعت ۲۲:۴۰

با سلام

ممنون از سایت مفدیتون

دنبال یکی از الگوریتم های خاص طراحیه الگوریتم می گردم که موضوع باحالی برای مقالم باشه،میتونین کمکم کنید آخه نمیدونم کدوم الگوریتم رو دنبال کنم؟؟؟؟!!!!!10

• پگاه
دوشنبه، ۲۶ اردیبهشت ماه ۱۳۹۰، ساعت ۱۶:۱۳

با سلام

برنامه ای می خواهم که 10 عدد از ورودی بگیرد و در یک لیست پیوندی قراردهد و آنها را حساب کند و عدد بزرگتر از میانگین را چاپ کند.07

• حسین
دوشنبه، ۲ خرداد ماه ۱۳۹۰، ساعت ۱۸:۳۴

عالی بود

• DONYA
چهارشنبه، ۱۸ آبان ماه ۱۳۹۰، ساعت ۱۷:۵۶

با عرض سلام و تبریک اعیاد

چجور میشه عناصر 2 لیست پیوندی رو که ممکنه هم علامت نباشن رو جمع کنیم؟

• DONYA
چهارشنبه، ۱۸ آبان ماه ۱۳۹۰، ساعت ۱۸:۰۴

لطف بزرگی میکنید اگه با جاوا باشه

• مسعود
سه‌شنبه، ۲۴ آبان ماه ۱۳۹۰، ساعت ۲۰:۳۰

سلام ممنون از زحمتی که کشیدی فقط تورو خدا تصویری و با شکل توضیح بده .

اگه میشه در مورد پویش و جستجو هم توضیح بده .

• الهام
شنبه، ۱۹ آذر ماه ۱۳۹۰، ساعت ۱۰:۱۹

سوال: برنامه لیست دو پیوندی با قابلیت جستجو رو میخواستم ممنون میشم

• الهام
یکشنبه، ۲۰ آذر ماه ۱۳۹۰، ساعت ۰۸:۴۴

سوال: برنامه لیست دو پیوندی با قابلیت جستجو رو میخواستم ممنون میشم

• mohsen
دوشنبه، ۲۸ فروردین ماه ۱۳۹۱، ساعت ۱۰:۰۳

سلام ببخشید من یه پروژه دارم....میتونین زمان اجرای یه مثال رو با انواع الگوریتم جستجویی برام ایمیل کنین...لطفا اگه میشه یه راهنمایی کنین06

• sh
پنجشنبه، ۱۸ خرداد ماه ۱۳۹۱، ساعت ۱۱:۱۸

سلام اگه میشه این برنامه رو بنویسید 07

با استفاده از کلاس برنامه ای بنویسید که تعدادی داده از ورودی گرفته و در یک پشته قرار دهد(پیاده سازی پشته با لیست پیوندی) سپس داده ها را به ترتیب ورود در خروجی چاپ کند

• baran
دوشنبه، ۱۵ آبان ماه ۱۳۹۱، ساعت ۱۹:۴۳

سلام خسته نباشید ببخشید من برنامه ای میخوام که چند عدد رو از ورودی دریافت کنه و اون رو به لیست پیوندی دو طرفه تبدیل کنه و عملیات حذف و اضافه کردن یک گره و مرتب کردن به صورت صعودی و معکوس کردن رو روی اون انجام بده .اگه کمکم کنید ممنونتون میشم

• zahra
دوشنبه، ۱۳ آذر ماه ۱۳۹۱، ساعت ۱۶:۳۴

با سلام و خسته نباشید

یک مشکلی داشتم در صورتی که میتونید کمکم کنید

الگوریتمی که با استفاده از تقسیم وحل بزرگترین عنصر یک لیست n عنصری را پیدا کند(به زبان جاوا)

ممنون.

• روشنا
جمعه، ۱۳ اردیبهشت ماه ۱۳۹۲، ساعت ۱۳:۰۹

سلام

میشه درباره myrec توضیح بدی چیه؟

• مریم
سه‌شنبه، ۲۴ اردیبهشت ماه ۱۳۹۲، ساعت ۱۰:۵۵

با سلام دنبال حذف یک عنصر از درخت مکس هیپ میگردم لطفا کمکم کنید

با تشکر

• من
شنبه، ۲۵ آبان ماه ۱۳۹۲، ساعت ۱۸:۱۳

سلام یه سوال داشتم.>

چرا کسی نمیره سه چهار تا کتاب رو کامل بخونه بعد به جواب سوالاش برسه؟

• آیهان
جمعه، ۲۵ بهمن ماه ۱۳۹۲، ساعت ۲۲:۱۷

سلام

تروخدااااااا  این برنامه رو برام بنویسین بخدا لازممه استادم میخواد

برنامه ای بنویسید که معدل صد نفر ار دانشجویان را در یک لیست پیوندی دوطرفه ذخیره کرده سپس میانگین معدل این صد نفر را در خروجی چاپ کند(به زبان c++)

• پریسا
شنبه، ۶ دی ماه ۱۳۹۳، ساعت ۲۳:۳۰

سلام.خسته نباشید ..چطوری میشه محتوای لیست پیوندی رو دوبرابر کرد؟ جواب بدید لطفا10

• الهام
یکشنبه، ۱۴ دی ماه ۱۳۹۳، ساعت ۱۲:۱۵

لطفا این سوال هم بگین خیلی مهمه

تابعی بنویسید که آدرس یک گره لیست پیوندی یکطرفه ساده باعناصری باداده های عددی را به عنوان ورودی دریافت کرده میانگین عناصر لیست را به عنوان خروجی تابع برگرداند

• امیرماهان
جمعه، ۲۷ آذر ماه ۱۳۹۴، ساعت ۰۰:۳۵

سلام

میتونی کلاس صف روبالیست پیوندی به زبان جاوابرای این ایمیل بفرستی؟؟؟

• sara
شنبه، ۲۲ مهر ماه ۱۳۹۶، ساعت ۱۳:۲۸

ممنون مفید بود

• f.miriyam
شنبه، ۲۰ آبان ماه ۱۳۹۶، ساعت ۰۱:۲۴

سلام وقت بخیر معکوس کردن لیست پیوندی چجوریه؟

• الی
جمعه، ۳۱ فروردین ماه ۱۳۹۷، ساعت ۱۹:۰۳

070707070707070707

• artemis
چهارشنبه، ۱۸ مهر ماه ۱۳۹۷، ساعت ۱۴:۱۹

0606060606010101

• فلاحی
دوشنبه، ۱۲ آذر ماه ۱۳۹۷، ساعت ۲۳:۴۲

سلام خسته نباشید

فراخوانیشو میخوام تو فرم لطفا

• atefe
شنبه، ۲۴ آذر ماه ۱۳۹۷، ساعت ۱۱:۳۲

سلام

برنامه ای بنویسید که در ان یک درخت با 5 گره و درجه 3 ایجاد کند؟

میتونید کمک کنید.

ممنون

• ترانه
یکشنبه، ۱۵ اردیبهشت ماه ۱۳۹۸، ساعت ۱۰:۳۰

توابع insert, remove, search, را درلیست پیوندی دوطرفه بنویسید؟؟

• Ayy
جمعه، ۲۷ دی ماه ۱۳۹۸، ساعت ۱۰:۳۳

لطفا برنامه ای بنویسید که دو عدد صحیح بزرگ با علامت های مختلف را باهم جمع کند؟

• ثنا
دوشنبه، ۲۷ مرداد ماه ۱۳۹۹، ساعت ۲۰:۰۴

سلام چطور در یک لینک لیست میشه جست و جو کرد

کدش چیه؟🙁

• ارزو
چهارشنبه، ۱۲ آذر ماه ۱۳۹۹، ساعت ۱۶:۴۸

تابعی بنویسید که اشاره گر شروع یک لیست پیوندی را به عنوان پارامتر ورودی دریافت کرده و حاصل جمع داده های مو جود در لیست را محاسبه کرده و بر گرداند     اینو میتونی برام حل کنید هرکی حل کرد بفرسته رو جیملم  gogreg110@gmail.com

• ارزو
چهارشنبه، ۱۲ آذر ماه ۱۳۹۹، ساعت ۱۶:۴۸

تابعی بنویسید که اشاره گر شروع یک لیست پیوندی را به عنوان پارامتر ورودی دریافت کرده و حاصل جمع داده های مو جود در لیست را محاسبه کرده و بر گرداند     اینو میتونی برام حل کنید هرکی حل کرد بفرسته رو جیملم  gogreg110@gmail.com

• ارزو
چهارشنبه، ۱۲ آذر ماه ۱۳۹۹، ساعت ۱۶:۴۸

تابعی بنویسید که اشاره گر شروع یک لیست پیوندی را به عنوان پارامتر ورودی دریافت کرده و حاصل جمع داده های مو جود در لیست را محاسبه کرده و بر گرداند     اینو میتونی برام حل کنید هرکی حل کرد بفرسته رو جیملم  gogreg110@gmail.com

• ارزو
چهارشنبه، ۱۲ آذر ماه ۱۳۹۹، ساعت ۱۶:۴۸

تابعی بنویسید که اشاره گر شروع یک لیست پیوندی را به عنوان پارامتر ورودی دریافت کرده و حاصل جمع داده های مو جود در لیست را محاسبه کرده و بر گرداند     اینو میتونی برام حل کنید هرکی حل کرد بفرسته رو جیملم  gogreg110@gmail.com

• ارزو
چهارشنبه، ۱۲ آذر ماه ۱۳۹۹، ساعت ۱۶:۴۸

تابعی بنویسید که اشاره گر شروع یک لیست پیوندی را به عنوان پارامتر ورودی دریافت کرده و حاصل جمع داده های مو جود در لیست را محاسبه کرده و بر گرداند     اینو میتونی برام حل کنید هرکی حل کرد بفرسته رو جیملم  gogreg110@gmail.com

• ارزو
چهارشنبه، ۱۲ آذر ماه ۱۳۹۹، ساعت ۱۶:۴۸

تابعی بنویسید که اشاره گر شروع یک لیست پیوندی را به عنوان پارامتر ورودی دریافت کرده و حاصل جمع داده های مو جود در لیست را محاسبه کرده و بر گرداند     اینو میتونی برام حل کنید هرکی حل کرد بفرسته رو جیملم  gogreg110@gmail.com

• فاطمه
دوشنبه، ۲۴ آذر ماه ۱۳۹۹، ساعت ۱۸:۳۵

سلام لطفا

تابعی که تعداد گره های یک لیست پیوندی یک طرفه رو نشون میده با تابعی که یه لیست پیوندی یک طرفه رو کپی میکنه و تابعی که برابرب دو لیست پیوندی رو نشون میده رو هم بگین ممنون اگر میشه به زبان سی شارپ بگین

• نگار
دوشنبه، ۱۳ بهمن ماه ۱۳۹۹، ساعت ۱۳:۳۰

سلام میشه یه شبه کدی بگویید برای شمارش تعداد گره های یک لیست پیوندی

• نگار
دوشنبه، ۱۳ بهمن ماه ۱۳۹۹، ساعت ۱۳:۳۳

سلام میشه یه شبه کدی بگویید برای شمارش تعداد گره های یک لیست پیوندی