【程序练习】——括号匹配
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"); }
进栈和出栈的时候要注意返回头指针,不然下次操作会找不到头结点。
相关文章推荐
- Java程序练习-括号匹配
- Java程序练习-括号匹配
- 括号匹配的检验程序
- 自己写的一个括号匹配的程序
- 栈的应用1:数制转换、括号匹配检验和行编辑程序
- 一个动态的栈实现的括号匹配程序
- 【基础练习】【栈】【映射】codevs3543 括号匹配题解
- 括号匹配程序
- 练习1-24: 编写一个程序,查找C语言程序中的基本语法错误,如圆括号,方括号以及花括号不配对等。要正确的处理引号(包括单引号,双引号)~转移字符序列与注释(如果读者想把该程序编写成完全通用的程序,难度会比较大。)
- 【基础练习】【栈】codevs2058 括号匹配题解
- 行编辑程序、括号匹配检验
- matlab练习程序(模板匹配)
- 检测程序中的括号是否匹配
- 编程练习3--括号匹配
- 基于栈的括号匹配程序
- 检测程序中的括号是否匹配
- 经典c程序(0027)---括号匹配
- 华为机试练习---括号匹配问题
- 经典c程序(0027)一括号匹配
- 栈的应用实例--c程序括号的匹配