我在java中实际上更舒服,但我也想学习C ++,所以我开始编写过去几天的编码,然后我编写了这个堆栈的代码,这让我很难过。尝试在最后一个节点打印堆栈时,它会出现分段错误。
请指导我出错的地方以及此代码中可以更好地完成的任何错误。
堆栈类的代码:
#include <iostream>
#include "node.h"
using namespace std;
class Stack{
public:
Node *topNodePtr;
Stack(){
topNodePtr = NULL;
}
void push(string data){
Node *tempNodePtr = new Node(data);
if(this->topNodePtr == NULL){
topNodePtr = tempNodePtr;
}
else{
tempNodePtr->next = topNodePtr;
topNodePtr = tempNodePtr;
}
}
void print(){
if(this->topNodePtr == NULL){
cout<<"The stack is empty right now select push to add new Nodes to the stack\n";
}
else{
Node *tempNodePtr;
tempNodePtr = this->topNodePtr;
cout << "NULL" <<endl;
while(tempNodePtr != NULL){
cout << "^" <<endl;
cout << "|" <<endl;
cout << tempNodePtr->data<<endl;
tempNodePtr = tempNodePtr->next;
}
}
}
};
int main(){
cout << "Menu\n";
cout << "1. Push\n";
cout << "2. Print\n";
cout << "-1. Exit\n";
int n = -1;
cin >> n;
cout << "Select n : ";
Stack *s;
do{
if(n == 1){
string str;
cout << "Enter data : ";
cin >> str;
s->push(str);
}
else if(n == 2){
s->print();
}
else{
cout << "Select smthng from the list\n";
}
cout << "Select n : ";
cin >> n;
}while(n != -1);
return 0;
}
节点类的代码:
#include <iostream>
#include <string>
#include "node.h"
using namespace std;
Node::Node(string data){
this->data = data;
this->next = NULL;
}
node.h的代码:
#ifndef NODE_H
#define NODE_H
#include <string>
class Node{
public:
std::string data;
Node *next;
Node(std::string data);
};
#endif
答案 0 :(得分:2)
这一行:
Stack *s;
应该是:
Stack *s = new Stack;
或者你可以这样做:
Stack s;
然后将main()
中的来电更改为:
s.push(str);
和
s.print();
答案 1 :(得分:0)
这是有问题的代码。
Node::Node(string data){
this->data = data;
this->next = NULL;
}
函数data
和this->data
内部相同。将其更改为:
Node::Node(string d){
this->data = d;
this->next = NULL;
}
或更好:
Node::Node(string d): data(d), next(NULL) {}