Смекни!
smekni.com

Архитектура материнских плат (стр. 3 из 3)

LISTNODEPTR currentPtr;

// установка указателя на начало списка

currentPtr = *sPtr;

if (currentPtr == NULL) { // еслисписокпустой

printf("List is empty. \n\n");

return 0;

}

else { // если не пустой

// вывод значения элемента, на который указывает указатель currentPtr

printf(" %d ", currentPtr->data);

// пока следующий за currentPtr не начало списка и не конец списка

while ((currentPtr->nextPtr != *sPtr)&&(currentPtr->nextPtr != NULL)){

// перемещаем указатель currentPtr на следующий элемент

currentPtr = currentPtr -> nextPtr;

// вывод значения элемента, на который указывает указатель currentPtr

printf(" %d ", currentPtr->data);

}

return 1;

}

}

// функция сообщающая о том , что список состоит из одного элемента

int oneLeft(LISTNODEPTR sPtr){

return (sPtr->nextPtr)==NULL;

}

// функция удаления элемента. Удаляет элемент и перемещает указатель, указывающий начало списка, на следующий элемент за удаленным

int delete4(LISTNODEPTR *sPtr, int n){

// инициализацияпеременных

LISTNODEPTR previousPtr, currentPtr, tempPtr;

int i,tw=0;

// елси список пуст - выйти из функции

if ((*sPtr)==NULL)

return 0;

// установка указателей

previousPtr = *sPtr;

currentPtr = (*sPtr)->nextPtr;

// если удаляем не первый элемент

if(n!=1) {

// устанавливаем указатель currentPtr на удаляемый элемент

// устанавливаем указатель previousPtr на предшествующий ему

for(i=1; i<(n-1); i++) {

previousPtr = currentPtr;

currentPtr = currentPtr->nextPtr;

}

}

else { // еслиудаляемпервыйэлемент

// устанавливаем указатель currentPtr на удаляемый элемент

// устанавливаем указатель previousPtr на предшествующий ему

while((currentPtr)!=(*sPtr)){

previousPtr = currentPtr;

currentPtr = currentPtr->nextPtr;

}

};

// есливспискене 2 элемента

if( ( ((*sPtr)->nextPtr)->nextPtr )!=*sPtr ) {

//исключаем currentPtr

previousPtr->nextPtr=currentPtr->nextPtr;

}

else {

// разрываемсписок

previousPtr->nextPtr=NULL;

};

// устанавливаем указатель начала списка на следующий за currentPtr элемент

*sPtr=currentPtr->nextPtr;

// удаляем из памяти элемент currentPtr

tempPtr = currentPtr;

free(tempPtr);

}

//конец