Я пытаюсь реализовать связанный список в виде стека, поэтому я создал для него специальный класс в C ++. Ниже приведено то, что я использовал для помещения переменной * temp1 в стек. Моя текущая проблема - когда я помещаю sh в стек, оно выдает исключение.
cityNode temp1(dest, cost + dataVector[index].cost, time + dataVector[index].time);
stack->pushCity(temp1);
Это узел.
class cityNode {
public:
string name; // City name
double totalCost; // Total cost of the flight
int totalTime; // Total time of the flight
cityNode* destCity; // Pointer to the next destionation city
cityNode(string cityName, double cityCost, int cityTime) {
name = cityName;
totalCost = cityCost;
totalTime = cityTime;
destCity = nullptr;
}
};
Ниже приведен мой код. В настоящее время возникает исключение, когда оно достигает части кода newCity->totalCost = cityNode.totalCost;
.
class CityStack {
public:
class cityNode* top = NULL;
void pushCity(cityNode cityNode) {
class cityNode* newCity = (class cityNode*) malloc(sizeof(class cityNode));
newCity->name = cityNode.name;
newCity->totalCost = cityNode.totalCost; // Exception Thrown
newCity->totalTime = cityNode.totalTime;
newCity->destCity = top;
top = newCity;
}
void popCity() {
if (top == NULL) {
cout << "Stack Underflow" << endl;
}
else {
top = top->destCity;
}
}
bool emptyCity() {
if (top == NULL)
return true;
else
return false;
}
void reverseCity() {
cityNode *prev, *cur, *succ;
cur = prev = top;
//cur = cur->destCity;
while (cur != NULL) {
cityNode *temp = cur->destCity;
delete cur;
cur = temp;
}
//prev->destCity = NULL;
while (prev != NULL) {
cityNode *temp = prev->destCity;
delete prev;
prev = temp;
}
while (cur != NULL) {
succ = cur->destCity;
cur->destCity = prev;
prev = cur;
cur = succ;
}
top = prev;
}
void displayCities() {
cityNode *stack = top;
while (stack != NULL) {
cout << stack->name << " ";
stack = stack->destCity;
}
cout << endl;
}
cityNode* getCityNode() {
return top;
}
};