您的位置:首页 > 其它

栈的经典问题:括号配对

2015-01-08 21:48 267 查看

 

You are given a string consisting of parentheses() and[]. A string of this type is said to becorrect:
(a)if it is the empty string(b)if A and B are correct, AB is correct,(c)if A is correct, (A) and [A] is correct.Write a program that takes a sequence of strings of this type and check their correctness. Your program can assume that the maximum string length is 128.

Input

The file contains a positive integer n and a sequence of n strings of parentheses() and[], one string a line.

Output

A sequence of Yes or No on the output file.

Sample Input

([])
(([()])))
([()[]()])()


Sample Output

Yes
No
Yes

#include <iostream>
#include <cstdio>
#include<stdlib.h>
#include<cstdio>
#include<string>
#include<string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

typedef struct Stack{
char *base;
char *top;
int length;
}Stack;

void init_stack(Stack &s){
s.base=(char *)malloc(20*sizeof(Stack));
s.top=s.base;
}

void push(Stack &s,char &a){
*s.top=a;
s.top++;
}

void pop(Stack &s){
--s.top;
//s.top--;
}
bool isempty(Stack &s){
return s.top==s.base?1:0;
}

char getFirst(Stack &s){
return *(s.top-1);
}

int main(int argc, char *argv[]) {

Stack s;

char str[20];

//init_stack(s);
while(scanf("%s",str)!=EOF){
init_stack(s);
int flag=1;

for(int i=0;i<strlen(str);i++){

if(str[i]=='('||str[i]=='[')push(s,str[i]);
else if(str[i]==')'){
if(isempty(s)||getFirst(s)!='(')flag=0;
else pop(s);
}
else if(str[i]==']'){
if(isempty(s)||getFirst(s)!='[')flag=0;
else pop(s);
}
}

if(!isempty(s))flag=0;
printf(flag?"yes\n":"no\n");
}
return 0;
}
构建栈实现初始化,判空,压栈,弹栈功能。纯粹练手数据结构,有很多优化的地方。
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c