stack.c
上传用户:bjtelijie
上传日期:2010-01-01
资源大小:87k
文件大小:1k
源码类别:

数学计算

开发平台:

Visual C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define Max 100
  4. int *p;
  5. int *tos;
  6. int *bos;
  7. /*添加一个数据放到堆栈对顶端*/
  8. void push(int i)
  9. {
  10. if(p > bos)
  11. {
  12. printf("堆栈以满n");
  13. return;
  14. }
  15. *p = i;
  16. p++;
  17. }
  18. /*丛堆栈顶端取出一个数据*/
  19. int pop(void)
  20. {
  21. p--;
  22. if(p < tos)
  23. {
  24. printf("堆栈下溢n");
  25. return 0;
  26. }
  27. return *p;
  28. }
  29. void main(void)
  30. {
  31. int a,b;
  32. char s[80];
  33. p = (int *)malloc(Max*sizeof(int));
  34. if(!p)
  35. {
  36. printf("分配内存失败");
  37. exit(1);
  38. }
  39. tos = p;
  40. bos = p + Max -1;
  41. printf("请输入第一个数据:n");
  42. scanf("%d",&a);
  43. push(a);
  44. printf("请输入第二个数据:n");
  45. scanf("%d",&b);
  46. push(b);
  47. printf("请输入操作符:n");
  48. scanf("%s",s);
  49. switch (*s)
  50. {
  51. case '+':
  52. a = pop();
  53. b = pop();
  54. printf("结果是a+b = %dn",(a+b));
  55. push(a+b);
  56. break;
  57. case '-':
  58. a = pop();
  59. b = pop();
  60. printf("结果是a-b = %dn",(a-b));
  61. push(a-b);
  62. break;
  63. case '*':
  64. a = pop();
  65. b = pop();
  66. printf("结果是a*b = %dn",(a*b));
  67. push(a*b);
  68. break;
  69. case '/':
  70. a = pop();
  71. b = pop();
  72. printf("结果是a/b = %dn",(a/b));
  73. push(a/b);
  74. break;
  75. default:
  76. printf("请输入正确操作符n");
  77. }
  78. }