• 全部
...

C语言编译error:expected ')' before '*' token

fs_te_ming 2012-10-20 12:46:39

  1. /*************************************************************
  2. *
  3. * operate BitTree
  4. *
  5. ************************************************************/
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>

  9. typedef struct BitNode
  10. {
  11. char ele;
  12. struct BitNode *lchild;
  13. struct BitNode *rchild;
  14. }*BitTree;

  15. typedef struct stack
  16. {
  17. BitTree BTP;
  18. struct stack *next;
  19. }*stackP;

  20. int i=0;
  21. //according to picture 6.8
  22. char bitTreeArr[]={'A','B','C','#','#','D','E','#','G','#','#','F','#','#','#'};

  23. void FinOrderTraverse(BitTree p)
  24. {
  25. if(p!=NULL)
  26. {
  27. FinOrderTraverse(p->lchild);
  28. FinOrderTraverse(p->rchild);
  29. printf("%c ",p->ele);
  30. }
  31. }

  32. ->void pushInStack(stackp *head,BitTree p)
  33. {
  34. stackp sp;
  35. if((sp=malloc(sizeof(struct stack)))==NULL)
  36. {
  37. printf("overflow,malloc failed in pushInStack.\n");
  38. exit(1);
  39. }
  40. if(*head==NULL)
  41. {
  42. *head=sp;
  43. }
  44. else
  45. {
  46. sp->next=*head;
  47. *head=sp;
  48. }
  49. }

  50. ->void popStack(stackp *head,BitTree *p)
  51. {
  52. stackp sp;
  53. sp=*head;
  54. *head=sp->next;
  55. *p=sp->BTP;
  56. free(sp);
  57. }

  58. void MidInorderTraverse(BitTree p)
  59. {
  60. stackP head=NULL;
  61. while(p!=NULL || head!=NULL)
  62. {
  63. if(p)
  64. {
  65. pushInStack(&head,p);
  66. p=p->lchild;
  67. }
  68. else
  69. {
  70. popStack(&head,&p);
  71. printf("%c ",p->ele);
  72. p=p->rchild;
  73. }
  74. }
  75. }

  76. void MidOrderTraverse(BitTree p)
  77. {
  78. if(p!=NULL)
  79. {
  80. MidOrderTraverse(p->lchild);
  81. printf("%c ",p->ele);
  82. MidOrderTraverse(p->rchild);
  83. }
  84. }

  85. void PreOrderTraverse(BitTree p)
  86. {
  87. if(p!=NULL)
  88. {
  89. printf("%c ",p->ele);
  90. PreOrderTraverse(p->lchild);
  91. PreOrderTraverse(p->rchild);
  92. }
  93. }

  94. void createBitTree(BitTree *BT)
  95. {
  96. if(i<strlen(bitTreeArr))
  97. {
  98. if(bitTreeArr[i]=='#')
  99. {
  100. *BT=NULL;
  101. i++;
  102. }
  103. else
  104. {
  105. if(((*BT)=malloc(sizeof(struct BitNode)))==NULL)
  106. {
  107. printf("overflow,malloc failed in createBitTree.\n");
  108. exit(1);
  109. }
  110. (*BT)->ele=bitTreeArr[i];
  111. i++;
  112. createBitTree(&(*BT)->lchild);
  113. createBitTree(&(*BT)->rchild);
  114. }
  115. }

  116. }

  117. int main()
  118. {
  119. void createBitTree(BitTree *p);
  120. void PreOrderTraverse(BitTree p);
  121. void MidOrderTraverse(BitTree p);
  122. void FinOrderTraverse(BitTree p);
  123. ->void pushInStack(stackp *head,BitTree p);
  124. ->void popStack(stackp *head,BitTree *p);
  125. void MidInorderTraverse(BitTree p);
  126. BitTree head;
  127. createBitTree(&head); //create BitTree

  128. printf("BitTree nodes print in preOrder are:");
  129. PreOrderTraverse(head); //preOrder traverse BitTree
  130. printf("\n");

  131. printf("BitTree nodes print in midOrder are:");
  132. MidOrderTraverse(head); //midOrder traverse BitTree
  133. printf("\n");

  134. printf("BitTree nodes print in finOrder are:");
  135. FinOrderTraverse(head); //finOrder traverse BitTree
  136. printf("\n");

  137. printf("BitTree nodes print in midInOrder are:");
  138. MidInorderTraverse(head);
  139. printf("\n");
  140. }


编译时出错
error:expected ')' before '*' token

出错行已在上面标示
...全文
给本帖投票
4711 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fs_te_ming 2012-10-21
  • 打赏
  • 举报
