Реализация основных алгоритмов. Практическое занятие 1

Содержание

Слайд 2

Основные термины 1. Информация в таблице представлена множеством узлов (записей, объектов,

Основные термины

1. Информация в таблице представлена множеством узлов (записей, объектов, элементов).
Узел

обозначается так:
2. Каждый узел состоит из одного или нескольких последовательных слов в памяти машины, разделенных на именуемые части, называемые полями.
3. Адресом узла является адрес первого слова в узле (связь, указатель, ссылка, стрелка на узел).
Для обозначения пустой связи используется:

2

Слайд 3

Определение линейного списка Линейный список – это множество, состоящее из n≥0

Определение линейного списка

Линейный список – это множество, состоящее из n≥0 узлов:

x[0], …, x[n-1], структурные свойства которого ограничиваются условиями:
если n≥0, то x[0] является первым
если 0

3

Слайд 4

Организация хранения данных Для хранения данных целесообразно использовать следующую конструкцию: struct

Организация хранения данных

Для хранения данных целесообразно использовать следующую конструкцию:
struct list {
int

inf; //информационная часть
list * next; //ссылка на следующий элемент
};
list * first;

4

Слайд 5

Генерация псевдослучайных чисел Используется команда rand() Заголовочный файл Для того, чтобы

Генерация псевдослучайных чисел

Используется команда rand()
Заголовочный файл
Для того, чтобы генератор каждый

раз начинал генерацию с нового числа, необходимо подключить заголовочный файл
Для получения различных чисел: srand((unsigned)time(0));
Для генерации целого числа от a до b int irand(int a, int b) { return rand() % (b-a+1)+a; }
Пример: получить псевдослучайное число от -7 до 4 irand(-7, 4)

5

Слайд 6

Создание линейного списка n=7; list *first=new list; list *p=first; cin>>p->inf ;

Создание линейного списка

n=7;
list *first=new list;
list *p=first;
cin>>p->inf ;
for

(int i=0; i p->next=new list ;
p=p->next ;
cin>>p->inf;
}
p->next=0;

6

Здесь описано построение линейного списка из n (n=7) эле­ментов.
Элементы списка вводятся с клавиатуры.
cin - заставляет программу ожидать ввода числа от пользователя.
Cin – объект, определенный в С++ для работы со стандартным потоком ввода.
>> - операция извлечения.
Приведенный код удобно использовать, когда число элементов в списке из­вестно заранее.
Подумайте, как нужно модифицировать про­грамму, чтобы она работала для произвольного числа элементов.

Слайд 7

Печать линейного списка p = first; while (р) { cout inf

Печать линейного списка

p = first;
while (р)
{
cout <<

p->inf << “ “ ;
р = p->next;
}
cout << endl;

7

Данный код работает для произвольного числа элементов в списке.
Идентификатор cout является объектом С++, предназначенным для работы со стандартным потоком вывода.
Оператор << называется операцией вставки.
Манипулятор endl – вставка в символьный поток символа окончания строки.
Манипулятор - это особая инструкция, обращенная к потоку и предназначенная для изменения вывода.

Слайд 8

Создание пользовательского интерфейса int num = 1; while (num) { cin

Создание пользовательского интерфейса

int num = 1;
while (num) {
cin

>> num;
switch (num) {
case 0: break;
case 1: {
//ввод списка
break; }
case 2: {
//вывод списка
break; }
default: cout << “Error!” << end l;
}
}

8

Слайд 9

Вставка элемента в начало списка list * q = new list;

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

list * q = new list;
cin

>> q->inf;
q->next = first;
first = q;

9

Рассмотрен случай, когда список не пуст.

first

элемент для вставки

q

Слайд 10

Включение элемента в середину (после i-го элемента) p = first; int

Включение элемента в середину (после i-го элемента)

p = first;
int k =

2;
for (i=0; i p = p->next;
list *w=new list;
cin >> w->inf ;
w->next = p->next;
p->next = w;

10

Рассмотрен случай, когда список не пуст.

first

w

Слайд 11

Удаление элемента из середины (i-го элемента) k = 2; p =

Удаление элемента из середины (i-го элемента)

k = 2;
p = first;


for (i=0; i p = p->next;
w = p->next;
p->next = w->next;
delete w;

11

Используется отдельная переменная для сохранения удаляемого элемента.
Это необходимо для того, чтобы память не оставалась помеченной как занята программой.

first

w

удаляемый элемент

p

Слайд 12

Создание копии списка p = first; list *newlist =new list; newlist->inf

Создание копии списка

p = first;
list *newlist =new list;
newlist->inf =

p->inf;
p = p->next;
list *newfirst = newlist;
while (p) {
newlist->next = newlist;
newlist = newlist->next;
newlist->inf = p->inf;
p = p->next ;
}
newlist->nex t = 0;

12

Создание копии списка происходит фактически (а не только созданием нового начала и присоединения к нему остатка списка).
Код работает, только если список содержит хотя бы 1 элемент.