算法学习 - 括号匹配(栈实现)C++

来源:互联网 发布:中国移动网络维护 编辑:程序博客网 时间:2024/06/14 22:50

括号匹配是栈最典型的应用了。

其实思路很简单,就是遇到一个左括号就压栈,遇到一个右括号就弹栈,看是否匹配就好了。最后检查下栈里是不是有剩余的括号就行了。


上代码~:

////  main.cpp//  bracketMatch////  Created by Alps on 14-7-28.//  Copyright (c) 2014年 chen. All rights reserved.//#include <iostream>#define ElementType charusing namespace std;struct Node;typedef Node * PtrToNode;typedef PtrToNode Stack;struct Node{    ElementType X;    PtrToNode Next;};int isEmpty(Stack S){    return S->Next == NULL;}Stack createStack(void){    Stack S;    S = (Stack)malloc(sizeof(Node));    S->Next = NULL;    return S;}void Push(Stack S, ElementType X){    Stack element;    element = (Stack)malloc(sizeof(Node));    element->X = X;    element->Next = S->Next;    S->Next = element;}void Pop(Stack S){    if (!isEmpty(S)) {        Stack tmp = S->Next;        S->Next = tmp->Next;        free(tmp);    }else{        printf("Empty stack can't pop cell\n");    }}ElementType Top(Stack S){    ElementType X;    if (!isEmpty(S)) {        return X = S->Next->X;    }else{        printf("empty stack, no top cell\n");    }    return 0;}void makeEmpty(Stack S){    if (S == NULL) {        printf("create stack first\n");    }    while (!isEmpty(S)) {        Pop(S);    }}int main(int argc, const char * argv[]){    Stack S = createStack();    int i = 0;    char tmp;    int flag = 0;    char A[] = {'(','b','c',')','[','{','a','(',')','c','}',']'};    for (i = 0; i < sizeof(A)/sizeof(char); i++) {        if (A[i] == '(' || A[i] == '[' || A[i] == '{') {            Push(S, A[i]);            continue;        }else{            if (A[i] == ')' || A[i] == ']' || A[i] == '}') {                tmp = Top(S);                switch (A[i]) {                    case ')':                        if (tmp == '(') {                            flag = 1;                        }                        break;                    case ']':                        if (tmp == '[') {                            flag = 1;                        }                        break;                    case '}':                        if (tmp == '{') {                            flag = 1;                        }                        break;                                            default:                        break;                }                if (flag != 1) {                    printf("the bracket doesn't match! %c-%d\n",A[i],i);                    return 1;                }else{                    Pop(S);                    flag = 0;                }            }else{                continue;            }        }    }    if (!isEmpty(S)) {        printf("there are already some barackets not matched!\n");        return 1;    }else{        printf("the bracket is matched\n");    }    return 0;}

其实主要流程都在main函数里,我没有变成函数。。。多包涵好了。

0 0