Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обмен элементов дин.структуры(первый элемент))

63K
08 декабря 2010 года
boooze
5 / / 13.11.2010
Здрраствуйте.есть дин.структура указатели на нее *last,*list,*first.
Вот функция обмена ,которая меняет все элементы ,кроме первого.
Код:
void obmen(){
int n1, n2;
 elem *a1,
      *a2,
      *l1;
 info haract;
 list = first;
 clrscr();
 printf ("vvedite n1\n");
 scanf ("%d", &n1);
 printf ("vvedite n2\n");
 scanf ("%d", &n2);
 clrscr();
 while (list){
  if ((*list->next).har.nomer == n1)
  a1 = list;
  if ((*list->next).har.nomer == n2)
  a2 = list;
  list = (*list).next;
 }
 l1 = a1 -> next;
 a1 -> next = a2 -> next;
 a2 -> next = l1;
 l1 = a1 -> next -> next;
 a1 -> next -> next = a2 -> next -> next;
 a2 -> next -> next= l1;
 numer ();

numer( ) - функция пронумерации элементов.Вот мне что интересно.Мне сказали ,что для обмена элементов структуры необходимо менять их указтели next .Т.е. для начала поставить указатели на элемент раньше того элемента ,который мы хотим обменять (что у меняи делается в первом цикле),а затем меняются указатели a1->next,a2 ->next .Но что делать с первым элементом?Как поставить указатель на элемент раньше первого?В общем .как вообще сделать обмен первого элемента.Я пробывал делать проверку ,если введенный нмоер с клавиатуры равен единице,значит нужно делать обмен ,как частный случай обмена с первым элементом.Но у меня не получалось обменять элементы.Подскажите плиз ,как поменять первый элемент с каким нибудь другим ?:confused::(:mad:
392
08 декабря 2010 года
cronya
421 / / 03.01.2009
очень просто :)
Если первый элемент это глава, то есть head(у вас first или last я не знаю), а вам надо обменять следующий с последующим, то просто нужно ввести указатель который будет содержать предыдущий элемент списка.
Код:
list *ptr;//указ на текущий э-т
list *ptr_t;//указ на следующий э-т
list *temp;// указ на предыдющий э-т
ptr=temp=first;//то есть temp сейчас указывает на 1 э-т, главу
ptr_t=ptr->next;//указывает на след э-т
if(ptr!=first)//если э-т не 1-й
    if(ptr_t->next==NULL)// если следующий за текущем последний э-т не имеет следующего
    {
        //меняем связи
        ptr_t->next=ptr;//след теперь указвает на текущий
        ptr->next=NULL;//тек теперь указвает на след след, которого нет
        temp->next=ptr_t;//пред указ на след
    }
temp=ptr;//запоминаем слдеующий будущий пред-ий
ptr=ptr->next;//переходим на след э-т
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог