栈的链式结构运用-括号匹配

下面是用链栈做的括号匹配,链栈作为头文件,运行时应先将头文件导入

#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType,Status;
typedef struct StackNode
{
    SElemType data;
    StackNode *next;
}StackNode,*LinkStackNode;
typedef struct LinkStack
{
    LinkStackNode top;
    int counts=0;
};
Status IN(LinkStack *S)
{
    S->top=NULL;
    S->counts=0;
    return 0;
}
Status push(LinkStack *S,char e)
{
    LinkStackNode p;
    p=(LinkStackNode)malloc(sizeof(LinkStackNode));
    p->next=S->top;
    S->top=p;
    p->data=e;
    S->counts++;
    return 0;
}
c GetTop(LinkStack S,char e)
{
    LinkStackNode p=S.top;
    e=p->data;
    return e;
}
Status StackEmpty(LinkStack *S)
{
    LinkStackNode p=S->top;
    if(p==NULL)return 1;
    else
    return 0;
}
Status Pop(LinkStack *S,char *e)
{
    LinkStackNode p=S->top;
    *e=p->data;
    S->top=S->top->next;
    free(p);
    S->counts--;
    return 0;
}
Status print(LinkStack *S)
{
    if (!S&&S->counts)
	{
		return 0;
	}
    LinkStackNode p=S->top;
    //printf("%d\n",p->data);
    for(;p;)
    {
        printf("%d\n",p->data);
        p=p->next;
    }
    return 1;
}//上面是头文件
#include"stdio.h"
#include"Stack1.h"
int main()
{
	char e[100],f,b;
	LinkStack S;
	IN(&S);
	scanf("%s",e);
	f=getchar();
	for(int i=0;e[i]!='\0';i++)
	{
		if(StackEmpty(&S))
	    push(&S,e[i]);
	    else if(e[i]-GetTop(S,f)==1||e[i]-GetTop(S,f)==2)
            Pop(&S,&b);
        else push(&S,e[i]);
	}
	if(!StackEmpty(&S))printf("illegality\n");
        else printf("legal\n");
    return 0;
}









 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值