• Balancing Symbols


    symbols匹配问题

    #include<iostream>
    #include<string>
    using namespace std;
    
    struct Node
    {
    	char data;
    	Node*next;
    };
    
    struct LinkStack
    {
    	Node*top;
    };
    
    LinkStack*create()
    {
    	LinkStack*stack = new LinkStack;
    	stack->top = NULL;
    	return stack;
    }
    
    bool isEmpty(LinkStack*stack)
    {
    	return (stack->top == NULL);
    }
    
    void pop(LinkStack*stack)
    {
    	Node*p = stack->top;
    	stack->top = stack->top->next;
    	delete p;
    }
    
    void push(LinkStack*stack, char item)
    {
    	Node*p = new Node;
    	p->data = item;
    	p->next = stack->top;
    	stack->top = p;
    }
    
    char Top(LinkStack*stack)
    {
    	return stack->top->data;
    }
    
    int main()
    {
    	int n;
    	cin >> n;
    	while (n-->0)
    	{
    		string s;
    		cin >> s;
    		LinkStack*stack = create();
    		bool flag = true;
    		int n = s.size();
    
    		for (int i = 0; i < n; i++)
    		{
    			if (s[i] == '(' || s[i] == '[' || s[i] == '{')
    				push(stack, s[i]);
    			if (s[i] == ')')
    			{
    				if (!isEmpty(stack))
    				{
    					if (isEmpty(stack) && Top(stack) != '(')
    					{
    						flag = false;
    						break;
    					}
    					else
    					{
    						pop(stack);
    					}
    				}
    				else
    				{
    					flag = false;
    					break;
    				}
    			}
    			else if (s[i] == ']')
    			{
    				if (!isEmpty(stack))
    				{
    					if (Top(stack) != '[')
    					{
    						flag = false;
    						break;
    					}
    					else
    					{
    						pop(stack);
    					}
    				}
    				else
    				{
    					flag = false;
    					break;
    				}
    			}
    			else if (s[i] == '}')
    			{
    				if (!isEmpty(stack))
    				{
    					if (Top(stack) != '{')
    					{
    						flag = false;
    						break;
    					}
    					else
    					{
    						pop(stack);
    					}
    				}
    				else
    				{
    					flag = false;
    					break;
    				}
    			}
    		}
    		if (!isEmpty(stack))
    			flag = false;
    		if (flag)
    			cout << "Yes" << endl;
    		if (!flag)
    			cout << "No" << endl;
    
    		delete stack;
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    冒泡 希尔 快速 插入 堆 基数
    排序总结
    软件工程(齐治昌-谭庆平-宁洪)
    Java简单计算器
    插入排序
    Android中theme.xml与style.xml的区别
    activity theme parent 属性浅析
    xml中不能直接添加ViewGroup
    Java中对象的上转型对象
    Android原理View、ViewGroup
  • 原文地址:https://www.cnblogs.com/KennyRom/p/5911105.html
Copyright © 2020-2023  润新知