c语言版数据结构(奇迹冬瓜)-栈实战(3)括号匹配的检测

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

//c语言版数据结构(奇迹冬瓜)-栈实战(3)括号匹配的检测

/*
初始化栈
初始化标志位
循环标志位不为1
{
   输入一个字符并判断是否为括号
   如果是<[{(则进栈
   如果是>]})则出栈
   {
      判断出栈的字符和输入的字符是否相等
	  {
	      相等则继续
		  否则标志位为0
	   }
   }
   判断栈空否
   {
      栈空则标志位为0
   }
}
判断栈空的情况
{
   栈空匹配
   否则不匹配
}
*/


//---------头文件----------
#include<stdio.h>
#include<stdlib.h>

//---------宏定义----------

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define TRUE 1
#define ERROR 0
#define OVERFLOW -2

//---------替换和结构体-----------

typedef int Bool;
typedef struct
{
	int *base,*top;
	int stacksize;
}SqStack,*Stack;

//--------函数列表--------
Bool InitStack(Stack s);
Bool StackEmpty(Stack s);
Bool Push(Stack s,char e);
Bool Pop(Stack s,char *e);

//--------主函数---------

void main()
{
	SqStack sq,*s=&sq;
	int flag=0;
	char ch,e;
	InitStack(s);
	while('\n'!=(ch=getchar()))
	{
		if('('==ch||'['==ch||'{'==ch||'<'==ch)
		{
			Push(s,ch);
		}
		if(')'==ch||']'==ch||'}'==ch||'>'==ch)
		{
			Pop(s,&e);
			if(('('==e&&')'==ch)||('{'==e&&'}'==ch)||('['==e&&']'==ch)||('<'==e&&'>'==ch))
			{
				flag=1;
			}
			else
			{
				flag=0;
			}
		}
	}
	if(1==flag&&StackEmpty(s))
	{
		printf("括号匹配!检测结束.\n");
	}
	else
	{
		printf("括号不匹配!检测结束.\n");
	}
	getchar();
	getchar();
}

//--------其余函数--------

Bool InitStack(Stack s)
{
	if(!(s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int))))
	{
		exit(OVERFLOW);
	}
	s->top=s->base;
	s->stacksize=STACK_INIT_SIZE;
	return TRUE;
}

Bool StackEmpty(Stack s)
{
	return s->base==s->top?TRUE:ERROR;
}

Bool Push(Stack s,char e)
{
	if(s->top-s->base>=s->stacksize)
	{
		if(!(s->base=(int *)realloc(s->base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(int))))
		{
			exit(OVERFLOW);
		}
		s->top=s->base+s->stacksize;
		s->stacksize+=STACKINCREMENT;
	}
	*(s->top++)=e;
	return TRUE;
}

Bool Pop(Stack s,char *e)
{
	if(s->base==s->top)
	{
		return ERROR;
	}
	*e=*(--s->top);
	return TRUE;
}


 

数据结构c语言版的应用单括号匹配(实验报告) 输入一包含(和)的字符串,检测括号是否匹配(其中括号能嵌套括号),并输出括号是否匹配的信息(匹配,缺少左括号,缺少右括号)。 立即下载

相关推荐

C语言实现检查括号匹配

从头到尾扫描字符串,对不同种类的括号,遇到开括号就入,遇到闭括号则检查是否与顶开括号类型相同,相同则出,否则报错括号不匹配。 #include "stdafx.h" #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; // 在start与end中搜索匹配 int fun(cha...

LearningNote 1万+

括号匹配编程题--python

#!/usr/bin/python #-*- coding: utf8 -*- def isMatched(inStr):     """         Judge whether the input match rules         @author: ken         >>>isMatched('{}{}(())')         >>>True    

yuquanmm的专栏 1202

括号匹配-Python

