Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тельнов по билетам.docx
Скачиваний:
5
Добавлен:
07.04.2023
Размер:
3.61 Mб
Скачать

2)Линейные списки, операции с линейными списками.

Множество узлов, объединенных с помощью ссылок (направленный граф)

Каждый узел устроен так:

Списки

Линейный односвязный

Двунаправленный (двусвязный)

Циклический список(кольца)

Линейные списки служат для представления в компьютере абстрактных структур данных(последовательностей, множеств, графов и др.).

Описание узла линейного списка:

typedef struct node {

OBJECT* ptr;

node* next;

} L, *Lp;

Lp first = NULL;

Пустой список

Lp first = NULL;

Список из одного элемента

продвижение вперед на 1 элемент

if (p) p = p -> next;

или

if (p != NULL) p = p-> next;

Операции с линейными списками

Итеративный обход списка в прямом направлении

Lp p = first;

while (p != NULL){

R(p -> ptr); // обработка объекта в узле

p = p -> next;

}

Рекурсивный обход списка в прямом направлении

void w1(Lp p) {

if (p != NULL) R(p -> ptr); // обработка объекта в узле

w1(p -> next);

}

Рекурсивный обход списка в обратном направлении

void w2(Lp p){

if ( p != NULL) w2(p->next);

R(p -> ptr); // обработка объекта в узле

}

Вставка узла в начало списка

Lp q = new L; // здесь q - указатель на новый узел списка

q -> next = first; // бывший первый узел станет вторым

first = q; // новый узел становится первым узлом списка

Удаление из начала списка

if(first != NULL) first = first -> next;

Вставка узла в произвольное место списка(список не должен быть пуст)

Lp q = new L; // q - указатель на новый узел списка

q -> next = p -> next; // здесь p - указатель на произвольный узел списка

p -> next = q; // узел q вставляется после узла p

Описание узла двусвязного списка:

typedef struct node {

OBJECT* ptr;

node* next;

node* back;

} L, *Lp;

Поиск в списке.

Пусть задан некий <образец> для поиска.

Lp p = first;

while ((p != NULL) && (*p -> ptr != <образец>)) p = p -> next;

if (p == NULL) {<искомого элемента в списке нет>}

else {<p есть указатель на нужный узел списка>}

Удаление узла из произвольного места списка:

// пусть p - указатель на произвольный узел списка

if (p != NULL && p -> next != NULL)

p -> next = p -> next -> next; // удаляется узел, следующий за p

3)Модели жизненного цикла по

Под жизненным циклом программного обеспечения (ПО) понимается период разработки и эксплуатации ПО, в котором выделяют следующие этапы:

1. Спецификация требований к ПО.

2. Проектирование ПО.

3. Реализация ПО (кодирование).

4. Отладка и тестирование ПО.

5. Внедрение ПО (ввод в эксплуатацию).

6. Эксплуатация и сопровождение ПО.

Артефакты — это любые информационные сущности и документы, которые порождаются в течение жизненного цикла ПО.

Итерационная модель

Спиральная модель жизненного цикла по

II билет)

1)Обработка нештатных ситуаций. Объекты исключения. Примеры.

В качестве введения в тему рассмотрим два фрагмента кода.

Фрагмент 1

File* f1() { // функция ММ пытается открыть некий файл

File* fp; // возможна нештатная ситуация - ошибка открытия файла

if((fp=fopen(...,...))==NULL) — // возникла ошибка открытия файла

{ cerr << “file open err’; return NULL;} // сообщение и аварийный выход.

return fp; } // успех, нормальный выход

При ошибке открытия файла неплохо бы проанализировать причины неудачи и предпринять некоторые разумные действия для исправления ситуации.

Фрагмент 2

class X : public Y {......... // нештатная ситуация при создании объекта

X (int size) { // конструктор Х вызывает конструктор У

char *p = new char[size]; // конструктор Х пытается получить память,

if (!p) cerr << “obj create err”; } // неудача! и аварийный return невозможен

…..}; // а конструктор У уже отработал ...

Объект класса Х был создан неудачно, но конструктор объекта-предка успешно отработал и мог получить (заблокировать) некоторые системные ресурсы.