ВУЗ:
Составители:
Рубрика:
П р и м е р 26
int key;
struct lSP *new;
printf("Задайте ключ для вставки…");
scanf("%d", &key);
other = first;
while (other->next != NULL && other->key != key)
other = other->next;
new = (struct lSp *) malloc(sizeof(struct lSp));
new->next = other->next;
other->next = new;
Если новая ячейка должна стать в списке первой, то последовательность действий будет следующей.
П р и м е р 27
new = (struct lSp *) malloc(sizeof(struct lSp));
new->next = first;
first = new;
Удаление из списка заданного элемента. Так же как и при добавлении, процедуры удаления из списка первого элемента
и любого другого будут выполняться по-разному. При удалении первого элемента необходимо соответствующим образом
изменить значение указателя на первый элемент списка, после чего первый элемент можно удалить.
П р и м е р 28
scanf("%d", &key);
if (key == first->key)
{
other = first;
first = first->next;
free(other);
}
При удалении любого другого элемента списка необходимо найти элемент, расположенный в списке перед ним. Далее
необходимо обойти указателем текущего элемента удаляемый элемент, перенаправив его на следующий элемент после уда-
ляемого. Таким образом будет сохранена целостность списка. После этого найденный элемент можно удалить.
П р и м е р 29
scanf("%d", &key);
other = first;
while (other->next->key != key && other->next != NULL)
other = other->next;
if (other->next->key == key)
{
new = other->next;
other->next = other->next->next;
free(new);
}
После окончания работы со списком необходимо освободить память, которую он занимал.
П р и м е р 30
do
{
other = first->next;
free(first);
}while ((first = other) != NULL);
12.2 Двунаправленный список
Следует заметить, что использование однонаправленных списков не всегда удобно, так как мы можем перемещаться по
списку только в одну сторону. Между тем мы можем в процессе решения задачи столкнуться с необходимостью переме-
щаться по цепочке в обратном направлении. Для достижения этой цели введем в состав описания динамической структуры
еще один указатель:
struct lSp1
{
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »
