
Решение.
struct el /* Тип элемента списка */
{ float z1, z2; /* Информация */
struct el *sled; /* Ссылка на следующий элемент */
};
. . .
/* Подпрограмма. */
/* x = информация k-го элемента списка p; */
/* Значение: 0 - операция удалась */
/* 1 - в списке менее k элементов */
int inf_k_el (struct el *p, int k, float x[2])
{ struct el *i; /* Указатель текущего элемента */
for (i = p; k>1 && i!=NULL; k--)
i = i->sled; /* Переход к следующему элементу */
if (i!=NULL) /* p указывает на k-й элемент */
{ x[0] = i -> z1;
X[1] = i -> z2;
return 0; /* Успешное завершение */
}
else return 1; /* Неудача: в списке < k элементов */
}
/* Пример вызова подпрограммы */
struct el *p; /* указатель списка */
int k; /* № элемента списка */
float y[2];
. . .
if (inf_k_el(p,k,y)) printf("в списке < k элементов" );
В подпрограмме (функции) входные данные p, k и выходные данные x являются параметрами, а указатель текущего элемента i – локальной переменной. Значением функции является код завершения, показывающий, удалось ли ей выполнить «порученную» операцию. Код завершения можно было передавать в виде выходного параметра.
Пример 3. Описать в виде вектора таблицу, каждый элемент которой содержит следующие поля:
- номер автомобиля,
- марка автомобиля,
- фамилия и инициалы владельца,
- признак, прошел ли автомобиль в текущем году техосмотр.
Максимальное число элементов таблицы 1000.
Решение.
#define NMAX 1000 /* макс. число элементов таблицы */
#define DL_FIO 25 /* макс. длина фамилии */
#define DL_NM 15 /* макс. длина номера и марки */
/* тип элемента таблицы */
struct EL_TAB
{ char nom[DL_NM]; /* номер автомобиля */
char marka [DL_NM]; /* марка */
char fio[DL_FIO]; /* фамилия и инициалы */
int t; /* признак техосмотра */
};
struct EL_TAB avto[NMAX]; /* таблица */
int n; /* число элементов таблицы */
Пример 4. Стек содержит целые числа и хранится в виде вектора из 10 элементов. Описать стек на языке С. Показать, как будет изменяться содержимое вектора и указателя стека при последовательном выполнении следующих операций:
-
включить в стек числа 10, 20,
-
исключить из стека один элемент,
-
включить в стек числа 30, 40, 50.
Вначале стек пустой.
Решение.
Описание на С:
int St [10]; /* вектор, содержащий стек */
int us=-1; /* указатели стека (индекс последнего элемента) */
Изменение состояния стека:
1) 2) 3)
us = 1 us = 0 us = 3
10 |
30 |
40 |
50 |
|
|
10 |
20 |
. . . |
|
10 |
20 |
. . .
|
|
1 1 1
2
3
9 9
9
Пример 5. Дан орграф в виде матрицы инцидентности, числа вершин и числа дуг. Описать функцию вывода числа предшественников каждой вершины. Привести пример вызова этой функции.