NYOJ NO.3 括号配对问题
来源:互联网 发布:json字符串解析 编辑:程序博客网 时间:2024/06/05 22:38
第一种:链表。
#include <stdio.h>#include <string.h>#include <stdlib.h> #define TRUE 1#define FALSE 0 typedef struct parenthesis{ parenthesis *front; char parent; parenthesis *next;}par; int operqueue(par *h);int judge(par *h);int find(par *h,char a);int rang(par *begin,par *end);par* getqueue(par *h); int main(){ int n; scanf("%d", &n); getchar(); while(n--) { par *h,*head,*oper; if(NULL == (h =(par *)calloc(1, sizeof(par)))) return FALSE; head = getqueue(h); if(judge(head)) printf("Yes\n"); else printf("No\n"); } return 0;} int judge(par *h){ int sum = 0; par *head,*oper; oper = head = h; while(head != NULL) { sum++; head = head->next; } if(0 != sum%2) return FALSE; else return operqueue(oper);} int operqueue(par *h){ par *head,*fron; char flag1,flag2; head = h; do { while(')' != head->parent && ']' != head->parent) { if(NULL == head->next) return FALSE; head = head->next; } flag1 = head->parent; if(')' == flag1) flag2 = '('; else flag2 = '['; fron = head->front; while(flag2 != fron->parent) { if(0 != fron->parent) return FALSE; if(NULL == fron->front) return FALSE; fron = fron->front; } fron->parent = head->parent = 0; } while(find(h, ']') || find(h, ')')); return TRUE;}int find(par *h,char a){ par *head; head = h; while(head != NULL) { if(a == head->parent) return TRUE; head = head->next; } return FALSE;}int rang(par *begin,par *end){ int distance = 0; par *b, *e; b = begin; e = end; while(b != end) { distance++; b = b->next; } return distance;}par* getqueue(par *h){ char m; par *head; head = h; h->front = NULL; h->parent = getchar(); while( (m = getchar())!= '\n') { par *n; if(NULL == (n =(par *)calloc(1, sizeof(par)))) return NULL; h->next = n; n->front = h; n->parent = m; n->next = NULL; h = h->next; } return head;}
第二种:伪堆栈。
#include <stdio.h>#define TRUE 1#define FALSE 0int judge(char s[]);int main(){ int n; scanf("%d", &n); getchar(); while(n--) { char queue[10005]; if(judge(queue)) printf("Yes\n"); else printf("No\n"); } return 0;}int judge(char s[]){ char flag1, flag2; int top = 0; while( (flag1 = getchar())!= '\n') { if('(' == flag1 || '[' == flag1) s[top++] = flag1; else { if(0 == top) { while(getchar() != '\n'); return FALSE; } if(')' == flag1) flag2 = '('; else flag2 = '['; if(flag2 != s[top-1]) { while(getchar() != '\n'); return FALSE; } else { top--; } } } return TRUE;}
0 0
- NYOJ NO.3 括号配对问题
- NYOJ - 括号配对问题
- nyoj 括号配对问题
- NYOJ【括号配对问题】
- NYOJ-括号配对问题
- nyoj 括号配对问题
- NYOJ 括号配对问题
- nyoj括号配对问题
- nyoj 括号配对问题
- NYOJ-括号配对问题
- NYOJ 括号配对问题
- NYOJ - 括号配对问题
- NYOJ-括号配对问题
- nyoj 括号配对问题
- NYOJ 括号配对问题
- nyoj 括号配对问题
- 【NYOJ】括号配对问题
- NYOJ 括号配对问题
- asp.net输出重写压缩页面文件人代码
- Highchart legend属性 实现翻页显示效果,解决legend过长
- asp.net 备份和恢复数据库
- stanford machine learning 笔记 1
- 3.EditText控件
- NYOJ NO.3 括号配对问题
- [LeetCode] Median of Two Sorted Arrays
- Java多线程同步机制(synchronized)
- Steps in Setting hadoop in GHC
- run hadoop in ghc and aws
- 初识pe结构--手写可执行程序
- 网络流入门—用于最大流的Dinic算法
- LeetCode(118)Pascal's Triangle
- LeetCode(119)Pascal's Triangle II