- •Курсовая работа
- •По дисциплине «Программирование 1» Тема: «Динамическая структура данных»
- •Аннотация
- •Содержание
- •Введение
- •1. Теоретический раздел
- •Создание двунаправленного списка[6]
- •Просмотр двунаправленного списка[6]
- •Удаление элемента из двунаправленного списка[6]
- •Поиск элемента в двунаправленном списке[6]
- •2. Проектный раздел
- •3. Заключение
- •4. Список использованных источников:
Просмотр двунаправленного списка[6]
Операция просмотра списка для двунаправленного списка реализуется абсолютно аналогично соответствующей функции для однонаправленного списка. Просматривать двунаправленный список можно в обоих направлениях. В данном случае мы будем просматривать список с конца.
p = End->back; //устанавливаем указателю "р" адрес с которого мы начнем просматривать список
while (p->back != NULL) { //цикл будет работать до тех пор пока не встретит адрес который NULL.
printf("%lf\n, p->a); // вывод на экран значение переменной "а"
p = p->back; //установка адреса на предыдущий элемент
}
Вставка элемента в двунаправленный список
В динамические структуры легко добавлять элементы, так как для этого достаточно изменить значения адресных полей. Операция вставки реализовывается аналогично функции вставки для однонаправленного списка, только с учетом особенностей двунаправленного списка.
double f;
printf("Введите вещественное число: ");
scanf_s("%lf", &f);
p = new list;
k = new list; //выделение памяти под элемент "K"
k = Head->front; //инициализация указателя "k"
p->a = f;
p->front = k;
k->back = p;
p->back = Head;
Head->front = p;
Удаление элемента из двунаправленного списка[6]
Из динамических структур можно удалять элементы, так как для этого достаточно изменить значения адресных полей. Операция удаления элемента из двунаправленного списка осуществляется во многом аналогично удалению из однонаправленного списка.
Для удобства удаления элемента из списка можно завести переменную index которая будет хранить в себе индекс элемента списка. После чего спрашивать у пользователя какой он бы хотел удалить элемент по индексу.
int index;
printf("\nВведите индекс: \n"); //удаление индекса
scanf_s("%d", &index);
p = Head->front;
int i = 0; //переменная "i" нужна нам для того что бы определить нашелся ли элемент с таким индексом
while (p->front != NULL) {
if (index == p->index) //если нашелся элемент с таким индексом, то увеличиваем переменную "i" на единицу и выходим из цикла.
{
i++;
break;
}
p = p->front;
}
if (i!=0) //проверяем переменную "i"
{
list *next, *early;
//установка адресов указателям next и early
next = p->front;
early = p->back;
//меняем адреса следующего и предыдущего элемента массива
next->back = early;
early->front = next;
//меняем индексы
k = Head->front;
while (k->index != next->index) {
k->index = k->index - 1;
k = k->front;
}
printf("Ячейка с индексом %d со значением %lf удалена.\n",
p->index, p->a);
}
else printf("Такого индекса не существует!");
Поиск элемента в двунаправленном списке[6]
Операция поиска элемента в двунаправленном списке реализуется абсолютно аналогично соответствующей функции для однонаправленного списка. Поиск элемента в двунаправленном списке можно вести:
а) просматривая элементы от начала к концу списка;
б) просматривая элементы от конца списка к началу;
в) просматривая список в обоих направлениях одновременно: от начала к середине списка и от конца к середине (учитывая, что элементов в списке может быть четное или нечетное количество).
Мы будем использовать способ: просматривать элементы от конца списка к началу.
p = End->back;
while (p->back != NULL) {
printf("index|%d| %lf\n", p->index, p->a); //выводим индекс элемента и сам элемент.
p = p->back;
}
