MHWDarkGrey
MHWDarkGrey
2017-11-25 10:06

求大佬解答,程序检查不出错误但运行不出来

  • sizeof

#include
#include /* malloc()等 /
#include
#include
#include /
exit() */

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 /
typedef int Boolean; /
Boolean是布尔类型,其值是TRUE或FALSE /
typedef int SELemType;
typedef int Status; /
定义栈顶元素类型,此句要在c3-1.h的前面 */

typedef struct Node
{
SELemType data;
struct Node *next;
}Node,*LinkStackPtr;

typedef struct LinkStack
{
LinkStackPtr top;
int count;/*记录链栈的元素个数*/

}LinkStack; /* 链栈 */

/* 链栈的基本操作(9个) */

Status InitStack(LinkStack S)
{ /
构造一个空栈S /
LinkStackPtr p;
p=(LinkStackPtr)malloc(sizeof( Node));
if(!p)
exit(OVERFLOW); /
存储分配失败 /
p->next=NULL;
S->top=p;
S->count=0;
return OK;
}
Status ClearStack(LinkStack *S)/
清空链栈*/
{
LinkStackPtr p;
while(S->top)
{
p=S->top;
S->top=S->top->next;
S->count--;
free(p);
}
return OK;
}

Status DestroyStack(LinkStack S)
{ /
销毁栈S,S不再存在 */
ClearStack(&*S);
free(S);
return OK;
}

Status StackEmpty(LinkStack S)
{ /* 若栈S为空栈,则返回TRUE,否则返回FALSE */
if(S.top)
return TRUE;
else
return FALSE;
}

int StackLength(LinkStack S)
{ /* 返回S的元素个数,即栈的长度 */
return S.count;
}

Status GetTop(LinkStack S,SELemType*e)
{ /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */
if(!S.top) return ERROR;
*e=S.top->data;
return OK;
}

Status Push(LinkStack S,SELemType e)
{ /
插入元素e为新的栈顶元素 */
LinkStackPtr p=(LinkStackPtr)malloc(sizeof(Node));
p->data=e;
p->next=S->top;
S->top=p;
S->count++;
return OK;
}

Status Pop(LinkStack S,SELemType *e)
{ /
若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
LinkStackPtr p;
if(!S->top) return ERROR;
p=S->top;
S->top=S->top->next;
S->count--;
free(p);
return OK;

}

Status visit(SELemType a)
{
printf("%d",a);
return OK;
}

Status StackTraverse(LinkStack S)
{ /* 从栈底到栈顶依次对栈中每个元素调用函error C2081: 'SElemType' : name in formal parameter list illegal数visit() */
LinkStackPtr p;
p=S.top;
while(p)
{
visit(p->data);图片说明
p=p->next;
}
printf("\n");
return OK;
}

int main()
{ int i;
SELemType e;
LinkStack s;

if(InitStack(&s))
for(i=1;i<=10;i++)

   Push(&s,i);

printf("压栈操作后,栈中元素为:\n");
StackTraverse(s);
Pop(&s,&e);
printf("出栈操作后,弹出的元素为:%d\n",e);
Pop(&s,&e);
printf("再次出栈操作后,弹出的元素为:%d\n",e);
printf("Push将刚刚弹出的元素%d再次压入栈中\n");
Push(&s,e);
printf("StackEmpty判断栈是否为空:%d(1:是 0:不是)\n",StackEmpty(s));
GetTop(s,&e);
printf("GetTop当前的栈顶元素为:%d\n",e);
printf("StackLength:当前的栈的长度为:%d\n",StackLength(s));
ClearStack(&s);
printf("ClearStack栈清空后,StackEmpty栈是否为空:%d(1:是 0:不是)%d",StackEmpty(s));
DestroyStack(&s);
printf("DestroyStack栈销毁");
return 0;
}

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答