69,368
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define MAXSIZE 1024
typedef char datatype;
typedef struct node
{ datatype data;
struct node *next;
}StackNode,* LinkStack;
LinkStack Init_LinkStack()
{
return NULL;
}
int Empty_LinkStack(LinkStack top )
{
if(top==NULL) return 1;
else return 0;
}
void Push(LinkStack *top, datatype x) //要想对指针本身进行操作,就必须定义双重指针!
{ //*top就是双重指针
StackNode *s;
s=(StackNode *)malloc(sizeof(StackNode));
s->data=x;
s->next=*top;
*top=s;
}
datatype Pop(LinkStack * top)
{
datatype x;
StackNode *p;
if (top==NULL) {x=' ';return;}//当栈为空时,x返回空
else { x = (*top)->data;
p = *top;
*top = (*top)->next;
free (p);
}
return x;
}
int Is_Match(char s[])
{
int length=strlen(s);
LinkStack L;
L=Init_LinkStack();
int i=0;
for(i;i<length;i++)
{
char temp=' ';
if(s[i]=='(') Push(&L,s[i]);
if(')'==s[i])
{
temp=Pop(&L);
printf("%c",temp);
if(temp!='(') return 0;
}
}
return 1;
}
void main()
{
char test1[]="((1+2)*2)/3";
char test2[]="())ab";
printf("test1:%d\n",Is_Match(test1));
printf("test2:%d\n",Is_Match(test2));
}
LinkStack L;
L=Init_LinkStack(); // L可以指向NULL
temp=Pop(&L); // 但L自己的地址不可能是NULL
datatype Pop(LinkStack * top)
{
datatype x;
StackNode *p;
if (top==NULL) {x=' ';return;} // 这里的if比较不可能为真。())第二个)出错
else { x = (*top)->data;
p = *top;
*top = (*top)->next;
free (p);
}
return x;
}