DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Звіт з лабораторної роботи № 6 з дисципліни: «Структури даних та алгоритми»

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

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

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

Рік:
2019
Тип роботи:
Лабораторна робота
Предмет:
Структури даних та алгоритми
Група:
КН-31
Коротко про документ

Про що ця робота

Звіт з лабораторної роботи присвячено вивченню абстрактної структури даних список та реалізації зв’язаних вузлів мовою C++. Наведено код програми для створення лінійного зв'язаного списку випадкових чисел та вилучення кожного другого елемента.

У роботі розглядаються

  • Структури даних
  • Зв'язані списки
  • Динамічна пам'ять
  • Алгоритми обробки даних
  • Мова програмування C++
  • Вказівники

Зміст і розділи

  1. Мета роботи
  2. Завдання
  3. Постановка задачі
  4. Результати виконання програми
  5. Висновки
  6. Додатки
Для кого:Студенти технічних спеціальностей вищих навчальних закладів
Викладачі:Кузьо М. М.

Ключові поняття

зв'язаний списоквузолдинамічна структуравказівникпам'ятьголова спискукінець спискуалгоритмпрограмуванняC++

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Звіт з лабораторної роботи № 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; }
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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