تالار گفتمان مانشت
لیست پیوندی - نسخه‌ی قابل چاپ

لیست پیوندی - bahman2000 - 12 آبان ۱۳۹۲ ۱۲:۰۶ ب.ظ

با سلام : دوستان مشکلی در قسمت مبحث لیست پیوندی درس ساختمان داده برام پیش اومده و اون اینه که تمامی الگوریتم های مربوط به لیست پیوندی از جمله add, delete,... را به طور کامل متوجه می شوم و از روی شکل می فهمم که چه اتفاقی می افتد ولی در برنامه نویسی
وقتی می خوام به جای آرایه از لیست پیوندی استفاده کنم اصلا نمی دونم چیکار کنم . مثلا می خواهیم ۳ عدد از کاربر دریافت و بر روی آن ها عملیاتی را انجام دهیم :
[تصویر:  223746_01678568133873330374.jpg]
اگر بخواهیم از آرایه استفاده کنیم کد مربوطه در ++c به صورت بالا خواهد بود ولی اگر بخواهیم از لیست پیوندی استفاده کنیم چه کدی را بایستی بنویسیم؟(هدف کلی: گرفتن n عدد از کاربر و ذخیره آن ها در حافظه و بعد انجام عملیات مورد نظر)

RE: لیست پیوندی - black_knight - 13 آبان ۱۳۹۲ ۰۷:۱۶ ب.ظ

سلام
خوب این یکم با آرایه فرق داره.در آرایه ما فقط به مکانی برای دخیره سازی نیاز داشتیم و چیز دیگه ای نیاز نداشتیم.
اما تو اینجا حداقل چیزی که لازم داریم یک مکان برای دخیره سازی و یک پونتر برای نگه داری آدرس گره بعده.
پس باید به آبجکت بسازیم. که این کارو با کلاس یا استراکچرها انجام می دیم .
گره ی ما باید حداقل ۲ تا ویژگی که در بالا اشاره شد رو داشته باشه
کد:
struct Node {
    int data;
    Node* next;
};
بعد این کار شما باید نوع لیستو مشخص کنید مثلا هددار-چرخشی-دوطرفه....
ما فرض می کنیم لیست هددار باشه پس یک هد می سازیم (در غیر اینصورت اطلاعات بیشتری به تعریف گره باید اضافه کرد)
کد:
struct Node *head = new Node;
حالا که آبجکت گره رو داریم کافیه هر بار که اطلاعاتو از کاربر می گیری یک گره در ابتدای لیست بسازی و مقدارو داخلش بریزی
کد:
addNode(head,20);
به این صورت
کد:
int i,value;
    for (i=0;i<10;i++){
        cout<<"number"<<i<<":";
        cin>>value;
        addNode(head,value);
    }
فکر نکنم توی کد نویسیش مشکلی داشته باشی
اما باز من کداضافه کردن گره رو میذارم
کد:
void addNode(struct Node *head, int n) {
    Node *newNode = new Node;
    newNode->data = n;
    newNode->next = NULL;

    Node *cur = head;
    while(cur) {
        if(cur->next == NULL) {
            cur->next = newNode;
            return;
        }
        cur = cur->next;
    }
}
الان یک لیست داریم که برای نمایشش می تونیم یک تابع بنویسیم با این فراخوانی
کد:
display(head);
و با این پیاده سازی
کد:
void display(struct Node *head) {
    Node *list = head;
    while(list) {
        cout << list->data << " ";
        list = list->next;
    }
    cout << endl;
    cout << endl;
}

منبع:
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


RE: لیست پیوندی - bahman2000 - 14 آبان ۱۳۹۲ ۰۲:۴۴ ب.ظ

(۱۳ آبان ۱۳۹۲ ۰۷:۱۶ ب.ظ)black_knight نوشته شده توسط:  سلام
خوب این یکم با آرایه فرق داره.در آرایه ما فقط به مکانی برای دخیره سازی نیاز داشتیم و چیز دیگه ای نیاز نداشتیم.
اما تو اینجا حداقل چیزی که لازم داریم یک مکان برای دخیره سازی و یک پونتر برای نگه داری آدرس گره بعده.
پس باید به آبجکت بسازیم. که این کارو با کلاس یا استراکچرها انجام می دیم .
گره ی ما باید حداقل ۲ تا ویژگی که در بالا اشاره شد رو داشته باشه
همانطور که خودم حدس می زدم بایستی با تابع ها سرو کار داشته باشیم.
با تشکر از اطلاع رسانی