Основы языка С++. Викентьева О.Л. - 69 стр.

UptoLike

Составители: 

if(p==0||p->next==0)return beg;//если в списке нет элемента с номером k
point*r=p->next;//встать на удаляемый элемент
p->next=r->next;//изменить ссылку
delete r;//удалить r
r=p->next;//встать на следующий
if(r!=0)r->pred=p;//если r существует, то связать элементы
return beg;//вернуть начало списка
}
point* add_point(point *beg,int k)
{
point *p;
p=new(point);//создать новый элемент и заполнить ключевое поле
cout<<"key-?";cin>>p->key;
if(k==0)//если добавляется первый элемент
{
p->next=beg;//добавить перед beg
p->pred=0;//обнулить адрес предыдущего
beg->pred=p;//связать список с добавленным элементом
beg=p;//запомнить первый элемент в beg
return beg;//вернуть начало списка
}
point*r=beg;//встать на начало списка
for(int i=0;i<k-1&&r->next!=0;i++,r=r->next);//пройти по списку либо до кон-
ца списка, либо до элемента с номером k-1
p->next=r->next;//связать р с концом списка
if(r->next!=0)r->next->pred=p;//если элемент не последний, то связать конец
списка с р
p->pred=r;//связать р и r
r->next=p;
return beg;//вернуть начало списка
}
void main()
{
point*beg;
int i,k;
do
{
cout<<"1.Make list\n";
cout<<"2.Print list\n";
cout<<"3.Add point\n";
cout<<"4.Del point\n";
cout<<"5.Exit\n";
cin>>i;
switch(i)
{
case 1:
{beg=make_list();break;}
case 2:
{print_list(beg);break;}
case 3:
{
cout<<"\nk-?";cin>>k;
             if(p==0||p->next==0)return beg;//если в списке нет элемента с номером k
             point*r=p->next;//встать на удаляемый элемент
             p->next=r->next;//изменить ссылку
             delete r;//удалить r
             r=p->next;//встать на следующий
             if(r!=0)r->pred=p;//если r существует, то связать элементы
             return beg;//вернуть начало списка
      }
      point* add_point(point *beg,int k)
      {
             point *p;
             p=new(point);//создать новый элемент и заполнить ключевое поле
             cout<<"key-?";cin>>p->key;
             if(k==0)//если добавляется первый элемент
             {
                      p->next=beg;//добавить перед beg
                      p->pred=0;//обнулить адрес предыдущего
                      beg->pred=p;//связать список с добавленным элементом
                      beg=p;//запомнить первый элемент в beg
                      return beg;//вернуть начало списка
             }
                      point*r=beg;//встать на начало списка
             for(int i=0;inext!=0;i++,r=r->next);//пройти по списку либо до кон-
ца списка, либо до элемента с номером k-1
             p->next=r->next;//связать р с концом списка
             if(r->next!=0)r->next->pred=p;//если элемент не последний, то связать конец
списка с р
             p->pred=r;//связать р и r
             r->next=p;
             return beg;//вернуть начало списка
      }


      void main()
      {
               point*beg;
      int i,k;
      do
      {
               cout<<"1.Make list\n";
               cout<<"2.Print list\n";
               cout<<"3.Add point\n";
               cout<<"4.Del point\n";
               cout<<"5.Exit\n";
      cin>>i;
               switch(i)
               {
               case 1:
                       {beg=make_list();break;}
               case 2:
                       {print_list(beg);break;}
               case 3:
                       {
                              cout<<"\nk-?";cin>>k;