#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int SElemType data;
typedef struct
{
SElemType *base;
SELemType *top;
int stacksize;
SElemType data[MAXSIZE];
}SqStack;
void CreateStack_S(SqStack&s)//先创建一个栈,然后才能进行各种基本操作
{
S.base=(SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
void Push(SqStack&S,SElemType e)//入栈
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
void GetTop(SqStack S,SElemType&e)//获得栈顶元素
{
if(S.top==S.base)
return ERROR;
e=*(S.top-1);
return OK;
}
void StackTraverse(SqStack S)//栈的遍历
{
int a=0;
while(a<=S.top)
visit(S.data[i++]);
printf("\n");
return OK;
}
void Pop(SqStack&S,SElemType&e)//删除栈顶元素
{
if(S.top==S.base)return ERROR;
e=*--S.top;
return OK;
}
void ClearStack(SqStack&S)//清空栈
{
S.top=S.base;
return OK;
}
void DestoryStack(SqStack&s)//栈的销毁
{
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
return OK;
}
int main()
{
int n,e,i;
SqStack S;
CreateStack_S(S);
printf("请输入元素个数\n");
scanf("%d",&n);
printf("请输入你的元素\n");
for(i=0;i
{
scanf("%d",&e);
Push(S e);
}
Get(S e);
printf("栈顶元素为:%d",e);
Pop(S e);
StackTraverse(S);
ClearStack(S);
DestoryStack(S);
return 0;
}
C:\Users\86182\Desktop\栈.cpp(10) : error C2146: syntax error : missing ';' before identifier 'data'
C:\Users\86182\Desktop\栈.cpp(10) : fatal error C1004: unexpected end of file found
修改如下,见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int SElemType;//data;
typedef struct
{
SElemType *base;
SElemType *top; //SELemType
int stacksize;
//SElemType data[MAXSIZE];
}SqStack;
void CreateStack_S(SqStack &S)//先创建一个栈,然后才能进行各种基本操作
{ //s
S.base=(SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return; //OK;
}
void Push(SqStack &S,SElemType e)//入栈
{
if(S.top-S.base >= S.stacksize){
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return; // OK;
}
void GetTop(SqStack S,SElemType &e)//获得栈顶元素
{
if(S.top==S.base)
return; // ERROR;
e = *(S.top-1);
return; // OK;
}
void StackTraverse(SqStack S)//栈的遍历
{
SqStack tmp; //int a=0;
tmp.top = S.top;
while(tmp.top > S.base)
printf("%d ",*--tmp.top);
//visit(S.data[a++]);
printf("\n");
return; // OK;
}
void Pop(SqStack &S,SElemType &e)//删除栈顶元素
{
if(S.top == S.base){
e = -999;
return; // ERROR;
}
e = *--S.top;
return; // OK;
}
void ClearStack(SqStack &S)//清空栈
{
S.top = S.base;
return; // OK;
}
void DestoryStack(SqStack &S)//栈的销毁 //s
{
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
return; // OK;
}
int main()
{
int n,e,i;
SqStack S;
CreateStack_S(S);
printf("请输入元素个数\n");
scanf("%d",&n);
printf("请输入你的元素\n");
for(i=0;i<n;i++)
{
scanf("%d",&e);
Push(S,e);
}
StackTraverse(S);//栈的遍历
GetTop(S,e);
printf("栈顶元素为:%d\n",e);
Pop(S,e);
printf("出栈元素为:%d\n",e);
Pop(S,e);
printf("出栈元素为:%d\n",e);
Pop(S,e);
printf("出栈元素为:%d\n",e);
Pop(S,e);
printf("出栈元素为:%d\n",e);
ClearStack(S);
DestoryStack(S);
return 0;
}
检查一下大括号匹配情况吧,是不是少了个大括号
typedef int SElemType data; --- 这是啥?两个都不是数据类型,你typedef啥呢