Пытаюсь создать структуру Stack с полями value и next. value - значение текущего узла, а next - следующий узел. Проблема в том, что требуется создавать указатель на next, то есть писать Stack* next, а он считает это как массив структур, и когда я пытаюсь добавить новый узел в Add, то пишет "не существует подходящего конструктора для преобразования из Stack* в Stack". Я понимаю, что у меня в аргументах Add() написано просто Stack, но если изменить на Stack*, то непонятно как правильно обращаться к узлу, если это уже массив структур, а не одна. Хотелось бы сделать так, чтобы next было таким же узлом, как и начальный узел (то есть без первого пустого элемента, который будет содержать только ссылку). Подскажите пожалуйста, что мне надо исправить.
int Count = 0;
struct Stack
struct Stack
{
int value = INT_MAX;
Stack* next; //Считает это массивом, в C# можно просто Stack next, но, увы, надо на C++
};
void Add(Stack s, int num) //Если тут написать Stack*, то как правильно обращаться к s (s[0] или что?)
{
if (s.value != INT_MAX)
{
return Add(s.next, num); //Ошибка в s.next
}
else
{
s.value = num;
Count++;
}
}
C/C++
Как правильно запихнуть в поле структуры саму структуру? C++
В поле структуры не содержится самой структуры, поэтому пихать ее туда не нужно.
Функция Add должна :
1 - создать новую структуру с помощью оператора new, с полученным значением и со вторым полем равным нулю.
2 - пройти до конца списка, и в последней структуре во второе поле записать адрес этой новосозданной.
Функция Add должна :
1 - создать новую структуру с помощью оператора new, с полученным значением и со вторым полем равным нулю.
2 - пройти до конца списка, и в последней структуре во второе поле записать адрес этой новосозданной.
#include
struct Stack //Обычно узел называют Node
//А Stack должен быть управляющей структурой или классом
//которая хранит указатель на голову и на хвост (опционально)
//а так же размер. В случае C++ этот класс хранит и все методы
//(функции) типа Add, Erase, а при удалении структуры отчищает память
{
int value;
Stack* next;
};
void Add(Stack*& stack, int value) //указатель принимается по ссылке
{
Stack* head = stack; //создаем указатель на голову
Stack* tmp = new Stack; //создаем указатель на новый элемент, который будет добавлен к списку
tmp->value = value; //записываем в него переданное значение
tmp->next = nullptr; //указываем что это последний элемент
if (head) //если список не пустой
{
while (head->next) head = head->next; //находим последний элемент переданного списка
head->next = tmp; //подсоединяем его к хвосту имеющегося списка
}
else
stack = tmp; //а если пустой то новый элемент и будет его головой
//указатель был принят по ссылке чтобы функция Add могла добавить элемент в пустой список
//т.е. обновить указатель s из main.
}
int Size(Stack* head) //вычислятель размера
{
int i = 0;
while (head && ++i) head = head->next; //считаем количество узлов
return i; //возвращаем количество
}
void Print(Stack* stack) //Печататель
{
//пока указатель не равен нулю - печатаем содержимое структуры на которое он указывает
//и переходим к следующему указателю
while (stack) { std::cout value next; }
}
int main()
{
Stack* s = nullptr;
std::cout
void Add(Stack* s, int num)
{
if (s->value != INT_MAX)
{
return Add(s->next, num);
}
else
{
s->value = num;
Count++;
}
}
Похожие вопросы
- Функция заполняющая структуру, C++
- Сложности с массивами структур c++
- Шаблон структур C++
- Структуры и массивы структур C++
- Программа на c++ не работает. Написать структуру и прочее. Подскажите, пожалуйста, что я делаю не так.
- [C++] Помогите написать задачу на структуры!
- C/C++ Как устроена память, выделенная для структуры с указателем *next?
- Здравствуйте, структура и объединение в c++
- Как решить ошибку C2079 использует не имеющую определения структуру class C++
- Создать структуры в с++
int main()
{
Stack s;
Add(s, 1);
Add(s, 8);
Add(s, 4);
}