资源简介
某个序列完全由圆括号组成,一个“(”和“)”称为一对括号,且序列中的括号成对出现。设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复制工具内含狗数据
相关资源
- FTP课程设计(服务端+客户端)
- 高频电子线路课程设计报告收音机
- 直流稳压电源的课程设计、安装及调
- EDA课程设计_密码锁
- 单片机课程设计 篮球计分器
- 数据结构课程设计 6 1 彩票系统
- 端口扫描课程设计详细的报告
- 步进电机课程设计(个人设计)
- 校园网络规划与设计课程设计
- 编译原理课程设计:词法语法编译器
-
simuli
nk 课程设计 qpsk - 武汉理工大学 单片机课程设计 16*16点
- 数据库VFP课程设计
- 分页系统模拟实验 操作系统 课程设
- MP3文件ID3v2ID3v2APEv2标签读取
- 课程作业:模拟仓库管理系统
- 模拟段页式虚拟存储管理中地址转换
- 硬件课程设计—流水灯(quartus软件
- 超市收银系统eclipse access大学课程设计
- 航空订票系统_数据结构课程设计
- c 课程设计 职工信息管理系统
- 汇编语言,课程设计,红绿灯
- 机床液压系统课程设计卧式钻床动力
- 课程设计蔬菜大棚自动控制系统,包
- 密码学课程设计:DES加密解密算法的
- 一个简单实用个人日记管理系统
- 带时间温度显示的室内灯光控制系统
- 操作系统课程设计完整版
- 磁盘调度算法的模拟实现及对比
- PL/0功能扩充break功能
评论
共有 条评论