تخفیف های داغ در جشنواره تابستانه توسینسو تخفیف های داغ در جشنواره تابستانه توسینسو
مانده تا پایان تخفیف
مشاهده دوره ها
0

ی توضیح مختصر

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

void Insert(int value,string u)
 
    {
 
        int hash_val = HashFunc(value);
 
        HashNode* prev = NULL;
 
        HashNode* entry = htable[hash_val];
 
        while (entry != NULL)
 
        {
 
            prev = entry;
 
            entry = entry->next;
 
        }
 
        if (entry == NULL)
 
        {
 
            entry = new HashNode(hash_val, u);
 
            if (prev == NULL)
 
            {
 
                htable[hash_val] = entry;
 
            }
 
            else
 
            {
 
                prev->next = entry;
 
            }
 
        }
 
        else
 
        {
 
            entry->value = value;
 
        }
 
    }

اگه ی توضیح مختصر در مورد این کد ،مخصوصا اون قسمت entry = entry->next;و prev بدین که منظورش چیه ممنون می شم.

پرسیده شده در 1394/10/15 توسط

2 پاسخ

1

سلام Itproای عزیز.

تابع درج در درهم سازی به این گونه عمل می کند که یک hashCode تولید می کند و با توجه به hashCode تولید شده قصد ذخیره سازی مقدار داده شده را دارد. در اینجا hashval همان کد شما است که تولید شده است. حال ابتدا بررسی می کند که آیا آن خانه از آرایه خالی است یا خیر. زیرا اگر آن خانه از آرایه خالی نباشد و ما مقدار خود را بنویسیم مقداری که از قبل وجود داشته از بین خواهد رفت. برای حل این مشکل که به آن زنجیره سازی می گویند باید یک لیست پیوندی یا linked list بسازیم و مقدار جدید را در آن لیست اضافه کنیم. با این روش در صورتی که hashval چند عدد یکی باشد همه در یک خانه از آرایه به صورت لیستی ذخیره می شوند.

قسمتی که شما مشکل دارید یعنی کد زیر به این معنی است که

  while (entry != NULL)
  
        {
  
            prev = entry;
  
            entry = entry->next;
  
        }

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

پاسخ در 1394/10/15 توسط

پاسخ شما