时 限: | 1000 ms |
内存限制: | 10000 K |
总时限: | 3000 ms |
描述: | 用顺序存储实现栈的初始化、入栈、出栈、取栈顶、判栈空操作。调用以上操作实现判断从键盘输入的括号序列是否匹配。 |
输入: | 括号序列#(#为括号输入结束符号) |
输出: | 匹配或不匹配 |
输入样例: | {[()]}# [{{}[(])}]# |
输出样例: | 匹配 不匹配 |
提示: | |
来源: |
源代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
char data;
struct node *next;
}LNode;
#define Size sizeof(LNode)
void Inital(LNode *La);
LNode *CreateNode(void);
void CreateStack(LNode *La);
char GetTop(LNode *La);
int Judge(LNode *La);
int main(void)
{
LNode *La;
La=(LNode *)malloc(Size);
Inital(La);
CreateStack(La);
return 0;
}
void Inital(LNode *La)
{
La->next=NULL;
}
LNode *CreateNode(void)
{
LNode *p;
p=(LNode *)malloc(Size);
p->next=NULL;
return p;
}
void CreateStack(LNode *La)
{
LNode *p,*q;
char Data[200],S;
int i=0,m=1,Longth;
scanf("%s",Data);
Longth=strlen(Data);
while (i<Longth-1)
{
if (Data[i]=='(' || Data[i]=='{' || Data[i]=='['||Data[i]=='<')
{
q=La->next;
p=CreateNode();
p->data=Data[i];
p->next=q;
La->next=p;
}
else
{
S=GetTop(La);
if(S=='('&&Data[i]==')')
m=1;
else if(S=='['&&Data[i]==']')
m=1;
else if(S=='{'&&Data[i]=='}')
m=1;
else if(S=='<'&&Data[i]=='>')
m=1;
else
{
m=0;
break;
}
}
i++;
}
if(Judge(La)==1)
m=0;
if(m==0)
printf("不匹配");
else if(m==1)
printf("匹配");
}
char GetTop(LNode *La)
{
char Data;
LNode *p;
Data=La->next->data;
p=La->next;
La->next=p->next;
free(p);
return Data;
}
int Judge(LNode *La)
{
int m;
if (La->next==NULL)
m=0;
else
m=1;
return m;
}