资源简介
某个序列完全由圆括号组成,一个“(”和“)”称为一对括号,且序列中的括号成对出现。设n为序列中出现的括号对数,k为序列中括号的最大嵌套深度;那么,序列“((()()()))()(())”的n为8,k为3,请编程判断任意给定的圆括号序列是否是一个深度为k的序列,如果是一个深度为k的序列,还要求输出其括号的对数。
(1)先输入嵌套深度k,然后输入任意一个序列,最后给出判定结果(是,不是,或者输入序列中的括号不配对)
(2)可以反复输入数据,当k=0时,程序结束。当k≠0时输入示例:
3
((()()()))()(())
2
(((()()()))())(())
5
(()()()))()((((()))))
输出的判定结果:
测试1:是一个深度为3的括号序列,括号对数为8
测试2:不是一个深度为2的括号序列,是一个深度为4的括号序列,括号对数为9
测试3:括号不配对
代码片段和文件信息
#include
#include
typedef struct
{
char *S;
int top;
int base;
int size;
}stack;
stack *OPTR;
int pro_depth;//获取用户输入的序列深度
void InitStack(stack *st)
{
st->S = (char*)malloc(20*sizeof(char));
if(!st->S) exit(1);
st->top = st->base = 0;
st->size = 20;
}
/*操作结果:构造一个空栈st*/
void Push(stack *stchar c)
{
if(st->top - st->base >= st->size)
{
st->S = (char*)realloc(st->S(st->size + 10) * sizeof(char));
if(!st->S) exit(1);
st->size += 10;
}
st->S[st->top] = c;
st->top++;
}
/*初始条件:栈st已存在
操作结果:插入元素c为新的桟顶元素
*/
char Gettop(stack *st)
{
char e;
if(st->top == 0 && st->base == 0)
{
exit(1);
}
e = st->S[st->top-1];
return e;
}
/*初始条件:栈st已存在且非空
操作结果:用e返回st的桟顶元素
*/
void Pop(stack *st)
{
if(st->top == st->base)
exit(1);
else
{
st->top--;
}
}
/*初始条件:栈st已存在且非空
操作结果:删除st的桟顶元素
*/
void JudgementResult(stack *stint a int b)
{
if(st->S[st->top-1] == ‘#‘)//若栈st中只有‘#’,则证明匹配成功,否则失败
{
if((b-1) == pro_depth)//若根据序列所求得的深度与用户给定深度相等,则输出是该深度的序列,否则不是
{
printf(“您输入的序列是一个深度为%d的圆括号序列,括号对数为%d\n“b-1a);
getchar();
}
else
{
printf(“您输入的序列不是一个深度为%d的圆括号序列,是一个深度为%d的序列,括号对数为%d\n“pro_depthb-1a);
getchar();
}
}
else
{
printf(“您输入的序列不是匹配的圆括号序列!“);
getchar();
}
pro_depth = 0;
}
/*
操作结果:判断括号序列是否匹配
*/
void ParenthesisMatch()
{
char c;//获取用户输入的序列字符
char a;//获取栈st顶字符
int count1 = 0;//定义栈st当前深度,并取最大值作为序列深度
int count2 = 0;//定义括号对数
int depth = 0;//定义序列深度,该深度为count2的最大值
InitStack(OPTR);
Push(OPTR‘#‘);//现将一个‘#‘压入栈st中,用以最后判定圆括号是否全部出栈
printf(“请输入一个完全由圆括号组成的序列以‘#’表示结束:\n“);
c = getchar();
while(c != ‘#‘)//判断是否读取到括号序列的最后一个字符,读到‘#’时,结束循环
{
if(c != ‘)‘ && c != ‘(‘)//排除其他字符的干扰
{
printf(“请输入正确的格式!\n“);
exit(0);
}
else
{
a = Gettop(OPTR);//读取栈st顶元素
if(c == ‘(‘ || a == ‘#‘)//若桟顶元素为‘(’或‘#’,直接压入栈S中,记录
- 上一篇:音标mp3
- 下一篇:UMI复制工具内含狗数据
相关资源
- linux文件传输项目源码
- 进销存货物管理系统课程设计
- 51单片机资料\\基于单片机的函数信号
- seu编译原理课程设计
- msp430锁相环源程序
- 计算机网络课程设计-家庭无线局域网
- [中南大学版]计算机原理与汇编语言课
- VFP课程设计货物管理系统
- 课程设计农业大棚
- 自动售货机 - VHDL源代码及报告(东南
- 汇编语言课程设计_电子闹钟
- UML课程设计宿舍信息管理
- 电子政务课程设计
- 操作系统课程设计——主存空间的分
- CISCO课程设计
- 传感器课程设计 电子秤的设计
- 51单片机秒表课程设计
- 汇编课程设计 加减乘除四则运算 源代
- 教室管理系统 数据库课程设计
- 网络系统规划与设计课程设计报告附
- 基于CPLD的数字跑表课程设计
- 电力电子技术课程设计 UPS电源
- 基于单片机的智能交通灯PROTEUS仿真图
- MPU6050(STM32 DMP).rar
- 锐格实验.zip
- 基于单片机的压力测量系统设计
- 乒乓球游戏机.pdsprj
- UML课程设计报告
- 电子线路课程设计
- 课程设计题十一:拔河游戏机设计.
评论
共有 条评论