试试#include <stdio.h>
#include <stdlib.h> // 头文件最好加上
#define maxsize 100
#define size 5
typedef char data;
typedef struct wzw
{
data sj;
struct wzw *next;
}wzw;
void inintstack(wzw *q) // 不需要'*'号
{
q->next= NULL;
}
int ifemepty(wzw *q)
{
return (q->next ? 1 : 0); // 判断这个
}
data gettop(wzw* q)
{
if (!q) { printf("空栈!"); return 0; }
else
return (q->next->sj); // 取这个元素
}
void push(wzw* q, data x)
{
wzw* p;
p= (wzw*)malloc(sizeof(wzw));
p->sj = x;
/*p->next = q;
q->sj=p->sj;
q->next = p->next;*/
// 尾插法
p->next = NULL;
q->next = p;
q = p;
}
wzw* pop(wzw* q)
{
wzw* x;
x=(wzw*)malloc(sizeof(wzw));
if (!q) { printf("空栈"); return 0; }
// 删除这块有问题
x=q->next;
q->next =x->next;
free(x);
return q;
}
int match(char c[])
{
int x = 0;
wzw *q;
q = (wzw*)malloc(sizeof(wzw));
inintstack(q);
while (c[x] != '#')
{
switch (c[x])
{
case '{':
case'(':
case'[': push(q, c[x]); break;
case '}': if (ifemepty(q) && gettop(q) == '{')
{
pop(q); break;
}
else return 1;
case ')':if (ifemepty(q) && gettop(q) == '(')
{
pop(q); break;
}
else return 1;
case ']':if (ifemepty(q) && gettop(q) == '[')
{
pop(q); break;
}
else return 1;
}
x++;
}
return(ifemepty(q));
}
int main()
{
int a = 0;
char p[size];
printf("请输入%d个括号并以‘#’结尾:\n",size-1);
for (int i = 0; i < size; i++)
{
scanf_s("%c", &p[i]);
}
//if (p[size - 1] != '#') printf("输入错误!请重新输入\n"); return 0;
match(p); // 这句有点多余,程序会多进行一次判断
if (match(p) ==1 ) printf("匹配失败!");
else printf("匹配成功!");
}
|