(精选)云南大学软件学院数据结构实验3

合集下载

实验3:使用SQL语句创建并管理数据库

实验3:使用SQL语句创建并管理数据库

序号:云南大学软件学院实验报告课程:数据库原理与实用技术实验学期:2015-2016学年第二学期任课教师:张云春专业:信息安全学号:20141120206 姓名:严鑫成绩:实验3使用SQL语句创建并管理数据库做删除或修改操作时,请注意备份数据库一、CAP数据库1、用T-SQL语句创建并管理数据库CAP:记录创建数据库的SQL语句。

CREATE DATABASE capon(name='cap',filename='d:\cap.mdf',size=5mb,maxsize=30mb,filegrowth=10%)log on(name='caplog',filename='d:\cap.ldf',size=5mb,maxsize=25mb,filegrowth=1mb)2、修改数据库:将“CAP数据库”的数据库最大容量更改为无限制(UNLIMITED),然后将“CAP数据库”的日志文件增长方式改为2MB。

记录SQL语句。

alter database capmodify file(name=cap,filename='d:\cap.mdf',maxsize=unlimited)alter database capmodify file(name=caplog,filename='d:\cap.ldf',filegrowth=2)3、用T-SQL语句在“CAP数据库”创建数据表,数据表的结构见教材。

记录创建表的SQL语句。

create table customers(cid char(10)not null,cname char(10)not null,city char(10)not null,discnt char(10)null,primary key(cid))create table agents(aid char(10)not null,aname char(10)not null,city char(10)not null,[percent]char(10)null,primary key(aid))create table products(pid char(10)not null, pname char(10)not null, city char(10)not null, quantity char(10)not null, price char(10)not null, primary key(pid))create table orders(ordno char(10)not null, [month]char(10)not null, cid char(10)not null,aid char(10)not null,pid char(10)not null,qty char(10)not null, dollars char(10)not null, primary key(ordno))4、向表中添加记录,使用Insert Into 语句分别向四张表中添加教材上的数据记录。

云大软件工程实验三 软件设计

云大软件工程实验三 软件设计

云大软件工程实验三软件设计云大软件工程实验三软件设计1.引言1.1 目的1.2 背景1.3 定义、缩略词和首字母缩略词的解释2.需求分析2.1 功能需求2.1.1 功能12.1.2 功能22.1.32.2 非功能需求2.2.1 性能需求2.2.2 可靠性需求2.2.3 安全性需求2.2.43.概要设计3.1 架构设计3.1.1 客户端-服务器架构3.1.2 分层架构3.1.33.2 模块划分3.2.1 模块13.2.2 模块23.2.33.3 接口设计3.3.1 外部接口3.3.2 内部接口3.3.33.4 数据库设计3.4.1 数据库结构3.4.2 数据库表设计3.4.34.详细设计4.1 模块1设计4.1.1 子模块1.1设计 4.1.2 子模块1.2设计 4.1.34.2 模块2设计4.2.1 子模块2.1设计 4.2.2 子模块2.2设计4.2.35.测试计划5.1 功能测试5.1.1 功能1测试用例 5.1.2 功能2测试用例 5.1.35.2 性能测试5.2.1 性能指标5.2.2 性能测试用例5.2.35.3 安全性测试5.3.1 安全漏洞测试用例5.3.2 安全性能测试用例5.3.36.上线计划6.1 部署步骤6.1.1 部署环境准备6.1.2 代码6.1.36.2 回滚计划6.3 验收标准附件:附件一:需求说明书附件二:设计图纸附件三:测试用例法律名词及注释:1.版权:对作品(例如文学、音乐、软件等)所赋予的法律上的保护,使其著作权人能够授权他人使用或复制作品。

2.专利:对发明的新技术、产品或方法的法律保护,使其专利持有人拥有独占使用或制造的权利。

3.商标:能够识别品牌或企业的标志、名称、符号或设计的法律保护,使其商标持有人能够独占使用。

4.涉密信息:指涉及国家安全、经济安全、社会公共利益和个人隐私安全等方面的机密信息。

数据结构实验三实验报告

数据结构实验三实验报告

数据结构实验三实验报告数据结构实验三实验报告一、实验目的本次实验的目的是通过实践掌握树的基本操作和应用。

具体来说,我们需要实现一个树的数据结构,并对其进行插入、删除、查找等操作,同时还需要实现树的遍历算法,包括先序、中序和后序遍历。

二、实验原理树是一种非线性的数据结构,由结点和边组成。

树的每个结点都可以有多个子结点,但是每个结点只有一个父结点,除了根结点外。

树的基本操作包括插入、删除和查找。

在本次实验中,我们采用二叉树作为实现树的数据结构。

二叉树是一种特殊的树,每个结点最多只有两个子结点。

根据二叉树的特点,我们可以使用递归的方式实现树的插入、删除和查找操作。

三、实验过程1. 实现树的数据结构首先,我们需要定义树的结点类,包括结点值、左子结点和右子结点。

然后,我们可以定义树的类,包括根结点和相应的操作方法,如插入、删除和查找。

2. 实现插入操作插入操作是将一个新的结点添加到树中的过程。

我们可以通过递归的方式实现插入操作。

具体来说,如果要插入的值小于当前结点的值,则将其插入到左子树中;如果要插入的值大于当前结点的值,则将其插入到右子树中。

如果当前结点为空,则将新的结点作为当前结点。

3. 实现删除操作删除操作是将指定的结点从树中移除的过程。

我们同样可以通过递归的方式实现删除操作。

具体来说,如果要删除的值小于当前结点的值,则在左子树中继续查找;如果要删除的值大于当前结点的值,则在右子树中继续查找。

如果要删除的值等于当前结点的值,则有三种情况:- 当前结点没有子结点:直接将当前结点置为空。

- 当前结点只有一个子结点:将当前结点的子结点替代当前结点。

- 当前结点有两个子结点:找到当前结点右子树中的最小值,将其替代当前结点,并在右子树中删除该最小值。

4. 实现查找操作查找操作是在树中寻找指定值的过程。

同样可以通过递归的方式实现查找操作。

具体来说,如果要查找的值小于当前结点的值,则在左子树中继续查找;如果要查找的值大于当前结点的值,则在右子树中继续查找。

云南大学软件学院报告

云南大学软件学院报告

课程:数据结构实验学期:2014-2015学年第一学期任课教师:专业:信息安全学号:姓名:成绩:实验5 图基础实验一、实验目的1.掌握图的存储结构及其遍历。

二、实验软硬件环境(CPU、OS、IDE):三、实验任务(要求写出核心代码,并对运行结果截图)1)使用邻接矩阵和邻接表储表示分别实现如下给定的图1、图2、图3所示图的物理存储结构。

2)在1)所建立的图形存储结构上分别实现深度优先搜索遍历和广度优先搜索遍历,并给出遍历结果(序列)。

图3 有向图实验代码:#include<stdio.h>#include<stdlib.h>#define MAXVEX 20#define OK 1#define ERROR 0#define OVERFLOW -1#define INFINITY 65535#define QueueSize 20 //队列中最大元素个数typedef int QElemType; //队列的元素的类型typedef int VertexType;typedef int EdgeType;typedef enum{False,True}Boolean; //Boolean是布尔类型,其值是ture或false Boolean visited[MAXVEX]; //访问标志的数组。

typedef struct{VertexType vexs[MAXVEX];EdgeType arc[MAXVEX][MAXVEX];int numVertexes,numEdges;} MGraph; //邻接矩阵。

typedef struct EdgeNode //边表结点。

{int adjvex;struct EdgeNode *next;}EdgeNode;typedef struct VertexNode //顶点表结点。

