Главная страница
Навигация по странице:

  • Отчет по итогам учебной практики Технологической (проектно-технологической) практики 2019-2020 уч. год 1 курс 2 семестр Автор

  • Руководители практики

  • ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ НА ПРАКТИКУ И РАБОЧИЙ ГРАФИК

  • Линейный односвязный список (однонаправленный связный список) Линейный однонаправленный список

  • Отчет по практике. Отчет по итогам учебной практики Технологической (проектнотехнологической) практики


    Скачать 210.17 Kb.
    НазваниеОтчет по итогам учебной практики Технологической (проектнотехнологической) практики
    АнкорОтчет по практике
    Дата17.02.2023
    Размер210.17 Kb.
    Формат файлаdocx
    Имя файлаOtchet_po_praktike_Grigorev_S.docx
    ТипОтчет
    #941555


    Министерство науки и высшего образования Российской Федерации

    ФГБОУ ВО «Тверской государственный университет»

    Факультет прикладной математики и кибернетики

    Направление 09.03.03 – Прикладная информатика

    Профиль «Прикладная информатика в экономике»

    Отчет

    по итогам учебной практики

    Технологической (проектно-технологической) практики

    2019-2020 уч. год 1 курс 2 семестр

    Автор: студент 1 курса 11 группы
    Григорьев Сергей Алексеевич
    Руководители практики:
    к.т.н., доцент кафедры информатики

    Волушкова Вера Львовна

    _______________________
    к.э.н., доцент кафедры математической статистики и системного анализа

    Смородова Анна Александровна
    _________________________
    Оценка: ___________________

    Тверь – 2020


    Министерство науки и высшего образования Российской Федерации

    ФГБОУ ВО «Тверской государственный университет»


    Факультет прикладной математики и кибернетики

    ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ НА ПРАКТИКУ

    И РАБОЧИЙ ГРАФИК

           Григорьев Сергей Алексеевич

    Фамилия, Имя, Отчество студента (-ки) полностью


    1. Направление подготовки: 09.03.03 Прикладная информатика

    2. Направленность (профиль) программы: Прикладная информатика в экономике

    3. Вид практики: Учебная практика 1 курс, 2 семестр

    4. Тип практики: технологическя (проектно-технологическая) практика

    5. Руководитель ООП: д.ф.-м.н., профессор Язенин А.В.

    6. Руководитель практики: доцент кафедры информатики Волушкова Вера Львовна

    7. Индивидуальное задание на практику

    Создать шаблонный класс односвязный список.

    Проверить работу класса, взяв в качестве шаблона – класс Worker (из задания 3)

    1. Рабочий график: (составляется в соответствии с программой практики)



    Задачи

    Планируемые сроки выполнения

    1.

    Изучить шаблонный полиморфизм

    8.06.2020-10.06.2020

    2.

    Изучить методы работы с односвязным списком

    11.06.2020-13.06.2020

    3.

    Создать шаблонный класс List

    15.06.2020- 16.06.2020

    4.

    Протестировать шаблонный класс List

    17.06.2020- 20.06.2020

    5.







    6.







    7.







    8.

















    Дата выдачи задания: 8.06.2020
    Руководитель практики: ___________________/__Волушкова В.Л,________________

    Линейный односвязный список (однонаправленный связный список)
    Линейный однонаправленный список — это структура данных, состоящая из элементов одного типа, связанных между собой последовательно посредством указателей. Каждый элемент списка имеет указатель на следующий элемент. Последний элемент списка указывает на NULL. Элемент, на который нет указателя, является первым (головным) элементом списка. Здесь ссылка в каждом узле указывает на следующий узел в списке. В односвязном списке можно передвигаться только в сторону конца списка. Узнать адрес предыдущего элемента, опираясь на содержимое текущего узла, невозможно.

    В информатике линейный список обычно определяется как абстрактный тип данных (АТД), формализующий понятие упорядоченной коллекции данных. На практике линейные списки обычно реализуются при помощи массивов и связных списков. Иногда термин «список» неформально используется также как синоним понятия «связный список». К примеру, АТД нетипизированного изменяемого списка может быть определён как набор из конструктора и основных операций:

    • Операция, проверяющая список на пустоту.

    • Три операции добавления объекта в список (в начало, конец или внутрь после любого (n-го) элемента списка);

    • Операция, вычисляющая первый (головной) элемент списка;

    • Операция доступа к списку, состоящему из всех элементов исходного списка, кроме первого.






    List.h
    #pragma once

    #include

    #include

    using namespace std;
    template

    struct Node

    {

    T item;

    Node* next;

    Node(T k, Node* n) {

    item = k;

    next = n;

    }

    Node() {

    next = NULL;

    }

    };
    template

    class List

    {

    private:

    Node* head;

    public:

    List();

    List(T* a, int);

    List(const List& l);

    virtual

    List();
    void add(T a);

    void del(Node*);

    void delAll();

    Node* findNode(T a);

    bool empty();

    void addstart(T a);

    void delv(T a);

    void insert(T a);

    int getSize();

    void sort();

    Node* findNodeID(const int id);

    void reverse();
    friend ostream& operator<<(ostream& os, List& l)

    {

    if (l.head == NULL) os << "list is empty \n";

    for (Node* i = l.head; i; i = i->next)

    os << i->item << endl;

    return os;

    }

    friend istream& operator>>(istream& is, List& l)

    {

    if (l.head != NULL)

    l.delAll();

    l.head = NULL;

    Node* temp;

    Node* ptr = NULL;

    T k;

    while (is >> k) {

    temp = new Node(k, NULL);

    if (!l.head) l.head = ptr = temp;

    else ptr->next = temp;

    ptr = temp;

    }

    if (is.bad()) cout << "bad";
    return is;

    }

    };
    template

    List::List()

    {

    head = NULL;

    }
    template

    List::List(T* a, int n)

    {

    head = NULL;

    Node* temp;

    Node* ptr = NULL;

    for (int i = 0; i < n; i++)

    {

    temp = new Node(a[i], NULL);

    if (head == NULL)

    head = ptr = temp;

    else

    ptr->next = temp;

    ptr = temp;

    }

    }
    template

    List::List(const List& l)

    {

    head = NULL;

    Node* temp;

    Node* ptr = NULL;

    for (Node* i = l.head; i; i = i->next)

    {

    temp = new Node(i->item, NULL);

    if (head == NULL)

    head = ptr = temp;

    else

    ptr->next = temp;

    ptr = temp;

    }

    }
    template

    List::List()

    {

    while (head) del(head);

    }
    template

    void List::delAll()

    {

    while (head) del(head);

    }
    template

    void List::add(T a)

    {

    Node* temp = new Node(a, NULL);

    if (head == NULL)

    head = temp;

    else

    {

    Node* i;

    for (i = head; i->next; i = i->next);

    i->next = temp;

    }

    }
    template

    void List::del(Node* ptr)

    {

    if (ptr)

    {

    if (ptr == head)

    {

    head = head->next;

    delete ptr;

    }

    else

    {

    Node* i;

    for (i = head; i->next != ptr && i->next; i = i->next);

    i->next = ptr->next;

    delete ptr;

    }

    }

    }
    template

    Node* List::findNode(T a)

    {

    Node* i;

    for (i = head; i && i->item != a; i = i->next);

    return i;

    }
    template

    bool List::empty()

    {

    return !head;

    }
    template

    void List::addstart(T a)

    {

    Node* temp = new Node(a, head);

    head = temp;

    }
    template

    void List::delv(T a)

    {

    del(findNode(a));

    }
    template

    void List::insert(T a)

    {

    Node* ptr = this->head;

    while (ptr->next)

    {

    if (ptr->item > ptr->next->item)

    {

    cout << "Not sorted!" << endl;

    return;

    }

    ptr = ptr->next;

    }

    ptr = this->head;

    while (ptr->next->item < a)

    {

    ptr = ptr->next;

    }

    Node* temp = new Node(a, ptr->next);

    ptr->next = temp;

    }
    template

    int List::getSize()

    {

    int counter;

    Node* i;

    for (i = head, counter = 0; i; i = i->next, counter++);

    return counter;

    }
    template

    void List::sort()

    {

    for (int i = 1; i < getSize(); i++)

    {

    Node* b = findNodeID(i);

    Node* c = head;

    Node* prev = NULL;

    while (b->item > c->item) {

    prev = c;

    c = c->next;

    }

    if (c == b)

    continue;

    Node* ptr = head;

    while (ptr->next != b)

    ptr = ptr->next;

    ptr->next = ptr->next->next;

    if (prev)

    {

    prev->next = b;

    b->next = c;

    }

    else

    {

    b->next = c;

    head = b;

    }

    }

    }
    template

    Node* List::findNodeID(const int id)

    {

    Node* i;

    int counter;

    for (i = head, counter = 0; i && counter < id; i = i->next, counter++);

    return i;

    }
    template

    void List::reverse()

    {

    Node* ptr = head->next;

    Node* ptr2 = head->next->next;

    Node* temp = head; temp->next = NULL;

    while (ptr2)

    {

    ptr->next = temp;

    temp = ptr;

    ptr = ptr2;

    ptr2 = ptr2->next;

    }

    ptr->next = temp;

    head = ptr;

    }

    Source.cpp


    #include

    #include

    #include "Worker.h"

    #include "List.h"

    using namespace std;
    int main()

    {

    fstream in("text.txt");

    if (!in) cout << "Error" << endl;
    List myList;

    in >> myList;
    cout << myList << endl;
    Worker a("Konstantinov", "T.A.", "Programmer", 2010);

    Worker b("Alexeev", "R.P.", "Plumber", 1996);

    myList.addstart(a);

    myList.add(b);
    cout << myList << endl;
    myList.sort();
    cout << "Sort" << endl << myList << endl;
    Worker c("Nikolaev", "S.A.", "SMM", 2005);

    myList.delv(c);
    cout << "Delete" << endl << myList << endl;
    myList.insert(c);
    cout << "Insert" << endl << myList << endl;
    myList.reverse();
    cout << "Reverse" << endl << myList << endl;
    cout << "Empty? " << myList.empty() << endl;

    }


    написать администратору сайта