链式堆栈处理括号匹配问题
这个程序在我的 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; } }