DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Лабораторна робота №6 Програмування, ч3

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
СІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2019
Тип роботи:
Лабораторна робота
Предмет:
Програмування алгоритмів цифрової обробки сигналів та зображень

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Звіт з лабораторної роботи № 6 з дисципліни: “Структури даних та алгоритми» На тему: “ Структура даних СПИСОК” Варіант 4 1. МЕТА РОБОТИ Вивчення фундаментальної абстрактної структури даних список. Набуття практичних навичок побудови списка, дослідження динаміки його вмісту та використання списків для розв'язання прикладних задач. 2. ЗАВДАННЯ 2.1 Постановка задачі Побудувати динамічну структуру даних список, реалізований за допомогою зв’язаних вузлів. Написати програму, яка будує лінійний зв’язаний список, що містить N випадкових цілих чисел з проміжку [111 ; 222] і вилучає з нього кожний другий елемент. 2.2 Результати виконання програми / Рис 2.3 Результат виконання програми ВИСНОВКИ: під час виконання лабораторної роботи я набув практичних навичок побудови списка, дослідив динаміку його вмісту та використання списка для розв'язання прикладних задач. ДОДАТКИ Файл plist.h #pragma once #include "stdafx.h" #include <iostream> using namespace std; typedef struct _Node { void *value; struct _Node *next; struct _Node *prev; } Node; typedef struct _DblLinkedList { size_t size; Node *head; Node *tail; } DblLinkedList; //Екземпляр структури DblLinkedList* createDblLinkedList() { DblLinkedList *tmp = (DblLinkedList*)malloc(sizeof(DblLinkedList)); tmp->size = 0; tmp->head = tmp->tail = NULL; return tmp; } //Видалення списку void deleteDblLinkedList(DblLinkedList **list) { Node *tmp = (*list)->head; Node *next = NULL; while (tmp) { next = tmp->next; free(tmp); tmp = next; } free(*list); (*list) = NULL; } //Додавання до голови void pushFront(DblLinkedList *list, void *data) { Node *tmp = (Node*)malloc(sizeof(Node)); if (tmp == NULL) { exit(1); } tmp->value = data; tmp->next = list->head; tmp->prev = NULL; if (list->head) { list->head->prev = tmp; } list->head = tmp; if (list->tail == NULL) { list->tail = tmp; } list->size++; } //Видалення з голови void* popFront(DblLinkedList *list) { Node *prev; void *tmp; if (list->head == NULL) { exit(2); } prev = list->head; list->head = list->head->next; if (list->head) { list->head->prev = NULL; } if (prev == list->tail) { list->tail = NULL; } tmp = prev->value; free(prev); list->size--; return tmp; } //Додавання в кінець void pushBack(DblLinkedList *list, void *value) { Node *tmp = (Node*)malloc(sizeof(Node)); if (tmp == NULL) { exit(3); } tmp->value = value; tmp->next = NULL; tmp->prev = list->tail; if (list->tail) { list->tail->next = tmp; } list->tail = tmp; if (list->head == NULL) { list->head = tmp; } list->size++; } //Видалення з кінця void* popBack(DblLinkedList *list) { Node *next; void *tmp; if (list->tail == NULL) { exit(4); } next = list->tail; list->tail = list->tail->prev; if (list->tail) { list->tail->next = NULL; } if (next == list->head) { list->head = NULL; } tmp = next->value; free(next); list->size--; return tmp; } //Повернення n-го елемента Node* getNth(DblLinkedList *list, size_t index) { Node *tmp = list->head; size_t i = 0; while (tmp && i < index) { tmp = tmp->next; i++; } return tmp; } Node* getNthq(DblLinkedList *list, size_t index) { Node *tmp = NULL; size_t i; if (index < list->size / 2) { i = 0; tmp = list->head; while (tmp && i < index) { tmp = tmp->next; i++; } } else { i = list->size - 1; tmp = list->tail; while (tmp && i > index) { tmp = tmp->prev; i--; } } return tmp; } //Додавання вузла void insert(DblLinkedList *list, size_t index, void *value) { Node *elm = NULL; Node *ins = NULL; elm = getNth(list, index); if (elm == NULL) { exit(5); } ins = (Node*)malloc(sizeof(Node)); ins->value = value; ins->prev = elm; ins->next = elm->next; if (elm->next) { elm->next->prev = ins; } elm->next = ins; if (!elm->prev) { list->head = elm; } if (!elm->next) { list->tail = elm; } list->size++; } //Видалення вузла void* deleteNth(DblLinkedList *list, size_t index) { Node *elm = NULL; void *tmp = NULL; elm = getNth(list, index); if (elm == NULL) { exit(5); } if (elm->prev) { elm->prev->next = elm->next; } if (elm->next) { elm->next->prev = elm->prev; } tmp = elm->value; if (!elm->prev) { list->head = elm->next; } if (!elm->next) { list->tail = elm->prev; } free(elm); list->size--; return tmp; } //Вивід списка void printDblLinkedList(DblLinkedList *list, void(*fun)(void*)) { Node *tmp = list->head; while (tmp) { fun(tmp->value); tmp = tmp->next; } printf("\n"); } void printInt(void *value) { printf("%d ", *((int*)value)); } //Створення списка з масиву DblLinkedList* fromArray(void *arr, size_t n, size_t size) { DblLinkedList *tmp = NULL; size_t i = 0; if (arr == NULL) { exit(7); } tmp = createDblLinkedList(); while (i < n) { pushBack(tmp, ((char*)arr + i*size)); i++; } return tmp; } Файл lab6.cpp #include "stdafx.h" #include <iostream> #include "plist.h" using namespace std; void RemoveEach2stElement(DblLinkedList *list, int size) { int *tmp_arr = new int[size]; for (int i=0; i<size;i++) { tmp_arr[i] = *((int*)(getNthq(list, i))->value); } cout << endl; for (int i = 0; i < size; i++) { popBack(list); } for (int i=0; i<size; i=i+2) { pushBack(list, &tmp_arr[i]); } cout << "Removing each 2st element:" << endl;; printDblLinkedList(list, printInt); delete[] tmp_arr; } int main() { DblLinkedList *list = createDblLinkedList(); cout << "Enter size:"; int size; cin >> size; cout << endl; int *arr = new int[size]; for (int i=0; i< size; i++) { arr[i] = rand()%112+111; pushBack(list, &arr[i]); } cout << "New list:" << endl; printDblLinkedList(list, printInt); RemoveEach2stElement(list, size); delete[] arr; system ("pause"); return 0; }
Антиботан аватар за замовчуванням

28.05.2019 18:01

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!