#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. Извините, я новичок здесь. В следующий раз буду осторожен.