Класс однонаправленное кольцо - C++

278
08 января 2018, 10:39

Разработать класс реализующий список (однонаправленное кольцо). Элемент списка содержит информацию о товаре на складе фирмы. Элемент очереди содержит наименование товара, цену, количество и дату поставки.

Вот реализация класса. Как видно я использую в структуре одно поле. Я не могу понять задание, элемент списка это данные в структуре? А элемент очереди это где данные должны быть?

my_list.h

    struct nodes {
    char data[256]; //Информация о товаре
    nodes* next;
};

class my_list {
public:
    void insert(char* str); //Вставляет запись за текущей.
    void insert(nodes* nod); //Вставляет запись за текущей(перегрузка)
    void del_next();        //Удаляет запись за текущей.
    void go_next();         //Переходит к следующей записи.
    void go_first();        //Переходит к первой записи.
    const char* show();     //возвращает указатель на хранимые данные.
    int  size();            //Возвращает количество элементов в списке.
    my_list();
    ~my_list();
private:
    nodes *head;           //начало списка.
    nodes *position;       //активная (текущая) запись.
    int     count;          //количество элементов списка.
    void free();            //удаляет все элементы, освобождает память
};

и описание методов my_list.cpp

    my_list::my_list() {
    head = NULL;
    count = 0;
    go_first();
}
my_list::~my_list() {
    free();
}
//public:
void my_list::insert(char* str) {
    //Вставляет запись за текущей.
    nodes* new_node = new nodes;
    strcpy_s(new_node->data, str);
    if (position != NULL) {
        new_node->next = position->next;
        position->next = new_node;
    }
    else {
        new_node->next = new_node;
        position = head = new_node;
    }
    count++;
}

void my_list::insert(nodes* new_node) {
    //Вставляет запись за текущей.
    if (position != NULL) {
        new_node->next = position->next;
        position->next = new_node;
    }
    else {
        new_node->next = new_node;
        position = head = new_node;
    }
    count++;
}
void my_list::del_next() {
    //Удаляет запись за текущей.
    if (position != NULL) {
        nodes* tmp = position->next;
        position->next = position->next->next;
        if (tmp == head) head = tmp->next;
        delete tmp;
    }
    count--;
}
void my_list::go_next() {
    //Переходит к следующей записи.
    if (position != NULL)
        position = position->next;
}
void my_list::go_first() {
    //Переходит к первой записи.
    position = head;
}
const char* my_list::show() {
    //возвращает указатель на хранимые данные.
    if (position != NULL)
        return position->data;
    else
        return NULL;
}
int my_list::size() {
    //Возвращает количество элементов в списке.
    return count;
}
// private:
void my_list::free() {
    //удаляет все элементы, освобождает память
    go_first();
    while (head->next != head) del_next();
    del_next();
}
Answer 1

Надо внимательнее читать задание!

В структуре должны быть "предметные" поля:

  • наименование товара
  • цена
  • количество
  • дата поставки

И одно "служебное" - указатель на очередной элемент типа структуры, собственно, с помощью которого и реализуется список.

Примерно вот так:

struct Node {
  std::string Name;
  double Cost;
  size_t Amount;
  std::time_t DateTime;
  Node *Next; 
};
READ ALSO
Как сделать перегрузку операторов

Как сделать перегрузку операторов

Реально ли для объектов этого класса использовать перегрузку оператора + (суммы?) и как это сделать? и имеет ли смысл?

223
Все Типы данных с++

Все Типы данных с++

Какие есть типы данных в С++? Кто мог бы логически расставить по местам? Есть стандартные типы (int, double

243
Permission's для чтения файлов других приложений в /data/data/%appname%

Permission's для чтения файлов других приложений в /data/data/%appname%

Ребята, может кто знает, какие в android нужны permissions для чтения файлов других приложений в /data/data/%appname% ?

208
Составить json из text.txt

Составить json из text.txt

ЗдравствуйтеНужна помощь

417