精华内容
下载资源
问答
  • 利用栈的括号匹配算法 C语言数据结构 利用栈的括号匹配算法 C语言数据结构
  • 括号匹配算法c语言

    2010-05-08 10:23:53
    括号匹配算法,数据结构c语言,只写了圆括号的匹配,其他的可以参考自己写下。
  • 数据结构中括号匹配问题 用C语言实现的 结构很清晰
  • 括号匹配成功 " ); else printf( " 缺少右括号! " ); printf( " \n " ); } void InitStack(SqStack & S) {S. base =( int *)malloc(S_SIZE* sizeof ( int )); S.stacksize = S_SIZE; S.top =S. base ; // ...
    #include <stdio.h>
    #include <malloc.h>   //malloc,realloc
    #include <math.h>     //含有overflow
    #include <process.h>  //exit()
    #define S_SIZE 100   //栈的空间大小
    #define STACKINCREAMENT 10//增加空间
    struct SqStack{
        int *base; //栈底
        int *top;  //栈顶
        int stacksize;   //栈当前的存储空间
    };
    void main()
    {//子函数声明
        void InitStack(SqStack &S);//初始化空栈
        int StackEmpty(SqStack S);//判空
        void push(SqStack &S,int e);//进栈
        void pop(SqStack &S,int &e);//出栈
        //主函数开始
        SqStack s;//初始化空栈
        InitStack(s);
        char ch[100],*p;int e;
        p=ch;
        printf("输一个含义有()[]{}的括号表达式:\n");
        gets(ch);
        while(*p)
        { 
            switch (*p)
            {
            case '{':
            case '[':
            case '(': push(s,*p++);break;//只要是左括号就入栈
            case '}':
            case ']':
            case ')':pop(s,e);
                     if ((e=='{' && *p=='}') ||(e=='[' && *p==']') || (e=='(' && *p==')'))
                     p++;
                     else
                     {printf("括号不匹配!");exit(OVERFLOW);}
                     break;
            default :p++;//其他字符就后移
            }
        }
        if (StackEmpty(s))
          printf("括号匹配成功");
        else
          printf("缺少右括号!");
        printf("\n");
    }
    void InitStack(SqStack &S)
    {S.base=(int *)malloc(S_SIZE*sizeof(int));
    S.stacksize=S_SIZE;
    S.top=S.base;//初始化空栈
    }
    int StackEmpty(SqStack S)
    {
        if(S.base==S.top)
            return 1;
        else
            return 0;
    }
    void push(SqStack &S,int e)
    {//进栈
        if(S.top-S.base>=S.stacksize)
        {S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(int));
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREAMENT;}
        *(S.top)=e;
        S.top++;      
    }
    void pop(SqStack &S,int &e)
    {//出栈
        if(S.base!=S.top)
        {S.top--;
        e=*S.top;}
    }

     

    检测表达式中的字符,若是左括号就入栈,如果是右括号就出栈一个元素与其配对,配对成功则继续访问下一个字符,否则退出。出现非括号字符则跳过。

    转载于:https://www.cnblogs.com/rednodel/p/4074182.html

    展开全文
  • 数据结构-括号匹配算法C语言实现

    千次阅读 2018-11-30 20:15:54
    1.在编写代码的时候,经常会用到两种括号:圆括号 “()” 和大括号 “{}” 。...括号匹配项目要求:给出任意搭配的括号,判断是否匹配。 2.设计思路 编写程序判断括号匹配问题的时候,使用栈结构会很容...

    1.在编写代码的时候,经常会用到两种括号:圆括号 “()” 和大括号 “{}” 。不管使用哪种括号,程序编译没有问题的其中一个重要因素就是所使用的括号是否能够匹配上.
    在编写程序时,括号可以嵌套,即: “({()})” 这种形式,但 “({)” 或者 “({}” 都不符合要求。
    括号匹配项目要求:给出任意搭配的括号,判断是否匹配。

    2.设计思路

    编写程序判断括号匹配问题的时候,使用结构会很容易:

    • 如果碰到的是左圆括号或者左大括号,直接压栈;
    • 如果碰到的是右圆括号或者右大括号,就直接和栈顶元素配对:如果匹配,栈顶元素弹栈;反之,括号不匹配;
    • 代码:
      #include <stdio.h>
      #include <string.h>
      int top = -1;//初始状态的空栈,或者说栈顶元素所在位置
      void push(char *a, int elem) {//入栈操作
      	a[++top] = elem;
      }
      void pop(char *a) {//出栈操作
      	if (top == -1) {
      		return;//空栈返回
      	}
      	top--;
      }
      char visit(char *a) {//
      	//调取栈顶元素,不等于出栈,如果栈为空,为使程序不发生错误,返回空字符
      	if (top != -1) {
      		return a[top];
      	}
      	else
      	{
      		return ' ';
      	}
      }
      int main() {
      	char a[80];//定义了一个数组,长度80
      	char bracket[100];
      	printf("请输入括号序列:");
      	scanf("%s", bracket);
      	getchar();
      	int  length = (int)strlen(bracket);
      	for (int i = 0; i < length; i++) {
      		//如果是左括号,直接压栈
      		if (bracket[i] == '(' || bracket[i] == '{') {
      			push(a, bracket[i]);
      		}
      		else
      		{
      			//右边括号的话要判断与栈顶元素是否匹配,若匹配则出栈运行,反之退出
      			if (bracket[i] == ')') {
      				if (visit(a) == '(') {
      					pop(a);
      				}
      				else
      				{
      					printf("括号不匹配");
      					return 0;
      				}
      			}
      			else
      			{
      				if (visit(a) == '{') {
      					pop(a);
      				}
      				else
      				{
      					printf("括号不匹配");
      					return 0;
      				}
      			}
      		}
      	}
      	//如果所有括号匹配完成,栈内为空,说明所有括号全部匹配成功
      	if (top != -1) {
      		printf("括号不匹配");
      	}
      	else {
      		printf("括号匹配");
      	}
      
      }

      运行:

    展开全文
  • 括号匹配算法实现(c语言

    千次阅读 2019-02-12 12:42:45
    标题括号匹配算法实现(c语言) #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include&lt;stdbool.h&gt; #define size 50 typedef struct{ char elem[size]; int top; }seqstack...

    标题括号匹配算法实现(c语言)

    #include <stdio.h>
    #include <stdlib.h>
    #include<stdbool.h>
    #define size 50
    typedef struct{
    	char elem[size];
    	int top;
    }seqstack ;
    void initStack(seqstack *s)
    {
    	s->top=-1;
    }
    int Push(seqstack *s,char str)
    {	int i=0;
    	if(s->top==size-1) return 1;
    	else if (str!='\0')
        {
        		s->top++;
    	    s->elem[s->top]=str;
    	   
    	}
    	
    	return 0;
    }
    int pop(seqstack *s ,char *str)
    {
    	if(s->top==-1) return 1;
    	else {
    	
    	 *str=s->elem[s->top];
    	  printf("%c",*str);
    	 s->top--;
    	 
    	}
    	return 0;
    }
    int gettop(seqstack *s,char *ch)
    {	
    
    	if(s->top==-1) return 1;
    	else{
    	
    		*ch=s->elem[s->top];
    		
    		return 1;	    
    	}	
    }
    _Bool  Match(char ch,char str)
    {
    	if((ch=='<'&&str=='>')||(ch=='{'&&str=='}')||(ch=='('&&str==')'))
    	return 1;
    	else
    	return 0;
    }
    _Bool isEmpty(seqstack *s)
    
    {
    	if(s->top==-1) return 1;
    	else return 0;
    }
    void brackMatch(char *str)
    {
    	seqstack s,*p;
    	int i;
    	char ch,sh;
    	initStack(&s);
    	for(i=0;str[i]!='\0';i++)
    	{
    		switch(str[i])
    		{
    			case'(':
    			case'<':
    			case'{':
    				Push(&s,str[i]);
    			break;
    			case')':
    			case'>':
    			case'}':
    			if(isEmpty(&s))
    			{
    				printf("\n右括号多余");
    			}
    			else{
    				gettop(&s,&ch);
    				if(Match(ch,str[i]))
    				{
    					pop(&s,&sh);
    				}
    				else
    				{
    					printf("\n对应的括号不匹配"); 
    					return;
    				}
    			}
    				
    		}
    					
    	}
    		if(isEmpty(&s))
    		{
    			printf("\n括号匹配");
    		}
    		else
    		printf("\n左括号多余");
    }
    int main(){
    	char str[100], enter,ch;
    	seqstack s;
    	initStack(&s);
    	printf("请输入字符串:\n");
    	scanf("%s",str);
    	scanf("%c",&enter);
    	brackMatch(str); 	
    	printf("\n");
    		
    }
    

    反馈

    1. 这个意外的发现,布尔型:类型名字为“_Bool”的话编译器也可以辨认为布尔类型。前辈写的可以参考下
    2. 少乱想,多思考,勤动手。
    展开全文
  • 在编写代码的时候,经常会用到两种括号:圆括号 “()” 和大括号 “{}” 。...括号匹配项目要求:给出任意搭配的括号,判断是否匹配。 设计思路 编写程序判断括号匹配问题的时候,使用栈结构会很容易:...

    在编写代码的时候,经常会用到两种括号:圆括号 “()” 和大括号 “{}” 。不管使用哪种括号,程序编译没有问题的其中一个重要因素就是所使用的括号是否能够匹配上.

    在编写程序时,括号可以嵌套,即: “({()})” 这种形式,但 “({)” 或者 “({}” 都不符合要求。

    括号匹配项目要求:给出任意搭配的括号,判断是否匹配。

    设计思路

    编写程序判断括号匹配问题的时候,使用栈结构会很容易:
    • 如果碰到的是左圆括号或者左大括号,直接压栈;
    • 如果碰到的是右圆括号或者右大括号,就直接和栈顶元素配对:如果匹配,栈顶元素弹栈;反之,括号不匹配;

    实现代码

    #include <stdio.h>
    #include <string.h>
    int top = -1;  //top变量时刻表示栈顶元素所在位置 void push(char *a, int elem)
    { a[
    ++top] = elem; }
    void pop(char *a)
    {
    if (top == -1) return ; top--; }
    char visit(char * a)
    {
    //调取栈顶元素,不等于弹栈,如果栈为空,为使程序不发生错误,返回空字符 if (top != -1)
       {
    return a[top]; }
       else
       { return ' '; } }
    int main()
    {
    char a[30]; char bracket[100]; printf("请输入括号序列:"); scanf("%s", bracket); getchar(); int length = (int)strlen(bracket); for (int i=0; i<length; i++)
       {
    //如果是左括号,直接压栈 if (bracket[i] == '(' || bracket[i] == '{')
         { push(a, bracket[i]); }
    else{ //如果是右边括号,判断与栈顶元素是否匹配,如果匹配,栈顶元素弹栈,程序继续运行;否则,发现括号不匹配,输出结果直接退出 if (bracket[i] == ')')
           {
    if (visit(a) == '(')
              { pop(a); }
              else
              { printf("括号不匹配"); return 0; } }
           else
           { if (visit(a) == '{')
              { pop(a); }
              else
              { printf("括号不匹配"); return 0; } } } } //如果所有括号匹配完成,栈内为空,说明所有括号全部匹配成功 if (top != -1)
       { printf(
    "括号不匹配"); }
       else
       { printf("括号匹配"); } }
    运行结果:
    请输入括号序列:{}(){
    括号不匹配

     

     

     

    转载于:https://www.cnblogs.com/ciyeer/p/9031177.html

    展开全文
  • 基于c语言括号匹配算法算法要求算法思路初始化栈(将栈清空)判断栈是否为空进栈出栈定义栈主函数完整代码注释 算法要求 完成括号匹配的算法,输入一个字符串,长度不超过100,检查字符串是否可以括号匹配 算法...
  • C语言实现表达式括号匹配算法及程序
  • 用顺序栈实现括号匹配 算法思想如下: #include<stdio.h> #include<stdbool.h> #define MAXSIZE 10 typedef struct StackArr { char data[MAXSIZE]; int top; }Stack,*PSTACK; //函数声明 void ...
  • c语言实现的括号匹配算法 无括号算术表达式处理算法 #include "seqstack.h" #include "stdio.h" void BracketMatch(char *str); void BracketMatch(char *str) /* str[]中为输入的字符串,利用堆栈技术来检查该...
  • 括号匹配C语言

    2018-12-05 20:55:34
    括号匹配算法思想 (1)出现的凡是“左括号”,则进栈; (2)出现的是“右括号”, 首先检查栈是否空? 若栈空,则表明该“右括号”多余 否则和栈顶元素比较? 若相匹配,则栈顶“左括号出栈” 否则表明...
  • /*括号匹配算法*/ #include<stdio.h> #define FALSE 0 #define TRUE 1 #define MAXSIZE 100 typedef char DataType; //定义栈 typedef struct stack{ DataType data[MAXSIZE]; int top; }SeqStack; ...
  • 括号匹配算法

    2015-07-13 00:28:34
    C语言括号匹配算法,用了栈,数据结构栈的应用的常用程序
  • c语言括号匹配算法

    千次阅读 2008-02-05 16:12:00
     printf("/n左右括号匹配!/n");return;  }  }//else    }//switch  }//for  if(StackEmpty(&S))  printf("/n匹配成功!/n");  else  printf("/n左括号多余!/n"); }//BracketMatch void main() {//输入...
  • 1.用栈实现括号匹配算法: 感兴趣的小伙伴可以打开力扣(https://leetcode-cn.com)自己尝试做一下,一定要亲自动手做! typedef char DataType; typedef struct Stack { DataType* array;//存放元素 int ...
  • 括号匹配算法.txt

    2020-06-03 12:29:54
    给定一个只包括"(" ")" "{" "}" "[" "]"的字符串,判定字符串是否有效。 利用栈实现c语言括号匹配算法
  • 当遇见右括号时从栈中弹出栈顶符号,并进行匹配 匹配成功:继续进入下一个字符 匹配失败:立即停止,并报错 结束; 成功:所有字符扫描完毕,且栈为空 失败:匹配失败或所有字符扫描完毕但栈非空 代码中栈...
  • 2、假设一个算术表达式中可以包含三种括号:园...编写判别给定表达式中所含括号是否正确配对出现的算法(已知表达式已存入数据元素为字符的顺序表中)。要求:顺序栈存储;实现顺序栈的基本操作;调用基本操作完成。
  • 遇到左括号入栈 遇到右符号 从栈中弹出栈顶符号,比配 匹配成功,继续扫描 匹配失败,停止,报错 结束: 所有字符扫描完毕,栈为空:成功 匹配失败或扫描完毕,但是栈不为空:失败 代码 // // Created by xuehu...
  • printf("括号完全匹配\n"); } if(*s->top>0) printf("左括号多余\n"); return Ok; } int main() { char e; Spstack s; printf("输入你要输入的括号\n"); Count(&s,...
  • #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" ...* 1 栈的应用案例 - 就近匹配 * * 1.1 从第一个字符开始扫描 * * 1.2 如果是左括号,入栈 * * 1.3 如果是右括号 * * 1.3.1 如果

空空如也

空空如也

1 2 3 4 5 6
收藏数 120
精华内容 48
关键字:

括号匹配算法c语言

c语言 订阅