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

  • Лабораторная работа №7 Линейный односвязный список По дисциплине «Основы алгоритмизации и программирования»

  • Цель

  • Решение Листинг

  • Тесты Вывод

  • Выдренко_ЛР7. Лабораторная работа 7 Линейный односвязный список По дисциплине Основы алгоритмизации и программирования


    Скачать 63.56 Kb.
    НазваниеЛабораторная работа 7 Линейный односвязный список По дисциплине Основы алгоритмизации и программирования
    Дата06.02.2022
    Размер63.56 Kb.
    Формат файлаdocx
    Имя файлаВыдренко_ЛР7.docx
    ТипЛабораторная работа
    #353437

    Министерство образования Республики Беларусь

    Учреждение образования «Полоцкий государственный университет»

    Факультет информационных технологий

    Кафедра технологии программирования

    Лабораторная работа №7

    Линейный односвязный список

    По дисциплине «Основы алгоритмизации и программирования»

    Выполнил: Выдренко Е.О.

    Группа 19-МС

    Проверил: Данченко Е.В.

    Новополоцк

    2020 г.

    Тема: Модульное программирование

    Цель: изучить методы организации списочных структур в динамической памяти. Реализовать алгоритмы добавления, удаления и сортировки списков.

    Ход работы

    Создание односвязного линейного списка с выполнением поставленной задачи, а именно: функция добавления, удаления, смещения, вставки элемента на определённую позицию в списке.
    Решение

    Листинг

    #include

    #include

    #include

    #include

    using namespace std;

    // переменная ошибок

    int listOneError;

    // описание исключительных ситуаций

    const int listOneOK = 0;

    const int listOneEmpty = 1;

    const int listOneNoMem = 2;

    const int listOneEnd = 3;
    struct element

    {

    double data;

    element* link;

    };

    struct ListOne

    {

    element* start;

    element* ptr;

    };
    int isEmptyListOne(ListOne* L)

    {

    if (!L->start->link) {

    listOneError = listOneEmpty;

    return 1;

    }

    return 0;

    }
    void initListOne(ListOne* L)

    {
    L->start = (element*)malloc(sizeof(element));
    if (!L->start)

    {

    listOneError = listOneNoMem;

    return;

    }
    L->ptr = L->start;

    L->ptr->link = NULL;

    }
    void putListOne(ListOne* L, double E)

    {
    element* temp = (element*)malloc(sizeof(element));
    if (!L->start)

    {

    listOneError = listOneNoMem;

    return;

    }
    temp->data = E;
    temp->link = L->ptr->link;
    L->ptr->link = temp;

    }
    void getListOne(ListOne* L, double* E) {
    if (isEmptyListOne(L)) return;
    if (!L->ptr->link) {

    listOneError = listOneEnd;

    return;

    }
    element* pntr = L->ptr->link;
    L->ptr->link = pntr->link;
    *E = pntr->data;
    pntr->link = NULL;
    free(pntr);

    }
    void printListOne(ListOne* L) {
    element* tmp;
    tmp = L->start->link;
    while (tmp != NULL) {

    cout << "\t" << tmp->data;

    tmp = tmp->link;

    }

    free(tmp);

    }
    void movePtrListOne(ListOne* L) {
    if (!L->ptr->link) {

    listOneError = listOneEnd;

    return;

    }
    L->ptr = L->ptr->link;

    }
    void beginPtrListOne(ListOne* L)

    {

    L->ptr = L->start;

    }

    void endPtrListOne(ListOne* L) {

    while (L->ptr->link)

    movePtrListOne(L);
    }
    void doneListOne(ListOne* L) {

    beginPtrListOne(L);

    double temp;

    while (!isEmptyListOne(L))

    getListOne(L, &temp);

    free((void*)L->ptr);

    }
    void vstavka(ListOne* L, double i, double x)

    {

    beginPtrListOne(L);

    for (int j = 0; j < i - 1; j++)

    {

    movePtrListOne(L);

    }

    putListOne(L, x);

    beginPtrListOne(L);

    }
    int main(void) {

    SetConsoleCP(1251);

    SetConsoleOutputCP(1251);

    ListOne* List = (ListOne*)malloc(0);

    initListOne(List);
    putListOne(List, 1);

    putListOne(List, 2);

    putListOne(List, 3);

    putListOne(List, 4);

    putListOne(List, 5);
    cout << "Список после добавления элементов:" << endl;

    printListOne(List);
    double i = 0;

    movePtrListOne(List);

    getListOne(List, &i);

    cout << "\n";

    system("PAUSE");
    cout << endl << "После смещения удалён элемент: " << i << endl;

    printListOne(List);

    movePtrListOne(List);

    movePtrListOne(List);

    getListOne(List, &i);

    cout << "\n";

    system("PAUSE");
    cout << endl << "После ещё двух смещений удалён элемент: " << i << endl;

    printListOne(List);
    beginPtrListOne(List);
    cout << "\n";

    system("PAUSE");
    cout << endl << "Первый элемент: " << List->ptr->link->data << endl;

    printListOne(List);

    endPtrListOne(List);

    cout << "\n";

    system("PAUSE");
    cout << endl << "Последний элемент: " << List->ptr->data << endl;

    printListOne(List);
    cout << "\n";

    cout << "Вставка Элемента 7 на третью позицию" << endl;

    vstavka(List, 3, 7);

    printListOne(List);
    doneListOne(List);

    cout << "\n";
    return 0;

    }

    Тесты



    Вывод: изучил методы организации списочных структур в динамической памяти. Реализовал алгоритмы добавления, удаления и сортировки списков.


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