题目: 输入多组数据,左边括号匹配不上,用“I”标记为 ,右边括号匹配不上用“?”标记 输入: ((((jei)fr)? 输出: ((((jei)fr) II 输入: )))() 输出 )))() ??? 思路就是使用Python的列表,模拟堆,入,使用列表的追加和remove等方法替代 def kuohao(s): a = [] mark = [] ...

sunny的博客 2517

括号匹配的检验

表达式中含有两种括号’( )‘和’[ ]’,其嵌套顺序随意,但是必须能对等互补,即’ ( [ ( ) ] ) ‘为正确格式,’ ( [ ) ] ( '为错误格式 解如下----------------------------------------------函数: #include <stdio.h> #include <stdlib.h> #include &lt...

双手敲键盘 529

C语言数据结构之利用进行括号匹配的检验

括号匹配的检验:    eg: [([][][)]]    不匹配        [([][])] 匹配思路:   0x0.首先建立两个,并对其初始化      0x1.对表达式进行遍历,将相邻两个不能匹配的入A,然后检测空间A是否为偶数,如果是表明有存在的可能,如果不是则提示不匹配。0x2.检测空间A是否为偶数,如果是表明有存在的可能,如果不是则提示不匹配,遍历A,将不匹配的入...

bool的博客 8560

字符串括号匹配检测

题目 输入一行字符串包含(),如果匹配成功,返回0;否则返回字符串,并在未匹配的括号下面做标记(用A表示箭头指向上面),显示错误信息。例如: 输入: a=1+(4*7))/(8+8) 输出: a=1+(4*7))/(8+8) A 没有匹配的左括号 ...

zzyczzyc的博客 1269

括号匹配(java)

给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。输入格式:输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。输出格式:如果括号配对,输出yes,否则输出no。输入样例1:sin(10+20) 输出样例1:yes 输入样例2:{[}] 输出样例2:no程序代码:import j...

qq_35989000的博客 2250

7-1 括号匹配检测

给出一串包含 () 、[ 和 ] 的字符串,字符串在以下三种情况下为合法的: 1)字符串为空; 2)如果A和B都是合法的,那么AB也是合法的; 3)如果A是合法的,那么(A)和[A]也是合法的。 试判断输入的字符串是否合法。 输入格式: 输入包括一串由若干个 () 、 [ 或 ] 组成的字符串,字符串长度不超过100。 输出格式: 如果该字符串合法,输出“Yes”;否则输出“No”。 ...

qq_45550552的博客 1298

数据结构括号匹配的检验C语言

算法 算法: -遇到普通字符忽略 遇到左括号入 遇到右符号 从中弹出顶符号,比配 匹配成功,继续扫描 匹配失败,停止,报错 结束: 所有字符扫描完毕,为空:成功 匹配失败或扫描完毕,但是不为空:失败 代码 // // Created by xuehu96 on 2019-08-09. // #include <stdio.h> #include "../linkst...

xuehu96的博客 2136

MFC与坦克大战系列(奇迹冬瓜)---chapter3(坦克属性定义与坦克的平滑移动)

今天我们继续坦克大战系列。我将沿用chapter2的代码继续为大家讲解。由于计划的修订第三节先完成我方坦克的移动。主要的操作流程如下: ()首先打开上一节的代码,然后在资源解决方案中头文件和主文件的地方添加程序要自己定义的坦克的类和方法。 主要操作位右键头文件->头文件->新建项->.h文件 命名为Thing 在Thing.h里面添加的代码如下 附图。 #include "stdafx.

runner2012的专栏 7386

MFC与坦克大战系列(奇迹冬瓜)---chapter2(photoshop与TransparentBlt---快速生成背景与透明位图处理)

今天继续MFC与坦克大战系列.做程序是要有团队合作。毕竟大多数程序员不可能做到美工和程序都精通。但是只有一个人的时候。就需要快捷的生成比较看的过去的图片供游戏所需。就拿坦克大战这个游戏程序来说。刚开始构思的时候就需要考虑到它的扩展性。所以在做坦克大战之前首先要做的就是地图编辑器。那么既然是个坦克大战。直白的说各种障碍该有吧、草坪、沙丘、海水、树木等。原来先用java写过一个地图编辑器先试验一下。之

