精华内容
下载资源
问答
  • 栈的括号匹配

    2021-04-16 01:55:42
    //(stack) #include <stdlib.h> #include <stdio.h> #define ElemType char //顺序 typedef struct{ ElemType data[MaxSize]; int top;//栈顶指针 }SqStack; //初始化 void InitSqStack...

    在Stack.cpp里写入方法

    //栈(stack)
    #include <stdlib.h>
    #include <stdio.h>
    #define ElemType char
    
    //顺序栈
    typedef struct{
        ElemType data[MaxSize];
        int top;//栈顶指针
    }SqStack;
    
    //初始化栈
    void InitSqStack(SqStack &s){
        s.top=-1;
    }
    
    //判空
    bool EmptyStack(SqStack S){
        if(S.top==-1)
            return true;
        else
            return false;
    }
    
    //新元素入栈
    bool Push(SqStack &s,ElemType x){
        if(s.top==MaxSize-1)
            return false;
        s.top=s.top+1;//指针先加1
        s.data[s.top]=x;//新元素入栈
        return true;
    }
    
    //出栈
    bool Pop(SqStack &s,ElemType &x){
        if(s.top==-1)   //栈空,报错
            return false;
        x=s.data[s.top];
        s.top--;
        return true;
    }
    
    //栈在括号匹配中
    bool bracketCheck(char str[],int length){
        SqStack S;
        InitSqStack(S);
        for(int i=0;i<length;i++){
            if(str[i]=='('||str[i]=='['||str[i]=='{'){
                Push(S,str[i]);//扫描到左括号,入栈
                printf("入栈:%c\n",str[i]);
               }
            else{
                if(EmptyStack(S))//扫描到右括号,且目前栈空
                    return false;
                char topElem;
                Pop(S,topElem);//栈顶元素出栈
                printf("出栈:%c\t匹配到:%c\n",topElem,str[i]);
                if(str[i]==')'&&topElem!='(')
                    return false;
                if(str[i]==']'&&topElem!='[')
                    return false;
                if(str[i]=='}'&&topElem!='{')
                    return false;
            }
        }
        return EmptyStack(S);//检查完全部括号后,栈空说明匹配成功
    }
    
    

    main函数里调用

    #include <stdio.h>
    #include "Stack.cpp"
    #define ElemType char
    
    int main()
    {
        //SqStack S;
    
        char str[]={'{','(','(',')',')','[',']','}'};
        int length=sizeof(str)/sizeof(char);
        for(int i=0;i<length;i++){
            printf("%c\t",str[i]);
        }
        printf("\n");
        bracketCheck(str,length);
    
        return 0;
    }
    
    

    在这里插入图片描述
    栈的基本方法

    展开全文
  • 利用Python列表实现一个栈的结构,再使用栈实现括号匹配的算法,所谓的括号匹配是指在编程语言中,括号是成对出现的,最先出现的左括号,对应于最后的右括号,后出现的左括号对应于最新右括号,符合栈的特征写一个...

    利用Python列表实现一个栈的结构,再使用栈实现括号匹配的算法,所谓的括号匹配是指在编程语言中,括号是成对出现的,最先出现的左括号,对应于最后的右括号,后出现的左括号对应于最新右括号,符合栈的特征

    写一个栈的类:stack.py

    class Stack:

    def __init__(self):

    self.items = []

    def is_Empty(self):

    return self.items == []

    def push(self, item):

    self.items.append(item)

    def pop(self):

    return self.items.pop()

    def peek(self):

    return self.items[len(items)-1]

    def size(self):

    return len(self.items)

    实现括号匹配的算法程序:

    from stack import Stack

    def parChecker(symbolString):

    s = Stack()

    balanced = True

    index = 0

    while index < len(symbolString) and balanced:

    symbol = symbolString[index]

    if symbol == "(":

    s.push(symbol)

    elif symbol == ")":

    if s.is_Empty():

    balanced = False

    else:

    s.pop()

    index += 1

    if balanced and s.is_Empty():

    return True

    else:

    return False

    print(parChecker("(((2356)))"))

    输出结果:

    True

    再测试

    print(parChecker("(()))"))

    输出结果False

    扩展

    能够匹配多种括号,{},[]

    只需要小小的改动代码:

    from stack import Stack

    def parChecker(symbolString):

    s = Stack()

    balanced = True

    index = 0

    while index < len(symbolString) and balanced:

    symbol = symbolString[index]

    if symbol in "({[":

    s.push(symbol)

    elif symbol in ")}]":

    if s.is_Empty():

    balanced = False

    else:

    s.pop()

    index += 1

    if balanced and s.is_Empty():

    return True

    else:

    return False

    print(parChecker("[(({fdf}))]"))

    展开全文
  • 利用栈的括号匹配算法 C语言数据结构 利用栈的括号匹配算法 C语言数据结构
  • 【Java】基于栈的括号匹配问题

    千次阅读 2019-10-08 22:01:23
    基于栈的括号匹配问题,Java编程实现。

    这里只用一个方法(函数)描述这个算法:

    public int match(char[] bra_exp) {
        //初始化栈
        StackInterface<Character> stack = new SequentialStack<>(bra_exp.length);
        //依次处理每一个字符
        for (int i = 0; i < bra_exp.length; i++) {
            //扫描当前字符是左括号
            if (bra_exp[i] == ')') {
                //判断栈是否非空
                if (!stack.isEmpty()) {
                    stack.pop();
                } else {
                    return -1;
                }
            } else if (bra_exp[i] == '(') {     //扫描当前字符是左括号
                //入栈
                stack.push('(');
            }
        }
        //栈空则正确匹配
        if (stack.isEmpty()) {
            return 0;
        } else {
            return 1;
        }
    }
    
    展开全文
  • //基于栈的括号匹配 #include<fstream> using namespace std; typedef char TYPE;//抽象数据类型 typedef struct node { TYPE data; struct node* next; }node, *link; link creat() { link head; h

    写在前面

    这些代码是我的数据结构作业,发出来一方面同大家分享,另一方面跪求大佬指出代码需要改进的地方。

    #include<iostream>//基于栈的括号匹配
    #include<fstream>
    using namespace std;
    typedef char TYPE;//抽象数据类型
    typedef struct node {
    	TYPE data;
    	struct node* next;
    }node, *link;
    link creat() {
    	link head;
    	head = (link)malloc(sizeof(node));
    	head->data=-1;
    	head->next = NULL;
    	return head;
    }//生成链表
    void push(link str, TYPE op) {//压栈
    	link temp;
    	temp = (link)malloc(sizeof(node));
    	temp->data = op;
    	temp->next = str->next;
    	str->next = temp;
    }
    void pop(link str) {//弹栈
    	link temp;
    	temp = str->next;
    	str->next = temp->next;
    	free(temp);
    }
    int main() {
    	link a;
    	a = creat();
    	TYPE temp[10000];
    	ifstream inf("string.txt", ios::in);//放在cpp文件所在的文件夹中
    	ofstream outf("values.txt", ios::out);
    	inf.getline(temp, 1000);
    	int i = 0;	//预先读取一行字符串进行判断
    	while ( !inf.eof() ) {
    		while(temp[i] !='\0' && !inf.eof()){//数据行内进行判断
    			if(temp[i] =='{'|| temp[i] =='['|| temp[i] =='('){//逐位读遇到左括号就压栈
    				push(a, temp[i]);
    			}
    			switch(temp[i]){//判断括号是否符合及弹栈操作
    			case '}':
    				if (a->next != NULL) {//未到栈底
    					if (a->next->data == '{') {
    						pop(a);
    					}
    					else {//符号不匹配
    						outf << -1 << endl;
    						inf.getline(temp, 10000);//读文件下一行 继续进行对比操作
    						a = creat();
    						i = -1;
    					}
    				}
    				else{//已经到栈底
    					outf << -1 << endl;
    					inf.getline(temp, 10000);
    					a = creat();
    					i = -1;
    				}
    				break;
    			case ']':
    				if (a->next != NULL) {
    					if (a->next->data == '[') {
    						pop(a);
    					}
    					else {
    						outf << -1 << endl;
    						inf.getline(temp, 10000);
    						a = creat();
    						i = -1;
    					}
    				}
    				else {
    					outf << -1 << endl;
    					inf.getline(temp, 10000);
    					a = creat();
    					i = -1;
    				}
    				break;
    			case ')':
    				if (a->next != NULL) {
    					if (a->next->data == '(') {
    						pop(a);
    					}
    					else {
    						outf << -1 << endl;
    						inf.getline(temp, 10000);
    						a = creat();
    						i = -1;
    					}
    				}
    				else {
    					outf << -1 << endl;
    					inf.getline(temp, 10000);
    					a = creat();
    					i = -1;
    				}
    				break;
    			}
    			i++;			
    		}
    		if (a->next==NULL) {//成功比较完一整行字符 看栈是否为空栈
    			outf << 0 << endl;
    		}
    		else {
    			outf << -1 << endl;
    		}
    		inf.getline(temp, 10000);
    		a = creat();
    		i = 0;
    	}
    	inf.close();
    	outf.close();
    	return 0;
    }
    

    代码如上

    展开全文
  • //括号匹配问题中应用,假设表达式中允许存在三种括号:方括号和圆括号和花括号,其嵌套顺序任意,即 ({}) 或 [{([][])}] 等均为正确格式,[(]) 或 ([)) 或 (()] 均为不正确格式 算法思路:以 ({}) 为例,如果...
  • 栈的括号匹配应用

    2021-03-16 14:30:12
    匹配失败情况:1、字符串扫描完后不空2、还没扫描完空3、左右括号匹配 代码: #include<bits/stdc++.h> using namespace std; #define MaxSize 30 typedef struct{ char data[MaxSize]; int top;...
  • 二、方便起见,这里我们使用栈的顺序存储结构来存储待匹配的元素: 因为存储的是括号,所以数据部分是char类型。 我们开辟了10个连续的char型空间存储元素,1个Int型空间存储指针,指针的值为数组下标。 #include<...
  • 栈的括号匹配问题

    2019-10-11 20:35:42
    栈的经典问题! package stack; import java.util.Stack; public class Main0020有效的括号 { public static void main(String[] args) { System.out.println(new Solution20().isValid("([]()){...
  • 栈的括号匹配 C语言

    千次阅读 2018-04-15 10:53:38
    //括号匹配 #define ElementType char struct StackNode { ElementType data; int Length; struct StackNode* pNext; }; typedef struct StackNode *Stack; Stack CreateStack() { Stack MyStack = (Stack)...
  • C++实现栈的括号匹配

    2014-01-13 09:01:16
    本程序包含 体:用来保存数据项的内存空间; 栈顶指示器:用来指示栈顶数据项; 操作: 压栈操作(push):把数据项从栈顶压入栈内,移动栈顶指示...判断一个数学表达式中的括号(包括圆括号和方括号)是否配对。
  • 栈(stack) 栈(stack)数据结构只允许在一端进行操作,可以在一端(栈顶)进行出栈和入栈,而在另一端(栈底)不能进行操作,并且后进先出。 当顺序表和链表只能在...栈的代码实现 使用列表入栈和出栈为什么...
  • c语言栈的括号匹配

    2019-10-20 21:02:55
    if(db(e)+db(ch)==5){//详情看db函数,符号匹配则相加为5 Pop(L,e); }else{ Push(L,ch); } } scanf("%c",&ch); } if(L.base==L.top){ printf("This Symbol Mathing Victory !\n"); }else...
  • 顺序栈的括号匹配

    2018-11-25 20:32:16
    bool matching(char exp[]) //括号匹配 { int state=1,i=0; char ch,e; ch=exp[i++]; seqstackS; while(ch!=’\0’&&state) { if(ch==’(’||ch==’[’)S.push(ch); else if(ch==’)’) if(!S.empty()&&S...
  • 问题描述 任意给定一个字符串,字符串中包含除了空格、...如果字符串中的括号匹配,则输出数字 1,并且在下一行输出{}、[]、()相对应的匹配个数,否则输出数字 0。 示例 输入: &()dgn*[{%}12] 输出: 1 ...
  • 括号匹配,输入一串小括号
  • 给定左括号和右括号字符串,输出左右括号匹配成功个数。 Input 第一行一个整数T,代表有T个用例。每个用例只包含‘(’和‘)’,字符串S长度: 1≤|S|≤1,000。 Output 输出匹配成功个数。 Sample Input 3 () ...
  • 假设表达式中允许包含三种括号:圆括号和方括号和大括号,其嵌套顺序随意,即( [ ] ( ) )或者[ ( [ ] ) ]为正确格式,[(])或(()]均为不正确格式,检验括号是否匹配的方法可用"期待破却程度"来描述。...
  • C语言实现顺序栈的括号匹配

    千次阅读 2015-07-08 21:48:46
    //顺序栈的使用举例:括号匹配 #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define BUFFERSIZE 256
  • 顺序及其算法
  • 算法数据结构数据结构和算法(Python版):利用(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等。如果不相等话则程序...
  • 顺序栈的括号匹配算法

    千次阅读 2012-07-24 23:21:18
    #include const int Stack_Size = 30; const int TRUE = 1;...typedef struct //定义顺序结构 { char data[Stack_Size]; int top; //栈顶指针 }SqStack; void BracketMatch(char *);
  • 1. 编写算法,判断一表达式中的括号是否配对,包括大、中、小三类括号。 链表版本: #include &lt;cstdio&gt; #include &lt;cmath&gt; #include &lt;cstring&gt; #include &lt;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,353
精华内容 1,741
关键字:

栈的括号匹配