Визуализатор циклического списка на C++
От: this  
Дата: 29.05.17 10:37
Оценка: 1 (1)
Запилил визуализатор циклического списка.
Нужно, конечно, его ещё допиливать: вставка элемента после ключа, удаление элемента после ключа и т.д.
Как вам идея?
Отредактировано 29.05.2017 10:40 this . Предыдущая версия .
списки
Re: Визуализатор циклического списка на C++
От: Skorodum Россия  
Дата: 29.05.17 11:01
Оценка:
Здравствуйте, this, Вы писали:

T>Запилил визуализатор циклического списка.

T>Нужно, конечно, его ещё допиливать: вставка элемента после ключа, удаление элемента после ключа и т.д.
T>Как вам идея?
Для курсовой работы — нормально (особенно лет 30 назад, когда этого нельзя было посмотреть в отладчике ).

T>Image: VisualList.jpg

0. Почему есть значения по умолчанию?
1. Навероное, под "ключ" имеется в виду "значение"?
2. Где ссылка на гитхаб?
Re: Визуализатор циклического списка на C++
От: Went  
Дата: 30.05.17 10:42
Оценка: +1
Здравствуйте, this, Вы писали:
T>Как вам идея?
А где тут священные войны?
Re: Визуализатор циклического списка на C++
От: Слава  
Дата: 30.05.17 11:28
Оценка: :)
Здравствуйте, this, Вы писали:

T>Запилил визуализатор циклического списка.

T>Нужно, конечно, его ещё допиливать: вставка элемента после ключа, удаление элемента после ключа и т.д.

Напиши на Angular, хоть показать кому без стыда будет можно.
Re: Визуализатор циклического списка на C++
От: Философ Ад http://vk.com/id10256428
Дата: 30.05.17 17:26
Оценка: +1
Здравствуйте, this, Вы писали:

T>Запилил визуализатор циклического списка.


Зачем ты это сделал?
Всё сказанное выше — личное мнение, если не указано обратное.
Re: Визуализатор циклического списка на C++
От: LaptevVV Россия  
Дата: 31.05.17 03:57
Оценка:
T>Запилил визуализатор циклического списка.
T>Нужно, конечно, его ещё допиливать: вставка элемента после ключа, удаление элемента после ключа и т.д.
T>Как вам идея?
Идея тут причем?
Такая курсовая у нас во 2 семестре 1 курса.
Только к визуализатору списка еще надо написать визуализатор теории (текст, разбитый на странички)
И еще тестилку по этой теме, где из n вопросов случайным образом выбирается k вопросов.
Принимаются ответы и выводится некая оценка.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Визуализатор циклического списка на C++
От: kov_serg Россия  
Дата: 31.05.17 05:51
Оценка:
Здравствуйте, this, Вы писали:

T>Запилил визуализатор циклического списка.

T>Нужно, конечно, его ещё допиливать: вставка элемента после ключа, удаление элемента после ключа и т.д.
T>Как вам идея?
Лучше вместо реальных адресов использовать номера A0,A1,A2,A3... так нагляднее. Или хотябы базу сделать от 0. Иначе с 64бит адресами будет грустно.
T>Image: VisualList.jpg
Теперь визуализатор динарных деревьев на очереди?
Re: Визуализатор циклического списка на C++
От: iriska2  
Дата: 31.05.17 11:56
Оценка:
Здравствуйте, this, Вы писали:

T>Запилил визуализатор циклического списка.

T>Нужно, конечно, его ещё допиливать: вставка элемента после ключа, удаление элемента после ключа и т.д.
T>Как вам идея?
T>Image: VisualList.jpg
Не очень бро, визуализатор должен быть всё-таки графическим, посмотри например http://rain.ifmo.ru/cat/view.php/vis
Re[2]: Визуализатор циклического списка на C++
От: Философ Ад http://vk.com/id10256428
Дата: 31.05.17 17:35
Оценка:
Здравствуйте, iriska2, Вы писали:

T>>Image: VisualList.jpg

I>Не очень бро, визуализатор должен быть всё-таки графическим, посмотри например http://rain.ifmo.ru/cat/view.php/vis

