鱼C论坛

 找回密码
 立即注册
查看: 4050|回复: 1

数据结构 顺序栈使用出错,求大神

[复制链接]
发表于 2013-11-1 14:15:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #define STACKINITSIZE 50
  5. typedef struct
  6. {
  7. char * base;
  8. char * top;
  9. int stacksize;
  10. }sqstack;
  11. void Clearstack(sqstack *s)
  12. {
  13. s->top=s->base;
  14. }

  15. void InitStack(sqstack *s)
  16. {
  17. s->base=(char *)malloc(STACKINITSIZE*sizeof(char));
  18. if(!s->base)
  19. printf("adasa");
  20. s->top=s->base;
  21. }

  22. void Push(sqstack * s,char a)
  23. {
  24. *s->top++=a;
  25. }
  26. void Pop(sqstack *s,char * a)
  27. {
  28. *a=*--s->top;
  29. }
  30. int youxianji(char a)
  31. {
  32. if(a=='^')
  33. return 8;
  34. if(a==')')
  35. return 9;
  36. if(a=='*'||a=='/')
  37. return 7;
  38. if(a=='+'||a=='-')
  39. return 5;

  40. if(a=='(');
  41. return 3;
  42. if(a=='#')
  43. return 1;
  44. }
  45. void function(char *a,sqstack * s,int h)
  46. {

  47. char lin;//临时存放出战数据
  48. *s->top='#';
  49. s->top++; //处理前将‘#’入栈
  50. int i,b;

  51. for(i=0;i<h;i++)
  52. {
  53. b=i;
  54. if(a[b]!='+'&&a[b]!='-'&&a[b]!='*'&&a[b]!='/'&&a[b]!='('&&a[b]!=')'&&a[b]!='#'&&a[b]!='^')
  55. {printf("%c",a[b]);continue;}
  56. if(a[b]=='(')
  57. { Push(s,a[b]);continue;}
  58. if(a[b]=='#'&&*(s->top-1)!='#')
  59. {

  60. do
  61. {Pop(s,&lin);
  62. printf("%c",lin);

  63. }
  64. while(*(s->top-1)!='#');
  65. break;
  66. }
  67. if(a[b]==')')
  68. {
  69. do
  70. {Pop(s,&lin);
  71. printf("%c",lin);
  72. }
  73. while(*(s->top-1)!='(');
  74. Pop(s,&lin);
  75. continue;
  76. }
  77. /*asdadsd*/ if(youxianji(a[b])>youxianji(*(s->top-1))||a[b]=='#')//若优先级大
  78. Push(s,a[b]);
  79. else
  80. { do
  81. {Pop(s,&lin);
  82. printf("%c",lin);

  83. }
  84. while(youxianji(*(s->top-1))>=youxianji(a[b])) ;
  85. Push(s,a[b]);
  86. }
  87. }


  88. }

  89. int main()
  90. {

  91. char date[20][STACKINITSIZE];//为什么改大后 无效内存引用
  92. sqstack S1;
  93. InitStack(&S1);


  94. int a,N,i;
  95. scanf("%d",&N);

  96. getchar();
  97. for(i=0;i<N;i++)
  98. {

  99. scanf("%s",date[i]);
  100. a=strlen(date[i]);
  101. function(date[i],&S1,a);

  102. printf("\n");
  103. Clearstack(&S1);



  104. }
  105. for(i=0;i<N;i++)
  106. {
  107. ;
  108. }


  109. system("pause");

  110. return(0);
  111. }
  112. 从中缀向后缀转换表达式,了简化编程实现,假定变量名均为单个字母,运算符只有+,-,*,/ 和^(指数运算),可以处理圆括号(),并假定输入的算术表达式正确。
  113. 要求:使用栈数据结构实现 ,输入的中缀表达式以#号结束  
  114. 自己测试了多组数据均无错误,可是交上去测试时9例中出现三例内存引用无效,四例正确,这是怎么回事

复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-3 12:56:51 | 显示全部楼层
继续求助,没人看吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-11 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表