Эта программа должна принимать постфиксное арифметическое выражение, а затем компилирует значения этого выражения. Каждый раз, когда целое число считывается, его собираются вставлять в стек. В противном случае два целых числа будут popped if +, -, *.Бесконечный цикл при вызове функции печати стека
class Stack {
Node *head;
public:
Stack() {
head = NULL;
};
void push(int data);
int pop();
bool isEmpty();
void print();
};
void Stack::push(int data)
{
Node * temp = new Node(data);
temp->next = head;
head = temp;
delete temp;
}
int Stack::pop()
{
int x = head->data;
head = head->next;
return x;
}
bool Stack::isEmpty(){
return head == NULL;
}
void Stack::print(){
Node * temp = head;
while (temp != NULL){
cout << temp->data << " ";
temp = temp->next;
}
delete temp;
}
int main() {
Stack st;
char exp [] = "23+", c;
int i, a;
for (i = 0; exp[i] != '\0'; i++){
c = exp[i];
if (c == '+'&&!st.isEmpty()){
a = st.pop() + st.pop();
st.push(a);
}
else if (c == '-'&&!st.isEmpty()){
a = st.pop() - st.pop();
st.push(a);
}
else if (c == '/'&&!st.isEmpty()){
a = st.pop()/st.pop();
st.push(a);
}
else if (c == '*'&&!st.isEmpty()){
a = st.pop() * st.pop();
st.push(a);
}
else if (c == '0')
st.push(0);
else if (c == '1')
st.push(1);
else if (c == '2')
st.push(2);
else if (c == '3')
st.push(3);
else if (c == '4')
st.push(4);
else if (c == '5')
st.push(5);
else if (c == '6')
st.push(6);
else if (c == '7')
st.push(7);
else if (c == '8')
st.push(8);
else if (c == '9')
st.push(9);
cout << c << endl;
st.print();
}
cin >> a;
return 0;
}
Когда я вызываю функцию печати в основном, я получаю бесконечный цикл как выход .. Я попытался ищу вещь, которая вызывает бесконечный цикл, но я не мог найти его.
Почему вы 'удалить темп,' когда он равен NULL в Stack :: print' метод '? – SHR
Лучший вопрос: почему вы «удаляете temp;' в вашей ** 'Stack :: push' ** функции ???? Этого не должно быть вообще. – WhozCraig
В отличие от Java, C++ не имеет сборщика мусора. Если я не удалю его, я выйду из памяти .. delete temp; находится вне цикла. Я не думаю, что он вызывает бесконечный цикл. – Raghad