【发布时间】:2023-11-10 05:12:01
【问题描述】:
我正在尝试实现一个链接堆栈来评估修复后表达式,但是我不断遇到分段错误,不知道如何修复它。我是 C 编程的新手,这与 OOD 不同,所以欢迎任何建议。谢谢,请原谅我的 cmets 和间距。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
struct node *top = NULL;
void push(int data);
int pop();
int evaluatePostfix(char* exp);
void main() {
char postfixExp[256];
printf("What is your Postfix Expression? : \n");
fgets(postfixExp, sizeof(postfixExp), stdin);
printf("%d\n", evaluatePostfix(postfixExp));
}
//done
void push(int data) {
struct node *newNode;
newNode = (struct node*)malloc(sizeof(struct node));;
(*newNode).data = data;
(*newNode).next = NULL;
//use isEmpty if can
if (top != NULL) {
(*newNode).next = top;
}
top = newNode;
}
//done
int pop() {
struct node *temp = top;
int *remove;
//use isEmpty if can
if (top != NULL) {
*remove = (*top).data;
top = (*top).next;
free(temp);
}
return *remove;
}
int evaluatePostfix(char* exp) {
struct node *top = NULL;
for (int i = 0; i < sizeof(exp); i++) {
if (isdigit(exp[i])) {
push(exp[i]);
} else {
int val1 = pop();
int val2 = pop();
switch(exp[i]) {
case '+':
push(val2+val1);
break;
case '-':
push(val2-val1);
break;
case '*':
push(val2*val1);
break;
case '/':
push(val2/val1);
break;
}
}
}
return pop();
}
【问题讨论】:
-
(*newNode).data是用newNode->data加了语法糖的 -
*remove = (*top).data;BZZZ!取消引用无效指针 (remove)。 -
应该是
int result=0;result = top->data;和return result;
标签: c linked-list stack postfix-notation