任何人都可以帮助我解决这个小问题吗? 我正在尝试使用c ++中的链接列表来实现堆栈。 当我输入end时,程序应该显示堆栈中的元素,但是程序只是输出我输入的最后一个元素,每当我输入pop时,程序都会忽略我的第一个压入元素。 程序应通过来自绞合输入的命令进行推送和弹出,例如(推送2,推送1,弹出,窥视或结束) 任何帮助将不胜感激。
#include <iostream>
#include <string>
#include <limits>
using namespace std;
class Stack
{
private:
struct node
{
int data;
node* next;
};
public:
node* top;
Stack()
{
top = NULL;
}
void push(int n)
{
node* temp = new node;
temp->data = n;
temp->next = NULL;
top = temp;
}
int pop()
{
node* temp = top;
top = top->next;
return temp->data;
}
int peek()
{
return top-> data;
}
bool isEmpty()
{
return top == NULL;
}
};
int main()
{
Stack stack;
std::string command;
while (true)
{
std::cout << "stack>";
std::cin >> command;
try
{
if (command == "pop")
{
if (stack.isEmpty())
{
throw std::runtime_error("error: stack is empty");
}
std::cout << stack.pop() << std::endl;
}
else if (command == "push")
{
int n;
if (!(std::cin >> n))
{
throw std::runtime_error("error: not a number");
}
stack.push(n);
}
else if (command == "peek")
{
if (stack.isEmpty())
{
throw std::runtime_error("error: stack is empty");
}
std::cout << stack.peek() << std::endl;
}
else if (command == "end")
{
while (!(stack.isEmpty()))
{
std::cout << stack.pop() << std::endl;
}
return 0;
}
else
{
throw std::runtime_error("error: invalid command");
}
}
catch (std::runtime_error& e)
{
std::cin.clear();
std::cin.ignore(numeric_limits<streamsize>::max(), '\n');
std::cerr << std::endl << e.what() << std::endl;
}
}
return 0;
}
答案 0 :(得分:1)
您的问题出在fetch(connectHelper,{
method: 'POST',
body: authCode,
}).then(res => {
console.log(res.json())
})
push
应该是:
void push(int n)
{
node* temp = new node;
temp->data = n;
temp->next = NULL;
top = temp; // At this point, you have forgotten about the old value of top
}
在 void push(int n)
{
node* temp = new node;
temp->data = n;
temp->next = top; // Link rest of stack in
top = temp;
}
中也有内存泄漏,并且在pop
中需要一个析构函数,一个拷贝构造函数和一个拷贝赋值运算符(如果不这样做,则可以删除最后两个)想写出来。)