{int data;EdgeNode *firstedge;}VertexNode,AdjList[MAXVEX];typedef struct{AdjList adjlist;int numVertexes,numEdges; //图中当前顶点数边数。

云南大学软件学院综合技能实践-数据库实验指导书

云南大学软件学院综合技能实践-数据库实验指导书

云南大学软件学院综合技能实践——《常用数据库系统的安装和调试》实验指导书第一部分MySQL数据库的安装和使用一、实验目的:1.掌握MySQL数据库环境搭建的具体步骤和操作方法。

2.掌握启动和运行MySQL的方法。

3.掌握使用SQL语句创建数据库、表及向表中插入记录的方法。

二、实验内容预习一、MySQL概述MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。

MySQL AB是由多名MySQL开发人创办的一家商业公司。

它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业模型。

数据库是数据的结构化集合。

它可以是任何东西,从简单的购物清单到画展,或企业网络中的海量信息。

要想将数据添加到数据库,或访问、处理计算机数据库中保存的数据,需要使用数据库管理系统,如MySQL服务器。

计算机是处理大量数据的理想工具,因此,数据库管理系统在计算方面扮演着关键的中心角色,或是作为独立的实用工具,或是作为其他应用程序的组成部分。

关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大的仓库内。

这样就增加了速度并提高了灵活性。

MySQL的SQL指得是“结构化查询语言”。

SQL是用于访问数据库的最常用标准化语言,它是由ANSI/ISO SQL标准定义的。

SQL标准自1986年以来不断演化发展,有数种版本。

在本手册中,“SQL-92”指得是1992年发布的标准,“SQL:1999”指得是1999年发布的标准,“SQL:2003”指得是标准的当前版本。

我们采用术语“SQL标准”标示SQL标准的当前版本。

二、MySQL的安装MySQL是一个开源的用于数据库管理的软件。

可以到MySQL的主页上进行下载,地址为。

登录学院ftp://172.25.10.20/(内网)或者ftp://113.55.4.20(外网) 用户名:zhuyp_std, 密码:std,下载区常用数据库的安装和调试文件夹下载相关软件。

云南大学软件学院数据结构实验报告五

云南大学软件学院数据结构实验报告五

云南大学软件学院数据结构实验报告(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □学期:2012秋季学期任课教师:实验题目: 树及其应用小组长:联系电话:完成提交时间:2012年12月10日云南大学软件学院2012学年秋季学期《数据结构实验》成绩考核表学号: 20111120 姓名:本人承担角色:小组长综合得分:(满分100分)指导教师:年月日(注:此表在难度为C时使用,每个成员一份。

)云南大学软件学院2012学年秋季学期《数据结构实验》成绩考核表学号: 20111120 姓名:人承担角色:组员综合得分:(满分100分)指导教师:年月日(注:此表在难度为C时使用,每个成员一份。

)一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)本实验要求设计一个哈夫曼编码译码器,要求通过统计一段电文中的各字符频率编写哈夫曼码并进行翻译。

首先要解决如何进行哈夫曼编码,然后设计对电文进行编码,最后还有有译码过程。

本程序使用二叉树进行哈夫曼编码,使用文本文档保存电文处理。

利用程序设计的相关知识:贯彻设计程序所必需的五大步骤,目标分析->设计算法->程序编写->后期调试->售后服务的流程完成这个项目。

利用算法设计相关知识:该算法具有有穷性、确定性、可行性、有0个或多个输入、有一个或多个输出、正确性、可读性、健壮性的特性。

离散数学相关知识:正确合理使用与或非之间的关系,进行程序分支判断,保证程序正常进行,以及二叉树的使用。

二、【实验设计(Design)】(20%)本次实验使用C进行编写,自定义函数7个:void SortHufmtree(hufmtree *tree){//将哈夫曼树n个叶子结点由大到小排序Codetype* HuffmanCode(hufmtree *tree){//哈弗曼编码的生成hufmtree* BuildHuffmanTree(hufmtree *tree){//构建叶子结点已初始化的哈夫曼树hufmtree* CreateHuffmanTreeFromSourceFile(){//通过解析源文件建立哈夫曼树hufmtree* Encoding(hufmtree *tree){//对源文件进行编码并保存hufmtree* Decoding(hufmtree *tree)//对存有编码的源文件进行译码并保存主函数为功能选择界面三、【实现描述(Implement)】(30%)主函数显示开始界面,选择相应的功能进行哈夫曼编码译码。

云南大学 软件学院 数据库实验3

云南大学  软件学院  数据库实验3

云南大学软件学院实验报告课程:数据库原理与实用技术实验学期:2011-2012学年第二学期任课教师:专业:学号:姓名:成绩:实验3使用SQL语句创建并管理数据库、数据表一、实验目的掌握查询分析器的使用方法。

掌握T-SQL语句的基本使用。

熟练掌握DDL语句。

熟练掌握DML(Insert, Delete, Update)语句。

二、实验内容1、用T-SQL语句创建并管理数据库“Employee数据库”,数据库要求见实验二。

记录创建数据库的SQL语句。

2、修改数据库:将“Employee数据库”的数据库最大容量更改为无限制(UNLIMITED),然后将“Employee数据库”的日志文件增长方式改为2MB。

记录SQL语句。

3、用T-SQL语句在“Employee数据库”创建数据表,数据表的结构见实验二。

记录创建表的SQL 语句。

4、修改表结构:将雇员信息表person中,Prof的字段长度改为15。

记录SQL语句。

5、向表中添加记录,使用Insert Into 语句分别向四张表中添加符合表结构属性的数据记录,要求每张表至少4条记录,并显示所添加的记录数据。

6、向雇员信息表person中添加记录完成如下操作:(1)、修改表中记录:将“王辉”的部门修改为“003”;(2)、删除记录:删除表中性别为“女”的员工记录;(3)、删除表:将“person”从“Employee数据库”中删除。

三、思考题如数据库表中存在如下记录:表person中的数据现执行:DELETE FROM department WHERE Depton=“001”,执行结果如何?为什么?。

云大软件工程实验三 软件设计

云大软件工程实验三 软件设计

云大软件工程实验三软件设计在软件工程的学习中,实验是帮助我们深入理解理论知识、掌握实际操作技能的重要环节。

实验三的软件设计,更是让我们亲身体验了从需求分析到架构搭建的整个过程,这不仅考验了我们的专业知识,也锻炼了我们的逻辑思维和创新能力。

软件设计,简单来说,就是根据用户的需求,确定软件系统的整体结构、模块划分、数据结构、算法流程等。

它就像是为一座即将建造的大楼绘制蓝图,只有设计得合理、完善,后续的施工(编码)才能顺利进行,最终建成的大楼(软件系统)才能坚固、美观、实用。

在本次实验中,我们首先进行了需求分析。

需求分析是软件设计的基础,就如同盖房子前要明确房子的用途、居住人数、功能需求等。

我们通过与用户的沟通、对业务流程的了解,收集了大量的需求信息,并对其进行整理、分类和优先级排序。

这其中,要特别注意需求的明确性和完整性,避免模糊不清或者遗漏重要需求,否则后续的设计和开发工作将会陷入困境。

接下来是总体设计。

在这个阶段,我们要确定软件系统的整体架构,比如是采用 C/S 架构还是 B/S 架构,是分层架构还是微服务架构等。

同时,还要划分出各个模块,并明确它们之间的关系。

这就像是把大楼划分成不同的区域,如客厅、卧室、厨房等,并确定它们之间的通道和连接方式。

在进行总体设计时,要充分考虑系统的可扩展性、可维护性和性能等方面的要求。

然后是详细设计。

详细设计是对总体设计的进一步细化,包括每个模块的内部结构、算法流程、数据结构、接口定义等。

这就好比是为每个房间确定具体的布局、装修风格、家具摆放等。

详细设计的好坏直接影响到代码的编写质量和效率,因此需要我们非常仔细和认真地对待。

在软件设计过程中,有几个关键的原则需要遵循。

首先是高内聚低耦合原则。

高内聚意味着一个模块内部的各个元素之间联系紧密,共同完成一个明确的功能;低耦合则表示模块之间的依赖关系尽量少,这样当一个模块发生变化时,对其他模块的影响最小。

其次是开闭原则,即软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验难度: A □ B □ C □序号学号姓名成绩指导教师(签名)学期:2017秋季学期任课教师:实验题目:组员及组长:承担工作:联系电话:电子邮件:完成提交时间:年月日一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析)魔王语言的解释规则:大写字母表示魔王语言的词汇,小写字母表示人的词汇语言,魔王语言中可以包含括号,魔王语言的产生式规则在程序中给定,当接收用户输入的合法的魔王语言时,通过调用魔王语言翻译函数来实现翻译。

在 A 的基础上,(根据产生式)自定义规则,将一段魔王的话翻译为有意义的人类语言(中文):输入wasjg,则魔王语言解释为“我爱数据结构”。

运用了离散数学的一些基本知识及程序设计知识。

二、【实验设计(Design)】(20%)(本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等)//---------------抽象数据类型的定义------------------//#define STACK_INIT_SIZE 50#define STACKINCREMENT 10#define OVERLOW -2#define ERROR -1typedef struct {char *base; //顺序栈的栈底指针int top; //顺序栈的栈顶int size; //栈元素空间的大小}SqStack; //结构体类型顺序栈typedef struct {char *base;int front;int rear;}SqQueue; //结构体类型队列//---------------各个模块功能的描述------------------//void Init_SqStack(SqStack &s) //初始化顺序桟void Push_SqStack(SqStack &s, char c) //压入数据int Pop_SqStack(SqStack &s, char &e) //出桟char GetTop_SqStack(SqStack s)//或得栈顶int IsEmpty_SqStack(SqStack s)//判断是否空栈void Init_SqQueue(SqQueue &q)//初始化void En_SqQueue(SqQueue &q, char c)//进队列int De_SqQueue(SqQueue &q, char &e) //出队列void Translate(char c) //打印字符void Reverse(char str[],char strtmp[])//将字符串反向int Execute(char ch[], SqStack &s, SqQueue &q)//魔王语言操作调用关系:三、【实现(Implement)】(30%)(本部分应包括:抽象数据类型各操作的具体实现代码、关键操作的具体算法实现、函数实现,主程序实现等,并给出关键算法的时间复杂度分析。

如有界面则需包括界面的关键实现方法等。

)主程序模块:int main(){char ch[100];char ch1[100];char ch2[100];char e;//********************************************************英文解密printf("请输入魔王语言:");gets(ch);SqStack s;SqQueue q;Init_SqStack(s);Init_SqQueue(q);if(Execute(ch,s,q) == 1){while(De_SqQueue(q,e) == 1){Translate(e);}}elseprintf("输入的括号不匹配!"); //左括号比右括号多,不匹配//********************************************************中文解密printf("\n");printf("请输入魔王语言:");gets(ch1);Init_SqStack(s);Init_SqQueue(q);Reverse(ch1,ch2);{for(int i=0;ch2[i]!='\0';i++)Push_SqStack(s,ch2[i]);while(Pop_SqStack(s,e) == 1){switch(e){case'w':printf("我");break;case'a':printf("爱");break;case's':printf("数据");break;case'j':printf("结");break;case'g':printf("构");break;}}}return 0;}其他函数实现代码见七、【代码】部分。

时间复杂复分析:o(n)。

四、【测试结果(Testing)】(10%)(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析,可附截图)输入的魔王语言为:B(ehnxgz)B翻译的结果为: tsaedsaeezegexenehetsaedsae错误模式:括号匹配错误提示。

输入的魔王语言为:wasjg翻译为汉语的结果为:我爱数据结构结论:此程序能够按照给定的翻译规则解释魔王语言。

五、【实验总结】(10%)(本部分应包括:自己在实验中完成的任务,及存在的问题,所完成实验过程中的具体经验总结、心得)问题关键:1.栈的初始化,入栈出栈操作,栈为空的判断条件,队列的初始化,入队和出队操作,队列为空的判断。

以及队列中最后一个元素被删除后尾指针的修改。

2.主函数的操作。

由于队列和栈的操作始终为同一个,所以在主函数中,采用指针函数的调用,确保操作在同一个队列和栈上。

3.一些细节处理,比如数组操作等。

4.另在查阅资料时候发现:将魔王语言作为一个字符串读入进来,首先检查括号是否匹配,如果不匹配就无法解释。

如果匹配,然后将字符串从尾到头依次压入栈S 中,将栈S中的内容依次弹出压入栈S2中,直至遇到右括号,将其压入栈S1中,并将栈S2弹出依次压入栈S1中,直至遇到左括号压入栈S1中,这样栈S1中存放的内容就是匹配的第一个内重括号,将栈S1栈顶元素左括号弹出,将左括号下面的那个元素保存在e1变量中,然后将其他元素弹出依次压入栈S3中,在将e1与栈S3中依次弹出的元素压入栈S2中,重复这个过程,直至将魔王语言中所有的括号都处理完为止,所以这个思路可以处理多重括号嵌套的问题。

六、思考题或【项目运作描述(Operate)】(10%)(注:选择C难度的才需要填写“项目运作描述”,其他难度的只需完成思考题)(项目运作描述应包括:项目的成本效益分析,应用效果等的分析。

)1.栈:特点就是一个先进后出的结构。

主要用途:函数调用和返回,数字转字符,表达式求值,走迷宫等等。

在CPU内部栈主要是用来进行子程序调用和返回,中断时数据保存和返回。

在编程语言中:主要用来进行函数的调用和返回。

可以说在计算机中,只要数据的保存满足先进后出的原理,都优先考虑使用栈,所以栈是计算机中不可缺的机制。

队列:特点就是一个先进先出的结构。

只要满足数据的先进先出原理就可以使用队列。

2. 可以采用顺序存储结构和链式存储结构,因为他们都是线性表,就像一排站在一条线上的人,位置关系是一个挨一个的,这样的顺序不会改变,而改变点都在头或者尾,仍然保持形态不变的。

七、【代码】(10%)(本部分应包括:完整的代码及充分的注释。

注意纸质的实验报告无需包括此部分。

格式统一为,字体: Georgia , 行距: 固定行距12,字号: 小五)#include<stdio.h>#include<stdlib.h>#include<string.h>#define STACK_INIT_SIZE 50#define STACKINCREMENT 10#define OVERLOW -2#define ERROR -1typedef struct {char *base;int top;int size;}SqStack;typedef struct {char *base;int front;int rear;}SqQueue;void Init_SqStack(SqStack &s) //初始化顺序桟{s.base = (char *)malloc(sizeof(char) * STACK_INIT_SIZE);if(!s.base) exit(OVERLOW);s.top = 0;s.size = STACK_INIT_SIZE;}void Push_SqStack(SqStack &s, char c) //压入数据{if(s.top >= s.size){s.base = (char *)realloc(s.base,(sizeof(char) * (s.size + STACKINCREMENT))); s.size += STACKINCREMENT;}s.base[s.top] = c;s.top ++;}int Pop_SqStack(SqStack &s, char &e) //出桟{if(s.top == 0)return 0;s.top --;e = s.base[s.top];return 1;}char GetTop_SqStack(SqStack s){return s.base[s.top - 1];}int IsEmpty_SqStack(SqStack s){if(s.top == 0)return 1;elsereturn 0;}void Init_SqQueue(SqQueue &q)//初始化{q.base = (char *)malloc(sizeof(char) * STACK_INIT_SIZE);if(!q.base)exit(OVERLOW);q.front = 0;q.rear = 0;}void En_SqQueue(SqQueue &q, char c)//进队列{if((q.rear + 1) % STACK_INIT_SIZE == q.front) exit(ERROR);q.base[q.rear] = c;q.rear = (q.rear + 1) % STACK_INIT_SIZE;}int De_SqQueue(SqQueue &q, char &e) //出队列{if(q.front == q.rear)return 0;e = q.base[q.front];q.front = (q.front + 1) % STACK_INIT_SIZE;return 1;}void Translate(char c) //打印字符{printf("%c",c);}void Reverse(char str[],char strtmp[])//将字符串反向{int len = strlen(str);int i,t=0;for(i=len - 1;i>=0;i--)strtmp[t++] = str[i];strtmp[t] = '\0';}int Execute(char ch[], SqStack &s, SqQueue &q){SqStack ss;Init_SqStack(ss);char ch1[100];char ch2[100];char ch3[100];char c1,e,c;int flag=0,t = 0,i=0,len;Reverse(ch,ch1); //将输入进来的ch 反向for(i=0;ch1[i]!='\0';i++)Push_SqStack(s,ch1[i]);while(Pop_SqStack(s,e) == 1){if(flag != 0 && e != ')') //此处是为了将找到第一个左括号之后的字符全部进入括号操作桟ss 中 {Push_SqStack(ss,e);if(GetTop_SqStack(ss) == '(') //遇到左括号 '(' flag加1{flag ++;}continue;}if(e == 'B') //如果是字符'B'就进桟{Push_SqStack(s,'A');Push_SqStack(s,'d');Push_SqStack(s,'A');Push_SqStack(s,'t');}else if(e == 'A') //如果是字符'A'就相对应的字符进队列{En_SqQueue(q,'s');En_SqQueue(q,'a');En_SqQueue(q,'e');}else if(e == '('){Push_SqStack(ss,e);flag ++; //flag每加一次,都有一个左括号,用flag来表示左括号的数量}else if(e == ')'){if(flag == 0){printf("输入的括号不匹配!\n"); //左括号和右括号不匹配,右括号比左括号多exit(-1);}t=0;while(GetTop_SqStack(ss) != '('){Pop_SqStack(ss,c);ch2[t++] = c;}Pop_SqStack(ss,c); //弹出左括号 '('flag --; //每弹出一个左括号就flag减少 1ch2[t] = '\0';len = strlen(ch2);if(len == 0) //此处是处理空括号的情况continue;c1 =ch2[len - 1];t = 0;for(i=0;i<len - 1;i++) //此步是对括号中的操作{ch3[t++] = c1;ch3[t++] =ch2[i];}ch3[t++] = c1; //对第一个字符的操作(在最后一个字符处加上第一个字符:上一步的操作时只操作到最后第二个字符)ch3[t] = '\0';if(IsEmpty_SqStack(ss) == 1) //如果操作括号的ss桟里面为空,则说明处理过程结束, ch3字符串现在是标准处理好的字符串,将ch3字符串倒着进入原来的桟s{Reverse(ch3,ch2);for(i=0;ch2[i]!='\0';i++){Push_SqStack(s,ch2[i]); //进入之前操作的桟}}else //如果括号操作桟ss 不空,则将操作好的一个括号中的字符压入字符操作桟ss 等待下一个右括号字符 ')'的输入{for(i=0;ch3[i]!='\0';i++){Push_SqStack(ss,ch3[i]);}}}elseEn_SqQueue(q,e);}if(flag != 0)return 0;elsereturn 1;}int main(){char ch[100];char ch1[100];char ch2[100];char e;printf("请输入魔王语言:");gets(ch);SqStack s;SqQueue q;Init_SqStack(s);Init_SqQueue(q);if(Execute(ch,s,q) == 1){while(De_SqQueue(q,e) == 1){Translate(e);}}elseprintf("输入的括号不匹配!"); //左括号比右括号多,不匹配//********************************************************中文解密printf("\n");printf("请输入魔王语言:");gets(ch1);Init_SqStack(s);Init_SqQueue(q);Reverse(ch1,ch2);{for(int i=0;ch2[i]!='\0';i++)Push_SqStack(s,ch2[i]);while(Pop_SqStack(s,e) == 1){switch(e){case'w':printf("我");break;case'a':printf("爱");break;case's':printf("数据");break;case'j':printf("结");break;case'g':printf("构");break;}}}return 0;}(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。

相关文档
最新文档