Прямий доступ та хешування. Організація даних у вигляді таблиць прямого доступу та хешованих таблиць, страница 3

                          }

                          nw=p[position];                                // виділення пам'яті під новий елемент

                          if(!nw)

                         {         p[position]=pt;

                                    p[position]->next=NULL;

                                    p[position]->curr=pt;

                           }

                           else

                           {       pt->next=p[position]->curr;

                                     p[position]->curr->prev=pt;

                                     p[position]->curr=pt;

                           }

                         strcpy(p[position]->curr->name,str);  //занесення прізвища в елемент

                         return 0;

            }

  void Insert()

{          Stud *pt;

             char *ss;

             int pos;

              setmem(ss,1,'\0');

              scanf("%s",ss);         // прізвище, що вставляється в список

              pos=Kesh(ss);           // обчислення хэш-функции для даного прізвища

              Build(pos,ss);            // вставка прізвища в список

              cout<<"\nString inserted in "<<pos<<" position\n";

              delay(1000);

            }

            void Del()

            {                      int pos;

                                      char *s;

                                      Stud *pt,*pt1=NULL,*pt2=NULL;

                                      scanf("%s",s);

                                      pos=Kesh(s);

                                      pt=p[pos]->curr;

                                      pt1=pt;

                                      while((strcmp(pt->name,s))&&(pt))

                                                 pt=pt->next;               // видалення першого

                                      if((pt1= =pt)&&(pt))

                                      {          pt1=pt->next;

                                                  delete pt;

                                                  p[pos]->curr=pt1;

                                                  p[pos]->curr->prev=NULL;

                                      }                    //елемент не знайдений

                                       if(!pt)

                                    {            cout<<"This string is absent\n";

                                                  getch();

                                                  return;

                                     }                     // останній елемент

                                       if(!pt->next)

                                    {            Stud *temp;

                                                  Stud *temp1 = p[pos]->curr;

                                                  temp = p[pos];

                                                  p[pos] = temp->prev;

                                                  delete temp;

                                                  p[pos]->next = 0;

                                                  p[pos]->curr = temp1;

                                    }                      // елемент у середині

                                                else

                                                {          pt1=pt->prev;

                                                             pt2=pt->next;

                                                             pt1->next=pt2;

                                                             delete pt;

                                                }

                        }

  void Show()

{          Stud *ptr;

             int len,o;

             for(int i=0;i<RAZM;i++)

            {          ptr=p[i];

                        cout<<"Segment "<<i<<" ";

                           if(ptr)

                         {            ptr=p[i]->curr;

                                       while(ptr)

                                     {                     cout<<" "<<ptr->name<<" ";

                                                            ptr=ptr->next;

                                                 }

                                      }

                           cout<<"\n";