Ну, он хотя-бы скриншоты выложил, а там куда ты ткнул смотреть "Файл этого типа может нанести вред вашему...", и xml'ка скачивается — это очень графично, очень визуально, и, одновременно очень удобно
Всё сказанное выше — личное мнение, если не указано обратное.
Re[2]: Визуализатор циклического списка на C++
От: this  
Дата: 31.05.17 22:29
Оценка:
Здравствуйте, kov_serg, Вы писали:
_>Лучше вместо реальных адресов использовать номера A0,A1,A2,A3... так нагляднее. Или хотябы базу сделать от 0. Иначе с 64бит адресами будет грустно.
Тут только хардкор :
Помимо реальных адресов тут ещё и реальный циклический список задействован:
#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <iomanip>
#include <conio.h>

using namespace std;

enum ConsoleColor
{
    Black = 0,
    Blue = 1,
    Green = 2,
    Cyan = 3,
    Red = 4,
    Magenta = 5,
    Brown = 6,
    LightGray = 7,
    DarkGray = 8,
    LightBlue = 9,
    LightGreen = 10,
    LightCyan = 11,
    LightRed = 12,
    LightMagenta = 13,
    Yellow = 14,
    White = 15
};

void setColor(int text, int background)
{
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}

void setColor(ConsoleColor text, ConsoleColor background)
{
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}

struct node
{
    int item{};
    node* next{};

    node(int x, node* t)
    {
        item = x;
        next = t;
    }
};

typedef node *link;

void printColored1(link x, ConsoleColor first, ConsoleColor second)
{
    setColor(first, second);
    cout << setw(10) << x << setw(2) << " ";
    setColor(White, Black);
}

void printColored2(link x)
{
    setColor(Magenta, Brown);
    cout << setw(5) << x << setw(4) << "|";
    setColor(White, Black);
}

void printColored3(link x, ConsoleColor first, ConsoleColor second)
{
    setColor(first, second);
    cout << setw(17) << x
         << setw(9) << " ";
    setColor(White, Black);
}

void printColored4(link x, ConsoleColor first, ConsoleColor second)
{
    setColor(first, second);
    cout << setw(17) << x
        << setw(9) << " ";
    setColor(White, Black);
}

void printColored5(link x)
{
    setColor(Magenta, Brown);
    cout << setw(5) << x << setw(4) << "|";
    setColor(White, Black);
}

void printListFirst(const int& lstSize, link x)
{
    link start = x;
    do {
        if (x->item == 1)
        {
            cout << "|";
            printColored1(x, Magenta, Brown);
            cout << "|";
            cout << setw(5) << x->item << setw(4) << "|"
                << setw(17) << x->next
                << setw(10) << "|" << endl;
        }
        else
            if (x->item == lstSize)
            {
                cout << "|"
                    << setw(10) << x << "  |"
                    << setw(5) << x->item << setw(4) << "|";
                printColored3(x->next, Magenta, Brown);
                cout << "|" << endl;
            }
            else
            {
                cout << "|"
                    << setw(10) << x << "  |"
                    << setw(5) << x->item << setw(4) << "|"
                    << setw(17) << x->next
                    << setw(10) << "|" << endl;
            }

        x = x->next;
    } while (x != start);
}

void printListSecond(const int& lstSize, link x, const int N)
{
    link start = x;
    link tmp = nullptr;
    do {
        if (x->next->item == N)
        {
            cout << "|"
                << setw(10) << x << "  |"
                << setw(5) << x->item << setw(4) << "|";
                printColored4(x->next, Green, Blue);
                cout << "|" << endl;
        }
        else
            if (x->item == N)
            {
                cout << "|";
                    printColored1(x, Green, Blue);
                    cout << "|";
                    cout << setw(5) << x->item << setw(4) << "|";
                    printColored3(x->next, Green, Red);
                    cout << "|" << endl;
                    tmp = x->next;
            }
            else
                if (x == tmp)
                {
                    cout << "|";
                        printColored1(x, Green, Red); 
                        cout << "|"
                        << setw(5) << x->item << setw(4) << "|"
                        << setw(17) << x->next
                        << setw(10) << "|" << endl;
                }
                else
                    {
                        cout << "|"
                        << setw(10) << x << "  |"
                        << setw(5) << x->item << setw(4) << "|"
                        << setw(17) << x->next
                        << setw(10) << "|" << endl;
                    }

        x = x->next;
    } while (x != start);
}

