الگوریتمستان - لیست پیوندی

مفهوم و پیاده‌سازی با زبان برنامه‌نویسی ++C

✤    ۱۱ مرداد ۱۳۸۵ - آخرین به‌روزرسانی: ۲ شهریور ۱۳۸۸

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

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

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

مفهوم لیست پیوندی با ساختمان در زبان برنامه‌نویسی ++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 اجرا می‌شود. اگر به خاطر داشته باشید در حذف گره چهار حالت مختلف وجود داشت. هر بار فراخوانی تابع باعث می‌شود که قسمتی از این حالت‌ها به صورت تکراری - بدون این که واقعا نیازی باشد - بررسی شوند. بنابراین زمان اجرای کل الگوریتم ممکن است بیش از حد انتظار شود.


نسخه‌ی اولیه‌ی این نوشته از وبلاگ برنامه‌نویسی و طراحی الگوریتم به الگوریتمستان منتقل شده است.

تا کنون ۹۷ امتیاز ثبت شده
نوشته لایک نداشت؟
 
به اشتراک گذاری نوشته

amasoudfam.ir/l/qxh5o

اشتراک‌گذاری در LinkedIn     اشتراک‌گذاری در Twitter     ارسال با Telegram

نام: *  
پست الکترونیک (محرمانه):
پیام: *  
• 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

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

سلام لطفا

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

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

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

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

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