fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <stdlib.h>
  5.  
  6. struct node {
  7. int data;
  8. struct node *next;
  9. };
  10. struct node *top = NULL;
  11.  
  12.  
  13. void push(int data);
  14. int pop();
  15. int evaluatePostfix(char* exp);
  16.  
  17. void main() {
  18. char postfixExp[256];
  19.  
  20. printf("What is your Postfix Expression? : \n");
  21.  
  22. fgets(postfixExp, sizeof(postfixExp), stdin);
  23. // printf("size of exp is %ld",strlen(postfixExp));
  24. printf("%d\n", evaluatePostfix(postfixExp));
  25. }
  26.  
  27. //done
  28. void push(int data) {
  29. // data=atoi(data);
  30. struct node *newNode;
  31. newNode = (struct node*)malloc(sizeof(struct node));;
  32. (*newNode).data = data;
  33. (*newNode).next = NULL;
  34. //use isEmpty if can
  35. if (top != NULL) {
  36. (*newNode).next = top;
  37. }
  38. top = newNode;
  39. }
  40. //done
  41. int pop() {
  42. struct node *temp = top;
  43. int removed;
  44. //use isEmpty if can
  45. if (top != NULL) {
  46. removed = (*top).data;
  47. top = (*top).next;
  48. free(temp);
  49. }
  50. return removed;
  51.  
  52. }
  53.  
  54. int evaluatePostfix(char* exp) {
  55. struct node *top = NULL;
  56. printf("sizeof exp is %ld",strlen(exp));
  57. for (int i = 0; i < strlen(exp)-1; i++) {
  58. if (isdigit(exp[i])) {
  59. push(exp[i]-48);
  60. } else {
  61. int val1 = pop();
  62. int val2 = pop();
  63. printf("val1%d\n",val1);
  64. printf("val2%d\n",val2);
  65. switch(exp[i]) {
  66. case '+':
  67. push(val2+val1);
  68. break;
  69. case '-':
  70. push(val2-val1);
  71. break;
  72. case '*':
  73. push(val2*val1);
  74. break;
  75. case '/':
  76. push(val2/val1);
  77. break;
  78. }
  79. }
  80. }
  81. return pop();
  82.  
  83. }
  84.  
Runtime error #stdin #stdout 0s 2296KB
stdin
Standard input is empty
stdout
Standard output is empty