• 【数据结构】3.19


    括号配对题 判断(){}[]的出现是否匹配  用Stack实现

    #include<iostream>
    #include <stdlib.h>
    using namespace std;
    
    typedef int Status;
    const int TRUE=1;
    const int FALSE=0;
    const int OK=1;
    const int ERROR=0;
    const int INFEASIBLE=-1;
    const int overflow=-2;
    const int STACK_INIT_SIZE=100;
    const int STACKINCREMENT=10;
    
    typedef struct{
        char orinal;
        char match;
    }Bracket;
    
    
    typedef struct{
        Bracket *base;
        Bracket *top;
        int stacksize;
    }SqStack;
    
    //构造一个空栈
    Status InitStack(SqStack &S)
    {
        S.base=(Bracket*)malloc(sizeof(Bracket)*STACK_INIT_SIZE); 
        if(!S.base) exit(overflow);
        S.top=S.base;
        S.stacksize=STACK_INIT_SIZE;
        return OK;
    }
    
    Status GetTop(SqStack S,Bracket &e)
    {
        if(S.top==S.base) return ERROR;
        e=*(S.top-1);
        return OK;
    }
    
    Status Push(SqStack &S,Bracket e)
    {
        if(S.top-S.base>=S.stacksize)
        {
            S.base=(Bracket*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(Bracket));  
            if(!S.base)exit(overflow);
            S.top=S.base+S.stacksize;
            S.stacksize+=STACKINCREMENT;
        }
        *S.top++=e;
        return OK;
    }
    
    Status Pop(SqStack &S,Bracket &e)
    {
        if(S.top==S.base) return ERROR;
        e=*--S.top;
        return OK;
    }
    
    Status StackEmpty(SqStack S){
        if(S.base==S.top)
            return TRUE;
        else
            return FALSE;
    }
    #include"exercise3_19.h"
    
    Status BracketMatch(char* input,int length)
    {
    	Bracket bracket1;
    	Bracket bracket2;
    	Bracket bracket3;
    	bracket1.orinal='(';
    	bracket1.match=')';
    	bracket2.orinal='[';
    	bracket2.match=']';
    	bracket3.orinal='{';
    	bracket3.match='}';
    	SqStack S;
    	InitStack(S);
    
    	for(int i=0; i<length;i++)
    	{
    		
    		char tmp=*(input+i);
    		printf("%c",tmp);
    		switch(tmp)
    		{
    		case '{':
    			{
    				Push(S,bracket3);
    				break;
    			}
    		case '[':
    			{
    				Push(S,bracket2);
    				break;
    			}
    		case '(':
    			{
    				Push(S,bracket1);
    				break;
    			}
    		case ')':
    		case ']':
    		case '}':
    			{
    				if(StackEmpty(S))
    				{
    					printf("error");
    					return ERROR;
    				}
    				else
    				{
    					Bracket tmp2;
    					GetTop(S,tmp2);
    					if(tmp==tmp2.match)
    					{
    						Pop(S,tmp2);
    					}
    					else
    					{
    						printf("error");
    						return ERROR;
    					}
    				}
    				break;
    			}
    		default:
    			break;
    		}
    	
    	}
    	if(!StackEmpty(S))
    	{
    		printf("error");
    		return ERROR;
    	}
    	printf("correct");
    	return OK;
    	
    }
    
    void main()
    {
    	char p[30]="3*(5+2+(2)+{[()]}){}}";
    	BracketMatch(p,30);
    	getchar();
    
    }
    

     关键点:

    1.定义了Bracket类型 使得可以直接根据栈中的元素判断是否配对

    2.switch 语句中')' '}' ']' 统一处理 '{' '[' '(' 分开处理

    3.别忘记switch 的 break default

    4.整个过程结束后 栈必须是空的 防止 ()(这样的情况

    5.在中')' '}' ']' 第一次出现时 栈不能是空的 防止 )()这样的情况

  • 相关阅读:
    字符串、列表(操作)
    数据类型
    第二周 第四部分
    第二周 第三部分
    第二周第二部分
    特征缩放和标准化 设置学习率大小 正则方程
    梯度下降 coursera.org
    监督学习和无监督学习
    手写数字问题
    pytorch基础
  • 原文地址:https://www.cnblogs.com/dplearning/p/3620615.html
Copyright © 2020-2023  润新知