问题:为什么照着严老的数据结构书上给的函数抄,但是一编译就错误?!5555~我确保和书上一样!从学线性表就遇到这样的问题了,照着书上的函数打,但是根本没法运行。怎么改啊?问了同学也不会!谢谢!
我不是定义了base的吗,为什么会说没有base?而且看网上好多人的代码都是用的top=1,pos=-1,这样比书上的好吗?
报错
附上代码:
这道题是符号配对 后面的不知道对不对 反正开头就错了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STACK_INIT_SIZE 100;//存储空间初始分配量
#define STACKINCREAMENT 10;//增量
typedef char SElemType,Status;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}Sqstack;
Status InitStack(Sqstack &S){
//构造空栈
S.base=(SElemType*)malloc(STACK_INIT_SIZE *sizeof(SElemType));
if(!S.base) exit(OVERFLOW);//存储分配失败
S.top=S.base;
S.stacksize=STAKC_INIT_SIZE;
return 1;
}
Status GetTop(Sqstack &S,SElemType e){
//若栈不空,则用e返回S的栈顶元素,并返回1
if(S.top==S.base) return 0;
e=*(S.top-1);
return 1;
}
Status Push(Sqstack &S,SElemType e){
//入栈
if(S.top-S.base>=S.stacksize){
//栈满,加空间
S.base=(SElemType *)realloc (S.base,
(S.stacksize+STACKINCREAMENT)*sizeof(SElemType));
if(!S.base) exit(OVERFLOW);//空间分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 1;
}
Status Pop(Sqstack &S){
//出栈
if(S.top==S.base) return 0;
S.top--;
return 0;
}
int main()
{
Sqstack S;
InitStack(S);
char a[1000],c;
int i=0, n, flag=0;
while(1){
gets(a);
if(a[0]=='.') break;
n=strlen(a);
for(i=0;i<n;i++)
{
if(a[i]=='('||a[i]=='['||a[i]=='{')
{Push(S, a[i]);}
else if(a[i]=='/'&&a[i+1]=='*')
{
Push(S,a[i]);
Push(S,a[i++]);
}
else if(a[i]==')')
{
if(S.base==S.top)//空
{
printf("NO\n");
printf("?-)");
flag=1;
break;
}
else{
c=Pop(S);
if(c!='(')
{
if(c=='*')
{
printf("NO\n");printf("/*-?");
flag=0;
break;
}
else {
printf("NO\n");printf("%c-?",c);flag=1;
break;
}
}
}
}
else if(a[i]==']')
{
if(S.base==S.top)
{
printf("NO\n");
printf("?-]");
flag=1;break;
}
else{
c=Pop(S);
if(c!='[')
{
if(c=='*')
{
printf("NO\n");
printf("/*-?");
flag=1;break;
}
else {
printf("NO\n");
printf("%c-?",c);
flag=1;break;
}
}
}
}
else if(a[i]=='}')
{
if(S.base==S.top)
{
printf("NO\n");
printf("?-}");
flag=1;break;
}
else {
c=Pop(S);
if(c!='{')
{
if(c=='*')
{
printf("NO\n");
printf("/*-?");
flag=1;break;
}
else {
printf("NO\n");
printf("%c-?",c);
flag=1;break;
}
}
}
}
else if(a[i]=='*'&&a[i+1]=='/')
{
if(S.base==S.top)
{
printf("NO\n");
printf("?-*/");
flag=1;break;
}
else {
c=Pop(S);
if(c!='*')
{
if(c=='*')
{
printf("NO\n");
printf("/*-?");
flag=1;break;
}
else {
c=Pop(S);
i++;
}
}
}
}
}
if(flag==0)
{
if(S.base==S.top)
printf("YES\n");
else {
c=Pop(S);
if (c == '*')
{
printf("NO\n");
printf("/*-?");
flag = 1;
}
else
{
printf("NO\n");
printf("%c-?", c);
no = 1;
}
}
}
return 0;
}