اطلاعیه

Collapse
No announcement yet.

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

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

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

    دوستان من میخام linkd list بسازم ، تو نت هم گشتم ، و آموزش های زیادی هم بود، ولی من اصلا نفهمیدم چرا باید کلاس معرفی کنن برای node .
    و دوباره کلاس معرفی میکنن برای linked list ،
    و حالا چجوری ربط میدن این مستطیل ها رو بهمف اصلا داستانی شده ،
    یا مثلا تو صفحه :
    http://open-mind.ir/?p=165
    در اولین کادری که کد داره ، چرا از :
    کد:
    friend class linkedlist;
    استفاده شده؟

    دوستان لطف کنید یه سر طنابی بهم بدید که بتونم بگیرمشو راه بیوفتم ، الان واقعا گم هستم .


    با تشکر.
    به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
    (پیش به سوی هدف)

    #2
    پاسخ : راهنمایی در مورد ساختن لینکد لیستها

    برای اینکه نخوای توابعی که برای لینک لیست هستن رو بنویسی یه راهش استفاده از کلاس هاست.
    مثلا توابعی که میان یک عضو رو برمیدارن و میذارن. حذف میکنن. جستجو میکنن و از این کارها.
    اگر بخوای خودت بنویسی دردسر داره.
    اما با تعریف کلاس و استفاده از کتابخانه STL کارت راحت میشه
    برای یادگیری باحال این مبحث میتونی بری سایت مکتبخونه و کلاسهای آموزش سی کیارش بازرگان رو دانلود کنی.
    3 جلسه آخر بحث کلاس هاست و لینک لیست رو هم قشنگ میگه چطور باید استفاده کنی.
    اگر هم نخوای از کلاس ها استفاده میکنی میتونی خودت بنویسیش و اواخر جلسه 28 و بعدش جلسه 29 موضوع رو قشنگ توضیح میده
    ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

    امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

    دیدگاه


      #3
      پاسخ : راهنمایی در مورد ساختن لینکد لیستها

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

      به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
      (پیش به سوی هدف)

      دیدگاه


        #4
        پاسخ : راهنمایی در مورد ساختن لینکد لیستها

        دوستان چرا اینجا badi تو استراکت به عنوان اشاره گر تعریف شد؟
        الان من اینطور که فهمیدم badi از جنس استراکت لینکدلیست هست که دارای دوتا متغییر هست که یکی از نوع int و یکی از نوع دوباره استراکت؟
        یه کوچولو توضیح بدید ممنون میشم.
        کد:
        #include "stdafx.h"
        #include <iostream>
        using namespace std;
        struct linkedlist
        {
        	int data;
        	struct linkedlist *badi;
        };
        int main ()
        {
          struct linkedlist *sar , *temp;
        	temp = new linkedlist;
        	temp->data = 14;
        	sar = temp;
        	temp = new linkedlist ;
        	temp->data = 23;
        	sar->badi = temp;
        	temp->badi = new linkedlist;
        	temp->badi->data=98;
        	temp->badi->badi = NULL;
          system("pause");
          
        }
        با تشکر .
        به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
        (پیش به سوی هدف)

        دیدگاه


          #5
          پاسخ : راهنمایی در مورد ساختن لینکد لیستها

          خب هر خونه حافظه ای که به شما داده میشه شامل دو بخشه:
          1- داده مورد نظر
          2- آدرس خونه بعدی
          این خونه ها مثل زنجیز بهم وصل هستند. چون هرکدوم از زنجیرها ازنوع struct هستند پس باید بخشی که قراره آدرس خونه بعدی رو در خودش ذخیره کنه (badi) هم از جنس ساختار باشه تا کامپایلر بدونه چقدر باید بهش حافظه تخصیص بده
          ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

          امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

          دیدگاه


            #6
            پاسخ : راهنمایی در مورد ساختن لینکد لیستها

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

            انواع ساختمان های داده هست
            1- آرایه ها
            2- صف ها
            3 - پشته ها
            4- لیست های پیوندی
            5- درخت ها
            6-گراف

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

            دیدگاه


              #7
              پاسخ : راهنمایی در مورد ساختن لینکد لیستها

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

              انواع ساختمان های داده هست
              1- آرایه ها
              2- صف ها
              3 - پشته ها
              4- لیست های پیوندی
              5- درخت ها
              6-گراف

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

              شما درست میفرمایید.
              تازگی ها هنگامی که داشتم تمرینات c++ رو انجام میدادم، از آرایه استفاده کردم ، که باید در هر مرحله از حلقه ، یکی از آرایه ها رو مینداختم کنار، که اصلا معلوم نبود کدوم اجزاء آرایه هست،و برای حذف اون آرایه ، خط زیادی برای این کار نوشتم، بخاطر همین دوستان گفتن با لینکدلیستها کارت راحتر میشه و بهتر کار میکنی.
              برا همین من رفتم سراغ لینکد لیستها، البته vector هم پیشنهاد شده بود.

              با تشکر.
              به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
              (پیش به سوی هدف)

              دیدگاه


                #8
                پاسخ : راهنمایی در مورد ساختن لینکد لیستها

                من یه تابع نوشتم که با فراخانی این تابع ، لیستی را از لینکد لیست حذف میکنه ، ولی مشکل اینجاست که وقتی من تابع رو فراخانی میکنم ، و میرم داخل تابع ، همه چی درسته و تابع به درستی کارشو انجام میده ، ولی وقتی تابع تموم میشه و برمیگرده به main ، لیست اصلی هیچ تغییری نمیکنه ، انگار هیچ اتفاقی نیوفتاد ، یعنی تغییرات تابع ثبت نمیشه.
                باید چیکار کنم ؟
                اینم کد:
                کد:
                #include "stdafx.h"
                #include <iostream>
                void hazf (struct linkedlist *sar , int adadeList);
                using namespace std;
                struct linkedlist
                {
                	int data;
                	struct linkedlist *badi;
                };
                
                int main ()
                {
                  struct linkedlist *sar , *temp ; 
                	
                	temp = new linkedlist;
                	temp->data = 14;
                	sar = temp;
                	temp = new linkedlist ;
                	temp->data = 23;
                	sar->badi = temp;
                
                	temp->badi = new linkedlist;
                	temp->badi->data=98;
                	temp->badi->badi = NULL;
                	//tabe injast
                	hazf(sar , 14);
                	//////////
                	system("pause");
                  
                }
                
                //tabe hazf
                 void hazf (struct linkedlist *sar , int adadeList)
                {
                struct linkedlist *temp1= NULL , *temp2 = NULL;
                int flag=0;
                while(sar)
                	{
                		if (sar->data == adadeList)
                		{
                			temp2 = sar->badi;
                			break;
                		}
                		flag = 1;
                		temp1 = sar;
                		sar = sar->badi;
                	}
                	delete sar;
                	if (flag == 1)
                	{
                	temp1->badi = temp2;
                	sar = temp1;
                	}
                	sar = temp2;
                	
                }


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

                با تشکر.
                به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
                (پیش به سوی هدف)

                دیدگاه


                  #9
                  پاسخ : راهنمایی در مورد ساختن لینکد لیستها

                  اصلا منظورم اینه که برای برگردوندنه لینک لیست از تابع ، من باید چیکار کنم؟

                  با تشکر.
                  به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
                  (پیش به سوی هدف)

                  دیدگاه


                    #10
                    پاسخ : راهنمایی در مورد ساختن لینکد لیستها

                    دوستان چرا نمیتونم آدرس اشاره گر sar رو بگیرم؟
                    مگه sar یه اشاره گر نیست؟!! و خود sar هم یه حافظه داره که آدرس متغییر دیتا رو تو خودش نگه میداره.
                    خوب حالا من آدرس خونه ی sar رو میخام بگیرم و توش این حافظه یه آدرس دیگه قرار بدم.چرا نمیتونم اون آدرس و بگیرم؟
                    ولی آدرس اون cout میشه.
                    کد:
                    int main ()
                    {
                      struct linkedlist *sar , *temp ; 
                    	
                    	temp = new linkedlist;
                    	temp->data = 14;
                    	sar = temp;
                    	temp = new linkedlist ;
                    	temp->data = 23;
                    	sar->badi = temp;
                    	temp->badi = new linkedlist;
                    	temp->badi->data=98;
                    	temp->badi->badi = NULL;
                    	//injast
                    
                    	int **a = sar;// chera nemitonam adres o begiram?
                    	
                    	//////////
                    	cout << &sar;
                    	system("pause");
                      
                    }
                    به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
                    (پیش به سوی هدف)

                    دیدگاه

                    لطفا صبر کنید...
                    X