Программа списки


Это простая программа, списки которых создает список путем добавления объекта в хвосте. Он компилируется и прекрасно работает.

Это стиль кодирования, логика и т. д. нормально? Как я могу улучшить эту программу? Есть ли что-нибудь лишних или я пропустил некоторые важные вещи?

#include<iostream>
#include<string>
using namespace std;
class Link_list {
private:
    string name;
    Link_list *next_node;
public:
    void add_item(Link_list *);
    void add_item();
    friend void show(Link_list *sptr)
    {
        while(sptr) {
        cout << sptr->name << endl;
        sptr = sptr->next_node;
        }
     }
};

void Link_list::add_item()
{
    cin >> name;
    next_node = NULL;
}
void Link_list::add_item(Link_list *pptr)
{
    cin >> name;
    next_node = NULL;
     pptr->next_node = this;
 }


int main()
{
    Link_list *str_ptr = NULL;
    Link_list *curr_ptr = str_ptr;
    Link_list *prev_ptr;
    char ch = 'y';

    str_ptr = new(Link_list);
    str_ptr->add_item();
    curr_ptr = str_ptr;
    do
    {
        prev_ptr = curr_ptr;
        curr_ptr = new(Link_list);
        curr_ptr->add_item(prev_ptr);
        cout <<"Do you want to add the item" << endl;
        cin >> ch;
    }while(ch != 'n');
    show(str_ptr);
  }


4751
9
задан 2 марта 2011 в 07:03 Источник Поделиться
Комментарии
5 ответов

Вы не можете удалять элементы из него.

Нет функции поиска.

Все, что вы можете сделать, это добавить материал на его, а затем его содержимое транслироваться в stdout.

Он может только держать струны.

Блокировки для ввода пользователя в списке класса сама по себе кажется странным; обычно вы бы просить ввода в области вызова и затем передать полученный новую строку, чтобы добавить функцию-член.

7
ответ дан 2 марта 2011 в 07:03 Источник Поделиться

Я просто буду комментировать с этого высокого уровня, поскольку другие называют другие детали...

Называя объект link_list вводит в заблуждение, поскольку на самом деле не список, а просто узел в полный список. Вы могли бы хотеть думать о рефакторинге так, что у вас есть реальный список, который list_nodeс внутренним. Ваши вставки не должны подвергать эти узлы напрямую, но есть возможность просто взять данные, которые они хотят вставить. Нет никакой необходимости подвергать поведение списка пользователю.

5
ответ дан 2 марта 2011 в 08:03 Источник Поделиться

Вы должны использовать std::список...
Но если вы только хотите узнать, как связанный список работ, я предлагаю, используя шаблоны классов и функций для сделать код как можно более универсальный...

Это не очень сложно:

template <typename T> 

class List
{
public:
//Example declare the "get" and return a T element
//where T is a generic element or data type
T get_front() const;
private:
T data;
List<T> *firt_Ptr;
}

В основной файл:

int main()
{
...
List< int > listofints;
List< double > listofdoubles;
...
}

4
ответ дан 2 марта 2011 в 07:03 Источник Поделиться

В функции main() управление ресурсами. Так как программа управляет ресурсами( т. е., используя новый оператор ), он также должен вернуть ресурсы с помощью удалить оператора. Итак, вы должны начать освобождение ресурсов от конечной точки до завершения программы. Еще утечки памяти преобладать.

4
ответ дан 2 марта 2011 в 08:03 Источник Поделиться

Добавив к Tomalak ответ :

=> деструктор

Вы создаете свой связанный список, но как вы планируете удалить его ?

=> Вы можете итерировать только в одну сторону

Когда у вас есть 1000 элементов и вы хотите, чтобы последние...

1
ответ дан 2 марта 2011 в 08:03 Источник Поделиться