Нужно создать функцию редактирования полей структуры ...
Есть две функции добавление элемента , и удаление элемента , знаю что можно создать редактирование слиянием двух этих функций , как не знаю ... Помогите пожалуйста
C |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| void add_elem()
{
struct queue *p; // Указатель на новый элемент.
char choice; // Переменная, хранящая выбор пользователя о расположении нового элемента.
output(); // Вывод всей очереди на экран.
while (choice != '1' && choice != '2') { // Пока не будет введена 1 или 2.
printf("Куда хотите добавить элемент?\n"
"1 - В начало\n"
"2 - В конец\n\n");
printf("Ваш выбор: ");
scanf(" %c", &choice);
printf("\n");
if (choice != '1' && choice != '2') { // Если введена не 1 и не 2.
line_f();
printf("Выберите 1 или 2.\n\n"); // Вывод оповещения.
}
line_f();
}
// Выделение памяти под элемент очереди.
p = (struct queue*)malloc(sizeof(struct queue));
printf("Введите дату занесения квартиры в базу: ");
scanf("%s",p->data);
printf("Введите количество комнат: ");
scanf("%d",&p->numb_room);
printf("Введите этаж: ");
scanf("%d",&p->floor);
printf("Введите площадь квартиры: ");
scanf("%f",&p->area);
printf("Введите адресс ");
scanf("%s",p->adress);
do {
printf("Введите цену квартиры в грн: ");
scanf("%f", &p->price_uah); // Заполнение полей элемента.
} while (p->price_uah <= 0);
do {
printf("Введите цену квартиры в долл.: ");
scanf("%f", &p->price_usd); // Заполнение полей элемента.
} while (p->price_usd <= 0);
if (count_elem == 0) { // Если этот элемент первый.
head = tail = p; // Он будет и началом и концом очереди.
}
else if (choice == '1') { // Если добавляется в начало.
head->prev = p;
p->next = head;
p->prev = NULL;
head = p; // Становится началом очереди.
}
else if (choice == '2') { // Если добавляется в конец.
tail->next = p;
p->prev = tail;
p->next = NULL;
tail = p; // Становится концом очереди.
}
count_elem++; // Обновление переменной количества элементов.
} |
|
Функция удаления
C |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| void remove_elem()
{
char choice; // Переменная, хранящая выбор пользователя об удалении элемента.
output(); // Вывод всей очереди на экран.
if (head == NULL) { // Если очередь пуста.
press_enter(); // Ожидания нажатия <Enter>.
return; // Выход из функции.
}
while (choice != '1' && choice != '2') { // Пока не будет введена 1 или 2.
printf("Откуда хотите удалить элемент?\n"
"1 - Из начала\n"
"2 - Из конца\n");
printf("Ваш выбор: ");
scanf(" %c", &choice);
printf("\n");
if (choice != '1' && choice != '2') { // Если введена не 1 и не 2.
line_f();
printf("Выберите 1 или 2.\n\n"); // Вывод оповещения.
}
line_f();
}
if (count_elem == 1) { // Если в очереди всего один элемент.
head = tail = NULL; // Обнуление начала и конца очереди.
free(head); // Освобождение памяти.
}
else if (choice == '1') { // Если удаляется с начала.
head = head->next; // Следующий элемент становится началом.
free(head->prev); // Освобождение памяти.
head->prev = NULL; // Обнуление предыдущего элемента.
}
else if (choice == '2') { // Если удаляется с конца.
tail = tail->prev; // Предыдущий элемент становится концом.
free(tail->next); // Освобождение памяти.
tail->next = NULL; // Обнуление следующего элемента.
}
count_elem -= 1; // Обновление переменной количества элементов.
printf("Элемент успешно удалён!\n\n");
line_f();
press_enter(); // Ожидания нажатия <Enter>.
} |
|