Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OTVET_OAIP.docx
Скачиваний:
22
Добавлен:
27.09.2019
Размер:
589.57 Кб
Скачать

13. Односвязный список. Включение элемента в начало списка. Удаление элемента из списка по заданному номеру.

Односвязные списки являются наиболее простыми. Основным их недостатком является возможность просмотра только в одном направлении - от начала к концу. Без дополнительных "ухищрений" нельзя получить указатель на предыдущий элемент списка, который необходим при удалении текущего. Для односвязного списка наиболее простыми являются операции включения и исключения элементов в начале и конце списка, соответственно они используются для моделирования таких структур данных, как стеки и очереди.

//-------Вставка элемента в начало списка

list* insert_(list*ph,int v)

{

list *pr,*p,*pn;

for(pr=NULL,p=ph; p!=NULL && p->vv < v; pr=p,p=p->next);

pn=new list;

pn->vv = v;

pn->next=NULL;

if(pr==NULL)

ph=pn;

else

pr->next=pn;

pn->next=p;

return ph;

}

//-------- Удаление элемента списка по заданному логическому номеру

list *Remove(list *&pp, int n)

{ list *q; // Указатель на текущий элемент

for (q = pp; q!=NULL && n!=0; q = q->next, n--); // Отсчитать n -ый

if (q==NULL) return NULL; // нет элемента с таким номером

if (q->prev==NULL) // удаление первого -

pp=q->next; // коррекция заголовка

else q->prev->next = q->next; // следующий для предыдущего =

// следующий за текущим

if (q->next!=NULL) // удаление не последнего -

q->next->prev = q->prev; // предыдущий для следующего =

return q; } // предыдущий текущего

14. Односвязный список. Включение элемента в конец списка. Слияние 2 списков.

Односвязные списки являются наиболее простыми. Основным их недостатком является возможность просмотра только в одном направлении -от начала к концу. Без дополнительных "ухищрений" нельзя получить указатель на предыдущий элемент списка, который необходим при удалении текущего. Для односвязного списка наиболее простыми являются операции включения и исключения элементов в начале и конце списка, соответственно они используются для моделирования таких структур данных, как стеки и очереди.

// Включение в конец списка

void In(list *&ph,int v){

list *q=new list;

q->next=NULL;

q->val=v;

if (ph==NULL) ph=q; // список пуст - единственный

else{ // цикл поиска конца списка

for (list *p=ph; p->next!=NULL; p=p->next);

p->next=q; // следующий за последним - новый

}}

Слияние двух списков.

Операция слияния заключается в формировании из двух списков одного - она аналогична операции сцепления строк. Последний элемент первого списка содержит пустой указатель на следующий элемент, этот указатель служит признаком конца списка. Вместо этого пустого указатель в последний элемент первого списка заносится указатель на начало второго списка. Таким образом, второй список становится продолжением первого.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]