runner2012的专栏 6627

VC开发圣诞程序雪花飞舞的世界

又到一年圣诞。为了烘托气氛。在两天前。写了个圣诞的小程序。 首先这个程序用到比较多的知识点 众所周知。一般情况下在MFC类库里进行png的贴图都有点麻烦 因为MFC一般用bmp格式的贴图。 于是我采用GDI的贴图形式贴png图 采用分层窗口,透明处理,以及鼠标穿透来使窗口透明,界面变到桌面 本来可以采用定时器来进行雪花的时间设定。但是为了更好的控制。我采用了一条线程来处理 自设一个I

runner2012的专栏 5962

GDI VC++重绘控件做的音乐播放器

用GDI重绘控件做的播放器。播放MP3格式的音乐。音乐部分用MCI接口。控件部分进行了自绘。 源码暂时在优化。还有小功能没完善。比如歌曲列表歌曲的存储。不用没关闭打开一次就要添加一次。比如歌词同步显示。还有播放模式还没做。就只有顺序播放模式。 等功能完善源码优化后。在年后放出代码。谢谢大家支持。放出程序。大家可以先看看小样。 开发语言VC++/MFC 开发环境VS2010 全

runner2012的专栏 5948

MFC与坦克大战系列(奇迹冬瓜)---chapter4(坦克总程序代码)

今天是圣诞节。祝大家圣诞快乐。因为今天在尝试写个小的圣诞程序。进度如下。无法控制雪花的路径。 今天会为大家发放整个坦克大战的代码。本来计划再用两节结束的。但是快要期末考试了。等过了这阵。会为大家呈现新的游戏。现在把整个游戏代码发给大家参考。 链接如下。不要积分。 可能我在操作的时候把rc资源有点损坏。可能造成vc打不开的问题。但是主要代码可以用记事本打开。 再次截图 开场动画1

runner2012的专栏 5447

(游戏编程-01)MFC版坦克大战(奇迹冬瓜)

经过二次整合 重新放出MFC框架下的坦克大战 采用小窗口 多线程 双缓冲 动画帧化 碰撞检测 接口封装 混音 事件延迟等 力求做到代码与美工的双向化

runner2012的专栏 5340

c语言版数据结构奇迹冬瓜-串(定长顺序存储各项操作)

//-----头文件------ #include #include //------宏定义------ #define MAXSTRLEN 255 #define OVERFLOW -2 #define TURE 1 #define ERROR 0 //-------类型名替换-------- typedef unsigned char SString[MAXSTRLEN+1]; typed

runner2012的专栏 5107

c语言版数据结构奇迹冬瓜-队列实战(1)离散事件模拟(银行排队)

//c语言版数据结构奇迹冬瓜-队列实战(1)离散事件模拟(银行排队) //------头文件--------- #include #include #include //-------宏定义--------- #define TURE 1 #define ERROR 0 #define OVERFLOW -2 //------替换及结构体------ typedef int Boo

runner2012的专栏 4854

C编程解线性代数二阶三阶矩阵(奇迹冬瓜

(一) 小编语     大学数学三大基础:概论,线性,高数,用计科系软件角度运用数学观点理论编写程序来解决作业是一个极富创造力的工程,现在就线性代数第一章的理论来进行程序(c基础语言)的编写以求达到简化作业的目的,当然,最终目的还是为了睡个好觉,首先进行这个课题的理论积累。 (二)     二阶行列式理论基础     二阶行列式推导过程:     ①a11x1+a12x2=b1

runner2012的专栏 4372
上一篇: c语言版数据结构(奇迹冬瓜)-栈实战(2)整数进制转换<10进制到2,8,16进制>
下一篇: c语言版数据结构(奇迹冬瓜)-栈实战(4)表达式求值
utral董东东
博客等级 码龄16年 158粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值