您的位置:首页 > 其它

【程序练习】——括号匹配

2013-09-26 11:16 816 查看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 20

typedef struct stack{
char item;
struct stack *next;
}stack;

char gettop_s(stack *h)            //得到栈顶元素
{
char ch;

ch = h->item;

return ch;
}

stack * out_s(stack *h)                //出栈
{
stack *p;
char ch;

p = h;
ch = p->item;
h = h->next;

free(p);

return h;
}

stack * insert_s(char ch, stack *h)                //入栈
{
stack *p;

p = (stack *)malloc(sizeof(stack));

p->item = ch;
p->next = h;

h = p;

return h;
}

stack * init()                    //初始化栈
{
stack *h;

h = (stack *)malloc(sizeof(stack));

h->item = '\0';
h->next = NULL;

return h;
}

int cop_symbol(char a,char b)            //判断两个符号是否匹配
{
if(a == '[' && b == ']')
return 1;
else if(a == '(' && b == ')')
return 1;
else
return 0;
}

int bracktext(char value[MAX], stack *h)                //括号检测
{
int i = 0;
char topvalue;        //栈顶元素

while(value[i] != '\0'){

if(h->next == NULL)
h = insert_s(value[i], h);
else{
topvalue = gettop_s(h);
if(cop_symbol(topvalue, value[i]))
h = out_s(h);
else
h = insert_s(value[i], h);
}
i++;
}

if(h->next != NULL)
return 0;
else
return 1;

}

int main()
{
stack *h;
int i = 0;
char textvalue[MAX];            //存放需要测试的值
//栈头结点
puts("please enter some symbols you want to text");

scanf("%s",textvalue);

h = init();

if(bracktext(textvalue, h))
printf("OK\n");
else
printf("NO\n");

}


  进栈和出栈的时候要注意返回头指针,不然下次操作会找不到头结点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: