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

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

برنامه نویسی c++

در این مرحله از آموزش قصد داریم نحوه ایجاد ، ساخت و چگونگی کار با لیست پیوندی در c++ را آموزش دهیم.

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

در برنامه هایی که با تخصیص حافظه به صورت پویا کار میکنند معمولا روال کار

به این صورت است که هرگاه برنامه حافظه جدیدی نیاز داشت برایش در نظر

گرفته می گردد و اطلاعات مورد نظر در آن قرار می گیرد به عنوان مثال در یک سیستم

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

دانشجو حافظه در نظر می گیریم و اطلاعات را در آن ذخیره می نماییم.طبیعتا قطعات تخصیص یافته ی

برنامه در مکان های مختلف برنامه قرار می گیرند و برای کار با آن ها باید آدرس های آن ها را بدانیم

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

به این ترتیب که در هر قطعه یا گره علاوه بر اطلاعات اصلی آدرس گره ی بعدی را نیز نگهداری کنیم

به این ترتیب با داشتن آدرس اولیه ی گره می توان به تک تک گره ها دسترسی داشت.

ساختار مناسب برای گره های بالا به صورت زیر است :


struct linkt_list
{
   .
   .  اطلاعات گره
   .
   linkt_list *next;
};

نکته : 

next اشاره گری است که به گره بعدی اشاره می کند.

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

مثال :

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

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


struct linkt_list
{
   int data;
   linkt_list *next;
};
void main()
{
   int a;
   link_list *p , *start=0 , *end=0;
   cin>>a;
   while(a)
     {
        p= new linkt_list;
        if( !p )
          {
            puts(" حافظه کافی وجود ندارد " );
            exit(0);
          }
        p -> data=a;
        p -> next=0;
        if( !start )
        start= end= p;
        else
          {
             end -> next=p;
             end=p;
          }
        cin>>a;
     }
}

نکته :

در این برنامه p گره ی جدید و start و end به ترتیب به اولین و آخرین گره لیست

اشاره می کنند و وقتی لیست تهی است start و end باید Null باشد.

مثال :

فرض کنید یک لیست پیوندی در c++ با ساختار بالا وجود داشته باشد.

تابع در c++ بنویسید که آدرس شروع لیست را به عنوان پارامتر دریافت کند و محتویات گره های لیست را چاپ کند. ( سورس کد چاپ گره ها و محتویات لیست پیوندی در c++ )


void print( linkt_list  *srart)
{
   linkt_list *p=start;
   while(p)
     {
        cout<<p -> data;
        p=p -> next;
     }
}

نکته :

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

به تابع فرستاده می شود و در آنجا در اشاره گر محلی start قرار داده می شود.

مثال :

تابعی بنویسید که آدرس شروع یک لیست پیوندی در c++ را به عنوان پارامتر دریافت کند و

گره های مربوط به لیست را آزاد نماید.


void f(link_list *start)
{
   link_list *p=start , *h;
   while(p)
     {
        h=p -> next;
        delete p;
        p=h;
     }
}

نکته :

پس از اجرای این تابع در start باید مقدار null قرار گیرد.