回复
感谢#4楼的兄弟。昨天感冒严重无事写的,写完自己查就很难查出了。。。
附上修改编译可执行后的代码,这是数据结构二叉树的相关算法实现

/*************************************************************
*
* operate BitTree
*
************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct BitNode
{
char ele;
struct BitNode *lchild;
struct BitNode *rchild;
}*BitTree;

typedef struct stack
{
BitTree BTP;
struct stack *next;
}*stackp;

int i=0;
//according to picture 6.8
char bitTreeArr[]={'A','B','C','#','#','D','E','#','G','#','#','F','#','#','#'};

void FinOrderTraverse(BitTree p)
{
if(p!=NULL)
{
FinOrderTraverse(p->lchild);
FinOrderTraverse(p->rchild);
printf("%c ",p->ele);
}
}

void pushInStack(stackp *head,BitTree p)
{
stackp sp;
if((sp=malloc(sizeof(struct stack)))==NULL)
{
printf("overflow,malloc failed in pushInStack.\n");
exit(1);
}
sp->BTP=p;
if((*head)->BTP==NULL)
{
//printf("enter here\n");
*head=sp;
(*head)->next=NULL;
}
else
{
sp->next=*head;
*head=sp;
}
}

void popStack(stackp *head,BitTree *p)
{
stackp sp;
sp=*head;
*head=sp->next;
*p=sp->BTP;
free(sp);
}

void MidInorderTraverse(BitTree p)
{
stackp head;
if((head=malloc(sizeof(struct stack)))==NULL)
{
printf("overflow,malloc failed in createBitTree.\n");
exit(1);
}
head->BTP=NULL;
while(p!=NULL || head!=NULL)
{
if(p)
{
pushInStack(&head,p);
p=p->lchild;
}
else
{
popStack(&head,&p);
printf("%c ",p->ele);
p=p->rchild;
}
}
}

void MidOrderTraverse(BitTree p)
{
if(p!=NULL)
{
MidOrderTraverse(p->lchild);
printf("%c ",p->ele);
MidOrderTraverse(p->rchild);
}
}

void PreOrderTraverse(BitTree p)
{
if(p!=NULL)
{
printf("%c ",p->ele);
PreOrderTraverse(p->lchild);
PreOrderTraverse(p->rchild);
}
}

void createBitTree(BitTree *BT)
{
if(i<strlen(bitTreeArr))
{
if(bitTreeArr[i]=='#')
{
*BT=NULL;
i++;
}
else
{
if(((*BT)=malloc(sizeof(struct BitNode)))==NULL)
{
printf("overflow,malloc failed in createBitTree.\n");
exit(1);
}
(*BT)->ele=bitTreeArr[i];
i++;
createBitTree(&(*BT)->lchild);
createBitTree(&(*BT)->rchild);
}
}

}

int main()
{
void createBitTree(BitTree *p);
void PreOrderTraverse(BitTree p);
void MidOrderTraverse(BitTree p);
void FinOrderTraverse(BitTree p);
void pushInStack(stackp *head,BitTree p);
void popStack(stackp *head,BitTree *p);
void MidInorderTraverse(BitTree p);
BitTree head;
createBitTree(&head); //create BitTree

printf("BitTree nodes print in preOrder are:");
PreOrderTraverse(head); //preOrder traverse BitTree
printf("\n");

printf("BitTree nodes print in midOrder are:");
MidOrderTraverse(head); //midOrder traverse BitTree
printf("\n");

printf("BitTree nodes print in finOrder are:");
FinOrderTraverse(head); //finOrder traverse BitTree
printf("\n");

printf("BitTree nodes print in midInOrder are:");
MidInorderTraverse(head);
printf("\n");
}
fs_te_ming 2012-10-20
  • 打赏
  • 举报
回复
出错的地方就在
pushInStack()
popStack()
也就是前面加了->的地方
zzandyc 2012-10-20
  • 打赏
  • 举报
回复
你定义的类型是stackP,而pushInStack和popStack参数是stackp。
fs_te_ming 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

应该是类型问题
void popStack(stackp *head,BitTree *p)
改为
void popStack(stackp *head,BitTree p) ?
[/Quote]

这里应该没什么问题吧,我用*p是希望结果能被保存回来(当然可以用return替代),不过编译错误还是有
delphiwcdj 2012-10-20
  • 打赏
  • 举报
回复
应该是类型问题
void popStack(stackp *head,BitTree *p)
改为
void popStack(stackp *head,BitTree p) ?

70,011

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部