void printListThird(link x, link del)
{
    link start = x;

    bool flag = false;
    do {
        if (x == del)
        {
            cout << "|"
                << setw(10) << x << "  |"
                << setw(5) << x->item << setw(4) << "|";
            printColored3(x->next, Magenta, Brown);
            cout << "|" << endl;
            flag = true;
        }
        else if (flag == true) {
            cout << "|";
            printColored1(x, Magenta, Brown);
            cout << "|";
            cout << setw(5) << x->item << setw(4) << "|"
                << setw(17) << x->next
                << setw(10) << "|" << endl;
            flag = false;
        }
        
        else {
            cout << "|"
                << setw(10) << x << "  |"
                << setw(5) << x->item << setw(4) << "|"
                << setw(17) << x->next
                << setw(10) << "|" << endl;
        }
        x = x->next;
    } while (x != start);
}

link find(link lst, int key)
{
    while (lst != lst->next)
    {
        if (lst->next->item == key)
        {
            return lst;
        }
        lst = lst->next;
    }
    return nullptr;
}

void deleteItem(link lst)
{
    link temp = lst->next;
    lst->next = lst->next->next;
    delete temp;

}

inline void printLine()
{
    cout << "|------------------------------------------------|" << endl;
}

inline void printRoof()
{
    cout << "--------------------------------------------------" << endl;
}

inline void printCap()
{
    printRoof();
    cout << "| Адрес узла |" <<
        setw(8) << "  Ключ  |" <<
        setw(26) << "   Адрес следующего узла  |" << endl;
    printRoof();
}

int main(int argc, char *argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    setColor(White, Black);

    int sizeLst;

    cout << "Введите размер списка:" << endl;
    cin >> sizeLst;

    cout << endl;

    cout << "-----------------Головной элемент-----------------" << endl;

    int eltLst;
    cout << "Введите элементы списка:" << endl;
    cin >> eltLst;
    link t = new node{ eltLst, nullptr };

    t->next = t;
    link x = t;

    // Обход и заполнение списка
    for (int item = 2; item <= sizeLst; ++item) {
        cin >> eltLst;
        x = (x->next = new node{ eltLst, t });
    }
    
    printCap();

    x = x->next;

    printListFirst(sizeLst, x);
    printRoof();

    cout << endl;
    cout << "Введите элемент, который вы хотите вставить в список:" << endl;
    int elt = 0;
    cin >> elt;

    x = x->next;
    link add = new node(elt, x->next);
    x->next = add;


    cout << endl;

    cout << "-----------------Вставка элемента-----------------" << endl;


    printCap();

    printListSecond(sizeLst, x, elt);

    printRoof();


    int del = 0;

    cout << endl;
    cout << "Введите ключ элемента для удаления:" << endl;
    cin >> del;
    cout << endl;

    cout << "----------------Удаление элемента-----------------" << endl;

    printCap();
    link delItem = find(x, del);

    if (delItem != nullptr)
    {
        deleteItem(delItem);
    }

    printListThird(x, delItem);

    printRoof();
    cout << endl;
}
Re[3]: Визуализатор циклического списка на C++
От: kov_serg Россия  
Дата: 01.06.17 06:16
Оценка:
Здравствуйте, this, Вы писали:

T>Здравствуйте, kov_serg, Вы писали:

_>>Лучше вместо реальных адресов использовать номера A0,A1,A2,A3... так нагляднее. Или хотябы базу сделать от 0. Иначе с 64бит адресами будет грустно.
T>Тут только хардкор :
T>Помимо реальных адресов тут ещё и реальный циклический список задействован:

Вам есть куда стремиться.

telnet towel.blinkenlights.nl


Re[2]: Визуализатор циклического списка на C++
От: Aleksey Katorgin  
Дата: 02.06.17 08:34
Оценка:
Здравствуйте, Went, Вы писали:

W>Здравствуйте, this, Вы писали:

T>>Как вам идея?
W>А где тут священные войны?

Ну как же: "нормальная идея" vs "не очень".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.