括号{}()[]匹配

来源:互联网 发布:淘宝品牌排行榜 编辑:程序博客网 时间:2024/05/17 23:17

使用栈来实现

#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 100typedef struct elem{    int date;};typedef struct LinkStack{    elem elem_date;    LinkStack *next;}LinkStack;//初始化void Init(LinkStack **top)//栈只有头,没有底{    *top = (LinkStack*)malloc(sizeof(LinkStack));    (*top)->next = NULL;}//入栈int push(LinkStack *Top, int date){    LinkStack *p = (LinkStack*)malloc(sizeof(LinkStack));    if (p == NULL)    {        printf("申请空间失败\n");        return -1;    }    p->elem_date.date = date;    p->next = Top->next;    Top->next = p;    return 0;}//出栈int pop(LinkStack *top, int &date){    if (top->next == NULL)    {        date = -1;        return -1;    }    LinkStack*p = (LinkStack*)malloc(sizeof(LinkStack));    p = top->next;    date = p->elem_date.date;    top->next = p->next;    free(p);    return 0;}//获得栈顶元素int get(LinkStack *top, int &date){    if (top->next == NULL)    {        date = -1;        return -1;    }    date = top->next->elem_date.date;    return 0;}//判空int empty(LinkStack *top){    if (top->next == NULL)    {        return 1;    }    return 0;}//() {} []//01 23 45bool mate(char *buf){    LinkStack *stack;    Init(&stack);    int buf1[MAX] = {};    int i = 0;    while (i<strlen(buf))    {        switch (buf[i])        {        case '(':buf1[i] = 0; break;        case ')':buf1[i] = 1; break;        case '{':buf1[i] = 2; break;        case '}':buf1[i] = 3; break;        case '[':buf1[i] = 4; break;        case ']':buf1[i] = 5; break;        default:            break;        }        i++;    }    buf1[i] = 6;    i = 0;    int tmp = 0;    while (buf1[i] != 6)    {        switch (buf1[i])        {        case 0:push(stack, buf1[i]); break;        case 2:push(stack, buf1[i]); break;        case 4:push(stack, buf1[i]); break;        default:            break;        }        switch (buf1[i])        {        case 1:            {                pop(stack, tmp);                if (tmp != 0)                {                    return false;                }            }            break;        case 3:        {            pop(stack,tmp);            if (tmp != 2)            {                return false;            }            break;        }        case 5:        {            pop(stack,tmp);            if (tmp != 4)            {                return false;            }            break;        }        default:break;        }        i++;    }    if (empty(stack))    {        return true;    }    return false;}int main(void){    char buf[MAX] = "";    gets_s(buf);    if (mate(buf))        printf("括号可以匹配\n");    else        printf("括号不可以匹配\n");    return 0;}
原创粉丝点击