链式堆栈处理括号匹配问题
这个程序在我的 win 7上的vs6.0上无法通过编译 但是在我老师的linux服务器上能通过编译并且运行正确 那么请大家帮帮我看看 有啥问题
程序代码:#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
typedef char DataType;
#include"lsstack.h"
void compare(char s[MAX]);
int main()
{
char s[MAX];
scanf("%s",s);
//printf("%s\n",s);
compare(s);
return 0;
}
void compare(char s[MAX])
{
int n,i;
char c;
n=strlen(s);
LSnode *Q;
stackinitiate(&Q);
for(i=0;i<n;i++)
{
if((s[i]=='(')||(s[i]=='{')||(s[i]=='['))
stackpush(Q,s[i]);
else if((s[i]==')')&&stacknotempty(Q)&&stacktop(Q,c)&&(c=='('))
stackpop(Q,&c);
else if((s[i]==')')&&stacknotempty(Q)&&stacktop(Q,c)&&(c!='('))
{
printf("左右括号匹配次序不对哦!\n");
return;
}
else if((s[i]=='}')&&stacknotempty(Q)&&stacktop(Q,c)&&(c=='{'))
stackpop(Q,&c);
else if((s[i]=='}')&&stacknotempty(Q)&&stacktop(Q,c)&&(c!='{'))
{
printf("左右括号匹配次数不对哦!\n");
return;
}
else if((s[i]==']')&&stacknotempty(Q)&&stacktop(Q,c)&&(c=='['))
stackpop(Q,&c);
else if((s[i]==']')&&stacknotempty(Q)&&stacktop(Q,c)&&(c!='['))
{
printf("左右括号匹配次数不对哦!\n");
return;
}
else if(((s[i]==']')||(s[i]==')')||(s[i]=='}'))&&!stacknotempty(Q))
{
printf("右括号多于做括号!\n");
return;
}
}
if(stacknotempty(Q))
printf("左括号多于右括号!\n");
else
printf("左右括号匹配正确!\n");
}
一下为头文件 名字为lsstack.h
程序代码:#include<stdio.h>
#include<stdlib.h>
typedef struct snode
{DataType data;
struct snode *next;
}LSnode;
void stackinitiate(LSnode **H)
{if((*H=(LSnode*)malloc(sizeof(LSnode)))==NULL)exit(1);
(*H)->next=NULL;
}
int stacknotempty(LSnode *H)
{if(H->next==NULL)return 0;
else return 1;
}
int stackpush(LSnode *H,DataType x)
{LSnode *p;
if((p=(LSnode*)malloc(sizeof(LSnode)))==NULL)
{printf("no place\n");
return 0;
}
p->data=x;
p->next=H->next;
H->next=p;
return 1;
}
int stackpop(LSnode *H,DataType *d)
{ LSnode *p=H->next;
if(p==NULL)
{printf("stack is empty\n");
return 0;
}
H->next=p->next;
*d=p->data;
free(p);
return 1;
}
int stacktop(LSnode *H,DataType *d)
{LSnode *p=H->next;
if(p==NULL)
{printf("stack is empty\n");
return 0;
}
*d=p->data;
return 1;
}
void conver(LSnode *H,DataType d)//进制转换
{
while(d>0)
{
stackpush(H,d%2);
d=d/2;
}
}





