Отображение элементов из связанного списка

#c #tree #linked-list

#c #дерево #связанный список

Вопрос:

Я работаю над программой, в которой пользователь вводит случайные числа, программа берет эти числа и помещает их в дерево, а затем в связанный список. Затем пользователю предлагается ввести две границы, и программа отображает все числа между max и min.

Например.

 Enter an integer or 0 to quit: 2
Enter an integer or 0 to quit: 3
Enter an integer or 0 to quit: 4
Enter an integer or 0 to quit: 5
Enter an integer or 0 to quit: 6
Enter an integer or 0 to quit: 0
The values are:
2 3 4 5 6
Enter the minimum:
2
Enter the maximum:
6
The list is: 0x3f0d58

Process returned 0 (0x0)   execution time : 6.464 s
Press any key to continue.
  

Проблема в том, что моя программа не выводит список, вместо этого она выводит 0x3f0d58.

Функция, которая выполняет вывод,

 void createlist()  //creates linked list
{
    linkednode *current;
    linkednode *begin;
    current=new linkednode;
    current->data=data[0];
    current->next=NULL;
    begin=current;
    for (int count=1; count<(int)data.size(); count  )
    {
        current=appendlist(current,data[count]);
    }
    cout<<"The list is: "<<begin<<endl;
}
  

Что я должен изменить, чтобы вывести фактические числа?

Комментарии:

1. Во-первых, вы могли бы изменить свой вопрос, чтобы сделать код понятным

Ответ №1:

Ваш код выводит begin значение. И begin является указателем на первый узел. cout не знает, что это какой-то конкретный указатель, для него нет разницы, указывает ли он на структуру A или структуру B. И даже если бы он рассмотрел какую-либо разницу, он не знает, какие элементы и как следует печатать. Поэтому вам нужно выводить значения вручную так же, как вы их добавляете. Также лучше сделать данные параметром функции — это будет выглядеть более согласованно, и вы избежите каких-либо глобальных данных.

Ответ №2:

Это совсем не то, как вы указываете!

пожалуйста, взгляните на:Указатели для описания, более специализированные для C

  • Указатель всегда должен быть того же типа, что и переменная, на которую он указывает.
  • Объявление переменной-указателя не создает тип переменной, на которую она указывает. Это создает переменную-указатель.
  • Хотя указатели объявляются со звездочкой, они не всегда используются со звездочкой. Звездочка — это унарный оператор *. int *число;
  • Указатели должны быть инициализированы, прежде чем их можно будет использовать. Инициализируйте указатель, присвоив его переменной; переменная должна иметь тот же тип, что и указатель.
  • Чтобы назначить указатель на переменную, используйте амперсанд с именем переменной.

    m_address = amp;память;

  • Чтобы назначить указатель на массив, не используйте амперсанд

    s_address= строка;

    а НЕ s_address= amp;string; (это тоже работает, но не выполняется обычным способом)

  • Однако, чтобы назначить указатель на «элемент» массива, используйте амперсанд:

    элемент = amp;строка[2];

  • Если вы используете указатели со структурой, вам нужно будет использовать нотацию структуры указателя, ->

    Без звездочки инициализированный указатель содержит адрес памяти. Звездочкой инициализированный указатель ссылается на значение, хранящееся по его адресу.Вот где вы ошиблись.

Комментарии:

1. Это совсем не то, как вы используете ответы! Пожалуйста, взгляните на: meta.stackexchange.com/questions/8231 /…

2. Извините, я новичок здесь. В следующий раз буду осторожен.