数据结构课程实验报告

问题描述:数据结构完整版实验报告 大家好,给大家分享一下数据结构课程设计实验报告完整版,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

数据结构实验的实验报告怎么写

数据结构课程实验报告的相关图片

(一)实验目的和要求

实验目的:熟练掌握线性表的基本操作在顺序存储结构上的实现。

实验要求:任选一种高级程序语言编写源程序,并调试通过,测试正确。

(二)实验主要内容

1. 建立n个元素的顺序表SqList,实现顺序表的基本操作;

2. 在SqList的元素i之后插入一个元素,实现顺序表插入的基本操作;

3. 在sqList中删除指定位置i上的元素,实现顺序表删除的操作。

4.

(三)主要仪器设备

PC机,Windows XP操作平台,Visual C++。

(四)实验原理

顺序表操作:定义一个顺序表类,该类包括顺序表的存储空间、存储容量和长度,以及构造、插入、删除、遍历等操作的方法。

(五)实验步骤与调试分析:

顺序表操作:先构造有四个数据的顺序表,在第4个位置插入9,再读取并删除第3个元素。

(六)实验结果与分析:

顺序表操作:

(七)附录(源程序):

#include<iostream>。

using namespace std;。

const int LIST_INIT_SIZE=10; //顺序表初始长度。

const int LISTINCREMENT=5; //顺序表长度增值。

class SqList

int *L; //定义存储空间起始地址。

int length; //顺序表当前长度。

int listsize; //顺序表当前存储容量。

bool flag; //设立标志值记录操作成败。

public:

SqList(int v1,int v2,int v3,int v4); //构造函数构造并初始化顺序表。

void ListInsert(int i,int e); //实现将e插入到顺序表中第i个位置。

void ListDelete(int i,int &e); //实现删除顺序表第i个元素。

void ListVisit(); //实现顺序表的遍历。

};

SqList::SqList(int v1,int v2,int v3,int v4) //构造并初始化顺序表。

{

L=new int[LIST_INIT_SIZE];。

if(!L) //分配失败。

{

flag=false;

cout<<"ERROR"<<endl;。

}

else //分配成功,进行初始化。

{

*L=v1;

*(L+1)=v2;

*(L+2)=v3;

*(L+3)=v4;

length=4;

listsize=LIST_INIT_SIZE;。

flag=true;

}

void SqList::ListInsert(int i,int e) //插入元素。

int *p,*q;

int t;

if(i<1||i>length+1) cout<<"ERROR"<<endl; //插入位置错误。

else

{

if(length==listsize) //空间不足,增加分配。

{

p=new int[listsize+LISTINCREMENT];。

if(!p) cout<<"ERROR"<<endl; //分配失败。

else //分配成功,复制顺序表。

{

for(t=0;t<length;t++)。

*(p+t)=*(L+t);。

q=L;L=p;p=q;。

delete q;

listsize+=LISTINCREMENT;。

}

}

for(t=length;t>=i;t--) 。

*(L+length)=*(L+length-1);。

*(L+i-1)=e;

length++; //插入成功,表长加1。

}

void SqList::ListDelete(int i,int &e)。

if(i<1||i>length) cout<<"ERROR"<<endl; //删除位置错误。

else

{

e=*(L+i-1);

while(i<length) 。

{

*(L+i-1)=*(L+i);。

i++;

}

length--; //删除成功表长减1。

}

void SqList::ListVisit() //遍历。

int i;

for(i=0;i<length;i++)。

cout<<" "<<*(L+i);。

cout<<endl;。

int main()

int e=0;

SqList list(2,3,4,5);。

list.ListVisit();。

list.ListInsert(4,9);。

list.ListVisit();。

list.ListDelete(3,e);。

list.ListVisit();。

cout<<"e="<<e<<endl;。

return 0;

《数据结构 课程设计》表达式求值 实验报告的相关图片

《数据结构 课程设计》表达式求值 实验报告

数据库课程设计

“数据库课程设计”是数据库系统及应用课程的后续实验课,是进一步巩固学生的数据库知识,加强学生的实际动手能力和提高学生综合素质。

一、 课程设计目的

课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。课程设计的目的:

1. 加深对数据库原理、程序设计语言的理论知识的理解和应用水平;

2. 在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;

3. 学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;

4. 为毕业设计和以后工作打下必要基础。

二、课程设计要求

运用数据库原理的基本理论与应用知识,在微机RDBMS(SQL Server)的环境上建立一个数据库应用系统。要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。

1. 用E-R图设计选定题目的信息模型;

2. 设计相应的关系模型,确定数据库结构;

3. 分析关系模式各属于第几范式,阐明理由;

4. 设计应用系统的系统结构图,确定系统功能;

5. 通过设计关系的主码约束、外码约束和使用CHECK实现完整性控制;

6. 为参照关系设计插入、删除、修改触发器;

7. 实现应用程序设计、编程、优化功能;

8. 对系统的各个应用程序进行集成和调试,进一步优化系统功能、改善系统用户界面完成实验内容所指定的各项要求;

9. 分析遇到的问题,总结并写出课程设计报告;

10. 自我评价

三、实验环境

开发环境VC++、C#、ASP或JAVA;ODBC/JDBC;数据库SQL Server。

四、上机实现内容

1. 创建数据库的结构

2. 创建各基本表的结构

3. 编制系统各功能模块,完成数据的管理(增、删、改)及统计查询。对于程序运行界面不做考核的重点。

五、课程设计考核

1.对学生到实验室的情况进行不定时统计;

2.出勤率+课程设计报告+课程设计所开发的应用系统+其他(上机抽查和提问)=综合评定成绩。

3.课程设计结束时请将下列资料上交:

(1) 课程设计报告;

(2) 所开发的应用系统的源程序、安装和使用说明;

(3) 将(1)(2)中的资料压缩成一个压缩包,压缩包文件的命名规则:班级+学号(末2位)+姓名(例如:计科090101王鹏晓);

(4) 班长将本班每人的(3)中的压缩包刻录成光盘连同打印的课程设计报告收齐,交给任课教师。

附录﹑课程设计题目

题目1:课程设计选题管理系统(1,24)

包括三大模块:

 课程设计题目维护与查询:题目的添加、修改和删除;按题目类型、名称和关键字查询以及已选与未选题目的查询;

 学生信息维护与查询;

 学生选题维护与管理:学生选题及查询;

具体功能细化:

 前台学生选题:学生上网登录系统进行选题;

 前台教师出题:

 教师添加、修改和删除题目;

 教师确认学生的选题;

 后台管理出题和选题

 添加用户及权限

题目2:书店管理系统(23)

包括四大模块:

 售书(图书销售管理及销售统计,查询)

 进书(通过书目,向发行商下定单订购图书)

 库存(图书库存,统计)

 相关查询

题目3:图书馆管理系统(11)

包括四大模块:

 图书的查询

 借书

 还书

 图书的预约

题目4:库存管理系统(8)

包括四大模块:

 商品目录建立

 商品入库管理

 商品出库管理

 商品库存查询

题目5:工资管理系统(1 人)41。

包括四大模块:

 系统数据初始化

 员工基本信息数据的输入、修改、删除;

 员工个人信息及工资表的查询;

 员工工资的计算;

参考数据如下:

 员工基本状况:包括员工号、员工姓名、性别、所在部门、工资级别、工资等级等。

 工资级别和工资金额:包括工资等级、工资额。

 企业部门及工作岗位信息:包括部门名称、工作岗位名称、工作岗位工资等。

 工龄和工资金额:包括工龄及对应工资额。

 公司福利表:包括福利名称、福利值。

 工资信息:包括员工号、员工姓名、员工基础工资、员工岗位工资、员工工龄工资、公司福利、员工实得工资。

题目6:酒店客房管理系统 (1 人)14,26。

包括四大模块:

 前台操作:包括开房登记、退房结账和房状态查看 。

 预订管理:包括预订房间、预订入住和解除预订 。

 信息查询:包括在住客人列表、预订客人列表和历史客人列表 。

 报表统计:包括开房记录统计、退房结账和预订房间统计。

 员工基本信息数据的输入、修改、删除;

参考数据如下:

 住店管理:客人姓名、证件号码、房号、入住时期、预计离开日期、结账离开日期、应付金额 。

 客人信息:姓名、性别、证件类型、证件号码、联系电话 。

 房间信息:房号、房类型、价格、押金、房状态 预订房间。

 客人姓名、性别、房类型、房号、价格、证件类型、证件号码、联系电话、入住日期、预计离开日期、历史信息。

题目7:旅行社管理信息系统(1 人)3。

包括如下模块:

 旅游团队、团队团员及旅游路线相关信息的输入 。

 旅游团队、团队团员及旅游路线相关信息的维护(修改、浏览、删除和撤销)

 旅游团队管理信息的查询(如按团队编号)

 团队团员基本情况的查询(可选多种方式)

 旅游路线相关信息的查询(如按线路编号)

 旅游路线排行榜发布。

 数据备份,更改密码。

参考数据如下:

 团员信息表(路线编号,团队编号,团员编号,姓名,性别,电话,通信地址,身份证号码, 团费交否,备注)

 线路信息表(路线名称,团费,简介,图形,路线编号)

 团队信息表(团队编号,路线编号,团员人数,出发日期,返程日期)

 旅游团队信息表(团队编号,团队负责人,团员人数,建团时间,是否出发,团费,盈亏)

密码信息(操作员,密码)

题目8:报刊订阅管理系统 (1 人)25,35。

包括如下模块:

 登录功能:登录统为身份验证登录。分为管理员登录和一般用户登录。分别通过不 同的用户名和密码进入报刊订阅管理界面,新的用户需要注册。

 录入新信息功能:对于管理员,包括新用户信息和新报刊信息的录入功能,信息一旦 提交就存入到后台数据库中;普通用户自行注册进行可以修改个人信息。

 订阅功能:用户可以订阅报刊,系统自动计算所需金额,并显示在界面上;管理员不 可订阅报刊,必须以用户身份订阅报刊。

 查询功能:用户可以查询并显示自己所订阅的信息;管理员可以按人员、报刊、部门 分类查询。查询出的信息显示在界面上,并且可以预览和打印出结果。

 统计功能:管理员可以按用户、部门、报刊统计报刊的销售情况,并对一些重要的订 阅信息进行统计;普通用户可以统计出自己的订阅情况,并且可以预览和打印出结果。

 系统维护功能:数据的安全管理,主要是依靠管理员对数据库里的信息进行备份和恢 复,数据库备份后,如果出了什么意外可以恢复数据库到当时备份的状态,这提高了系统和 数据的安全性,有利于系统的维护。

参考数据如下:

 管理员表(Adminuser) :管理员名、密码。

 部门表(Department) :部门号,部门名。

 用户表(Users) :用户账号、密码、真实姓名、身 份证号、联系电话,联系地址,部门号(和部门表有关)等。

 报刊类别表(NewspaperClass) :分类编号、 分类名称。

 报刊信息表(Newspaper) :报刊代号、报刊名称、出版 报社、出版周期、季度报价、内容介绍、分类编号(和报刊类别表有关)等。

 订单表(Order) :订单编号、用户编号、报刊代号、订阅份数、订阅月数等。

题目9:计算机等级考试教务管理系统(2 人)32。

包括四大模块:

 用户设置:对考点代码,考点名称进行设置,设置用户与密码;系统复位:即清除上一次考试数据(在之前存入历史)

 报名管理: 报各库录入(姓名不能不空,之间不能有空格) 增加、删除、修改、浏览。

 准考证管理:准考证生成规则:xxx+yy+zz+kk,其中 XXX 为考点代码;YY 为语言代码,XX 为考场号,KK 为座位号 同一级别、语言应根据报名初始库信息按随机数生成准考证,同一考点最多可有 99*30=2970 名考生;如已生成准考证号,再重新生成准考证号,应该给予提示。 准考证打印。

 考务管理:考生信息查询、浏览、打印。

 成绩管理:成绩数据录入、接收 成绩合成(总成绩=笔试成绩*0.6+上机成绩*0.4),按大于或等于 60 合格 。

参考数据如下:

 初始报名表(准考证号(为空) ,报名号(主键) ,级别+语言种类(外键) ,姓名,性别, 出生年份,民族,身份证号,联系地址,联系电话,照片,备注,参加培训)

 含准考证号的报名表(准考证号(为主键) ,报名号,级别+语言种类(外键) ,姓名,性别, 出生年份,民族,身份证号,联系地址,联系电话,照片,备注,参加培训)

 成绩表(准考证号,笔试成绩,上机成绩,总成绩) 级别语言代码表(级别语言代码,级别+语言)

 用户信息表(考点代码,考点名称,用户名,密码)

题目10:人事管理系统(1 人)21。

包括四大模块:

 登录管理:包括操作员管理,口令设置,权限管理。

 人员管理:包括人事数据维护、人事信息查询和人事信息统计 。

 工资管理

 部门管理:包括部门表,职称表和年份表。

 查询及报表打印

参考数据如下:

 人事表(编号,姓名,性别,出生日期,工作日期,部门代码,职称,婚否,简历,相片)

 工资表(基本工资,岗位津贴,奖励,应发工资,水电,保险,实发工资)

 部门表(代码,部门名称)

 职称表(职称代码,职称名称)

 年份表(年份代码,年份名称)

 操作员表(操作员代码,操作员姓名,口令,部门,电话)

系统日志表(操作员代号,操作员姓名,登录时间,离开时间)

题目11:商品销售管理系统(1 人)19。

包括四大模块:

 用户登录

 基本信息管理:包括销售情况、商品信息、库存表、员工表等信息的录入、浏览、修改、撤销、删除和查询等 。

 商品销售管理:包括商品售出、退回和入库 。

 盘点:包括库存盘点、当日销售盘点。

参考数据如下:

 商品信息表(商品编号,商品名称,品牌,型号,销售单价) 商品编号=类别代码(1 位)+品名代码(1 位)+品牌代码(2 位)+型号代码(2 位)

 销售情况表(成交编号,商品编号,销售数量,总金额,销售日期,员工编号)

 库存表(商品编号,供货商编号,进货日期,进货价,库存数量)

 员工表(员工编号,员工姓名,性别,基本工资,职务,密码)

 供货商表(供货商编号,供货商名称,所在地,联系电话)

 员工资料表(员工编号,员工姓名,是否党员,简历,照片)

题目12:学生成绩管理系统(1 人)29。

包括四大模块:

 基本数据管理:包括院系管理,专业管理(设置院系下面的专业),班级管理(设置专业下面的班级),课程管理(设置相应专业下面的课程)

 学生信息管理:包括基本信息录入、基本信息修改。

 学生成绩管理:包括学生成绩录入、学生成绩修改 。

 信息查询:包括基本信息查询、成绩信息查询、学校人数统计 。

 系统管理:用户管理、数据备份和系统帮助。

参考数据如下:

 院系信息(院系代码,院系名称)

 院系专业信息(班级、院系代码,专业)

 学生基本信息(班号,学号,姓名,性别,出生年月,籍贯,政治面貌,身份证号,入学年月,家庭地址,邮政编码,图片信息,备注)

 学生成绩表(学号,课号,成绩,备注)

 课程表(课号,课程名称,学期,备注)

 班表(班号,班级名称)

 用户信息表(用户名,密码,用户标识)

题目13:火车售票管理系统(4 人)36。

包括四大模块:

 售票管理

 订票管理

 信息查询

 系统维护

参考数据如下:

 车次信息表(车次,始发站,终点站,发车时间,到达时间)

 订票信息表(车次,座位号,发车时期,发车时间,座位等级,票价)

 车次座位等级分配及座位占用表(车次,座位号,座位等级,票价,占用标志)

 用户信息表(用户名,密码,用户标识)

题目14:小型物业管理系统(1 人)

包括四大模块:

 房源管理:对原始资料的录入、修改、查询和刷新。一般用户可以查询与房间有关 的统计资料;物业主管可其进行增、删、改、插等操作。

 租房管理:对房产出租,退租以及租房面积调整。其中物业主管可对其进行房租金 额计算和收款操作,一般用户对其查询。

 水电处理:根据租房资料,结合当月水、电量进行分摊,完成应收水电费。其中物 业主管对其进行计算,其他查询。

 交款处理:提供收款和发票打印以及交款数据查询。

 查询处理:对租房资料、交款资料,发票资料进行查询。

参考数据如下:

 房源资料(名称,面积,月租,物业,仓库)

 租房资料(名称,面积,单位,月租,物业,押金,仓库)

 水电资料(单位,电量,水量,电费,水费)

 交费资料(收费项目,应收日期,应收金额,已收金额,未收金额,本次收款)

 发票资料(单位,房租,电费,水费,物业)

 权限资料(用户,密码,房源管理,租房管理,水电管理,交费管理,发票管理,系统维护) 其中系统管理员,有权进行系统维护;单位内部物业主管,有权进行物业资源调配、单元出 租,退租和收款开票操作;物业管理员,有权进行水电处理和收款处理等操行;租户代表, 有权进行种类费的查询操作 。

题目15:机房收费管理系统(1 人)7,34。

包括四大模块:

 登录模块

 上机管理模块 说明:上机登记时,余额不足 3 元或卡处于挂失状态,则拒绝登记 每位同学的一次上机形成一条记录,每 36S 遍历一次上机记录表,对表中所有正上机字段为 TRUE 的记录的上机用时增加 36S,同时从上机卡表的余额减少 。

 上机卡管理模块

 充值挂失模块

 查找统计模块:统计某天上机的总时数、每次上机的平均时数和机房的收入;某学 生上机的次数、上机总时数、每次上机平均时间;挂失和查询余。

参考数据如下:

 上机卡(卡号,姓名,专业班级,余额,状态) 状态的取值有:正常(能自费上机)

 挂失上机记录(卡号,上机日期,开始时间,上机用时,正上机,管理号代码),上机用时记录学生上机时间(S);正上机是一个布尔型,为 True 表示正上机,每 36 秒刷新 其上机用时并扣除上机费用,为 False 表示上机结束。上机记录表永久保存,用于事后查询 和统计 管理员(代码,姓名,口令)

题目16:高校药房管理(1 人)31。

包括四大模块:

 基础数据处理:包括医生和药剂师名单的录入,修改,删除及查询。

 营业数据处理:包括药品进货上柜,处理划价,配药,柜存药品查询,处方综合查 询,交接班结转清。

参考数据如下:

 药品信息表(货号,货名,计量单位,进货数量,进货单价,出售单价,进货日期,收货人 和供应商)

 处方信息(编号,患者姓名,医生姓名,药剂师姓名,处方日期,配药日期) 处方药品信息(处方编号,药品货号,计量单位,配药数量,销售单价,已配药否)

 医生名单和药剂师名单表(姓名)

题目17:考勤管理系统(2 人)40。

包括四大模块:

 记录每个员工每天所有进入公司的时刻和离开公司的时刻。

 每天结束时自动统计当天的工作时间。

 每天结束时自动统计当天迟到或早退的次数。

 对于弹性工作制,每天结束时自动统计当月的工时,并自动算出当月欠缺或富余的 时间。

 每个月末统计该月的工作时间判断是束足够。

 每个月末统计该月的工作天数并判断是否足够。

 管理人员查询并修改工作时间(特殊情况下修改)

 管理人员账户管理(如设置密码等)

 管理人员设定早退及迟到的条件,每个月的工作时间。

 管理人员设定每个月的工作日期及放假日期。

参考数据如下:

 员工信息(工号,姓名,年龄,入职时间,职位,性别,密码)。

 配置信息(上班时间小时,上班时间分钟,下班时间小时,下班时间分钟,每天工作时间)

 每月统计数据表(工号,姓名,剩余的时间,迟到的次数,早退的次数,工作天数)

 每天统计信息表(工号,姓名,小时,分钟,动作,时间) 其中动作指的时入或离开公司 。

题目18:单位房产管理系统(2 人)33,10。

包括四大模块:

 系统模块:完成数据库维护、系统关闭功能 。

 物业费用模块:完成本月物业的计费、历史资料查询和财务部门接口传送数据、物 业相关费用单价设置。

 房屋资源模块:对房屋资源进行添加、列表显示、查询。

 职工信息模块:对职工进行添加、列表显示、查询以及相应部门、职务进行维护。

 帮助模块:对用户使用本系统提供在线帮助。

参考数据如下:

 职工(编号,姓名,性别,参加工作时间,行政职务,专业技术职务,评上最高行政职务时 间,评上最高专业技术职务时间,双职工姓名,现居住房号,档案号,房产证号,所在部门 编号,是否为户主)

 部门(编号,部门名称) 住房级别表(编号,级别,住房标准,控制标准,级别分类)

 房产情况(编号,房号,使用面积,现居住人 id,上一个居住人 id,最早居住人 ID,阳台面积)

 物业费用(编号,房号,水基数,水现在值,电基数,电现在值,燃气基数,燃气现在值, 当前年份,当前月份)

 价格标准(编号,水单价,电单价,燃气单价)

题目19:标准化考试系统 (2 人)15,39。

功能要求: 设计一个简单的标准化考试系统,仅有单项选择题、多项选择题和判断题功能即可。

包括四大模块:

 题库管理:实现试题的录入、修改、删除功能;

 考试子系统:能够实现考生做题、结果自动存入到数据库中,有时间提示;

 选择身份(登录)功能:系统能够记录考生输入的登录信息及交卷信息;

 自动评分功能:考生交卷后能自动评分;

 查看成绩功能:能够查询考生相关信息(包含成绩等)。

参考数据如下:

其它可供选择的题目:

网上教务评教系统130,127,133 16。

学生日常行为评分管理系统232,110,230。

网上鲜花店 38

基于BS结构的工艺品销售系统12。

基于BS结构的校园二手物品交易网站 37。

大学生就业管理系统201,208,234。

题库及试卷管理系统

数据库原理及应用

课程设计报告

题目: 课程设计选题管理系统 。

所在学院:

班 级:

学 号:

姓 名: 李四 。

指导教师:

2011年12月 日

目录

一、 概述

二、需求分析

三、概念设计

四、逻辑设计

五、系统实现

六、小结

一、概述

数据结构表达式求值实验报告的相关图片

数据结构表达式求值实验报告

算术表达式求值演示

一、概述

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

在这次的课程设计中我选择的题目是算术表达式求值演示。表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法对算术表达式求值的过程。深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。

二、 系统分析

1. 以字符列的形式从终端输入语法正确的、不含变量的整数表达式。利用已知的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例子在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。

2. 一般来说,计算机解决一个具体问题时,需要经过几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解决此数学模型的算法,最后编出程序,进行测试,调试直至得到想要的答案。对于算术表达式这个程序,主要利用栈,把运算的先后步骤进行分析并实现简单的运算!为实现算符优先算法,可以使用两个栈,一个用以寄存运算符,另一个用以寄存操作数和运算结果。

3. 演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算机语言的转化。 4. 程序执行时的命令:

本程序为了使用具体,采用菜单式的方式来完成程序的演示,几乎不用输入什么特殊的命令,只需按提示输入表达式即可。(要注意输入时格式,否者可能会引起一些错误) 5. 测试数据。

算术表达式求值演示

一、概述

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

在这次的课程设计中我选择的题目是算术表达式求值演示。表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法对算术表达式求值的过程。深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。

二、 系统分析

1. 以字符列的形式从终端输入语法正确的、不含变量的整数表达式。利用已知的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例子在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。

2. 一般来说,计算机解决一个具体问题时,需要经过几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解决此数学模型的算法,最后编出程序,进行测试,调试直至得到想要的答案。对于算术表达式这个程序,主要利用栈,把运算的先后步骤进行分析并实现简单的运算!为实现算符优先算法,可以使用两个栈,一个用以寄存运算符,另一个用以寄存操作数和运算结果。

3. 演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算机语言的转化。 4. 程序执行时的命令:

本程序为了使用具体,采用菜单式的方式来完成程序的演示,几乎不用输入什么特殊的命令,只需按提示输入表达式即可。(要注意输入时格式,否者可能会引起一些错误) 5. 测试数据。

操作集合:

(1)void InitStack1(SqStack1 &S1);//声明栈建立函数 (2)void InitStack2(SqStack2 &S2);//声明栈建立函数。

(3)void evaluate(SqStack1 &S1,SqStack2 &S2);//确定如何入栈函数 (4)void Push1(SqStack1 &S1,char e);//声明入栈函数 (5)void Push2(SqStack2 &S2,float e);//声明入压栈函数 (6)char GetTop1(SqStack1 &S1);//声明取栈顶元素函数 (7)float GetTop2(SqStack2 &S2);//声明取栈顶元素函数 (8)char Pop1(SqStack1 &S1);//声明出栈函数 (9)float Pop2(SqStack2 &S2);//声明出栈函数 (10)char Compare(char m,char n);//声明比较函数。

(11)float Operate(float a,char rheta,float b);//声明运算函数 (12)void DispStack1(SqStack1 &S1);//从栈底到栈顶依次输出各元素 (13)void DispStack2(SqStack2 &S2);//从栈底到栈顶依次输出各元素 }ADT SqStack。

结构分析:

栈中的数据节点是通过数组来存储的。因为在C语言中数组是用下标从零开始的,因此我。

们在调用他们的数据是要特别注意。指针变量的值要么为空(NULL),不指向任何结点;要么其值为非空,即它的值是一个结点的存储地址。注意,当P为空值时,则它不指向任何结点,此时不能通过P来访问结点,否则会引起程序错误。如果输入的数字不符合题目要求,则会产生错误结果。

算法的时空分析:

时间和空间性能分析:时间上,对于含n个字符的表达式,无论是对其进行合法性检测还是对其进行入栈出栈操作n次,因此其时间复杂度为O(n)。空间上,由于是用数组来存储输入的表达式,用栈来存储运算中的数据和运算符,而栈的本质也用到的数组,数组在定义时必须确定其大小。在不知表达式长度的情况下确定数组的长度确非易事,此时极易造成空间的浪费,因此空间性能不是很好。

数据结构的实验报告 .1、顺序存储结构下线性表的各种操作 2、链式存储结构下线性表的各种操作的相关图片

数据结构的实验报告 .1、顺序存储结构下线性表的各种操作 2、链式存储结构下线性表的各种操作

据结构实验报告

题目: 编制一个表达式求值的程序。

一. 需求分析

1. 本演示程序中,利用堆栈存储结构存储读入的运算符,输入的限定范围是数字(0—9),

以及+*/()。输入字符串限定长度为20,可以根据需要进行改变。如果遇到不是以上范围或者连续输入两个运算符,如:++,则会提示输入错误,请重新输入。输出的结果是转换后的后序表达式,以及float型数字,不会含有非法字符。

2. 演示程序采用的是文件输入,只需要在源代码中输入要输入的文件的地址,然后就可以。

在文本文件中进行输入,运行过程中会自动读取,输出文本输入的表达式,及运算结果。 3. 程序执行的命令包括:

1) 构造字符优先级比较表,比较优先关系 2)文件输入 3)构造堆栈,运算符入栈 4)堆栈输出,变为后序表达式,并计算 5)输出结果,结束 4.测试数据 。

文件地址:C:\\Users\\lenovo\\Desktop\\4.txt 1) 输入:(35+20/2)*2-4/2+12 。

正确输出结果是:100.0000 2)输入:(35+20/2)*2-/2+12 。

结果是:error input 。

3) 输入:a+ar/3=135 。

结果是:error input 。

二.概要设计

为实现以上程序功能,需运用堆栈用于存储运算符,因此需要定义抽象数据类型。 1. 堆栈的抽象数据类型定义为: ADT stack{ 。

数据对象:D={ai|ai∈正整数,i=0,1,2,3,…n,及{+-*/()}} 数据关系:R1={<ai-1,a1>|ai-1,ai∈D} 基本操作: Init stack(&s)

操作结果:构造一个空的堆栈s Push stack(&s, e) 初始条件:存在堆栈s 。

操作结果:元素e压入堆栈s,top+1 Pop (&s,e)

初始条件:栈s已经存在且非空 。

操作结果:删除栈顶元素e,输出其值,top-1 。

2. 程序包含三个模块: 1) 运算符优先关系模块 2) 主程序模块; Int main(void){ 。

初始化; Do{

接受命令; 处理命令; }while(“命令”=”退出”); } 3)堆栈模块 。

三.详细设计

1.程序源代码解释为:

float Result(int c,float r[],int top){ //定义输出结果 int j; 。

float temp; 。

switch(c){ //以下是四种基本运算的计算定义,运算完成后直接将top-1值赋予top 。

case 42:r[top-1]=r[top-1]*r[top];top=top-1;break; //乘法 case 43:r[top-1]=r[top-1]+r[top];top=top-1;break;///加法 case 45:r[top-1]=r[top-1]-r[top];top=top-1;break;//减法 case 47:r[top-1]=r[top-1]/r[top];top=top-1;break;// 除法 。

case 94:for(j=1,temp=r[top-1];j<r[top];j++) //平方或者几次方的运算 temp=r[top-1]*temp; //循环相乘 r[top-1]=temp; top=top-1; break; } return(r[top]); } 。

if(temp1!=1){

while(top>=1){ //栈不空的时候,栈中元素赋给houzhi,并计数 biaozhi[b++]=i; 。

houzhi[i]=duizhan[top-1]; top=top-1;i=i+1; } 。

max=i; //从0到i循环输出后序表达式 for(i=0,b=0;i<max;i++){ if(i!=biaozhi[b]) 。

printf("%d ",houzhi[i]) //输出后序表达式中的数字。

数据结构的课程设计报告要怎么写啊?

顺序存储结构下线性表:

#include <stdio.h>。

#include <stdlib.h>。

#define MAXSIZE 100 //存储定义。

typedef int ElemType;。

typedef struct list。

ElemType *elem;。

int listsize;。

int length;

}Sqlist;

void initlist_sq(Sqlist *L) //初始化线性表。

L->elem=(ElemType *)malloc(MAXSIZE*sizeof(ElemType));。

if(!L->elem) exit(0);。

L->length=0;。

L->listsize=MAXSIZE;。

void insert_sq(Sqlist *L,int n,ElemType x) //插入数据元素。

int i,j=0;

if(n>=MAXSIZE||n>=L->length||n<=0) 。

{

printf("n is error\n"); //非法位置,无法运行。

return ;

}

for(i=L->length-1;j<L->length-n;i--,j++)。

{

L->elem[i+1]=L->elem[i]; //结点后移。

}

L->elem[n]=x;。

L->length++; //表长加1。

//printf("**********Sqlist inserted**********\n"); 。

void creat_sq(Sqlist *L) //创建线性表。

int tablen,i=0;。

ElemType temp;。

printf("please input the table length\n"); 。

scanf("%d",&tablen); //定义表长。

printf("please input a serial number\n");。

do

{

scanf("%d",&temp); //输入数据元素 。

L->elem[i++]=temp;。

L->length++; 。

}while((i<tablen)&&(i<L->listsize ));。

void display_sq(Sqlist *L) //打印线性表。

int i;

i=0;

printf("\n**********Sqlist **********\n"); 。

do

{

printf("%d\t",L->elem[i]); //从第一个元素开始打印 。

}

while(++i<L->length); 。

int Search_sq(Sqlist *L,ElemType x) //按值查找数据元素。

int i;

i=0;

do

{

if(L->elem[i]==x)。

return i+1;

}

while(++i<L->length); 。

return 0;

ElemType Search_sq_byV(Sqlist *L,int n) //下标法查找数据元素。

//ElemType temp;。

//printf("%d",L->elem[n-1]);。

return L->elem[n-1];。

void delete_sq(Sqlist *L,int pos) //删除数据元素。

int i;

i=0;

do

{

L->elem[pos-1]=L->elem[pos]; //结点前移。

pos++;

}while(++i<L->length);。

L->length--; //表长减一。

int main(void) //主函数。

Sqlist L1;

ElemType temp;。

char cmd;

int i=0;

initlist_sq(&L1);。

printf("X=EXIT,C=CREAT,P=DISPLAY,I=INSERT,S=SEARCH,D=Delete,V=Pos`find\n");。

while(1)

{

cmd=getchar();。

switch(cmd)

{

case 'C':

case 'c':

creat_sq(&L1);。

display_sq(&L1);。

printf("\nX=EXIT,C=CREAT,P=DISPLAY,I=INSERT,S=SEARCH,D=Delete,V=Pos`find\n");。

break;

case 'D':

case 'd':

printf("please input the number pos to be deleted\n");。

scanf("%d",&i);。

delete_sq(&L1,i);。

display_sq(&L1);。

printf("\nX=EXIT,C=CREAT,P=DISPLAY,I=INSERT,S=SEARCH,D=Delete,V=Pos`find\n");。

break;

case 'I':

case 'i':

printf("please input the number to be inserted\n");。

scanf("%d",&temp);。

printf("please input the position to be inserted(1~100)\n");。

scanf("%d",&i);。

insert_sq(&L1,i-1,temp);。

display_sq(&L1); 。

printf("\nX=EXIT,C=CREAT,P=DISPLAY,I=INSER,S=SEARCT,D=Delete,V=Pos`find\n"); 。

break;

case 'S':

case 's':

printf("please input the number wanted\n");。

scanf("%d",&temp);。

printf("pos is %d\n",Search_sq(&L1,temp));。

printf("\nX=EXIT,C=CREAT,P=DISPLAY,I=INSERT,S=SEARC,D=Delete,V=Pos`find\n");。

break;

case 'V':

case 'v':

printf("please input the pos wanted\n");。

scanf("%d",&i);。

printf(" elem is%d\n",Search_sq_byV(&L1,i));。

printf("\nX=EXIT,C=CREAT,P=DISPLAY,I=INSERT,S=SEARC,D=Delete,V=Pos`find\n");。

break;

case 'P':

case 'p':

display_sq(&L1);。

printf("\nX=EXIT,C=CREAT,P=DISPLAY,I=INSERT,S=SEARC,D=Delete,V=Pos`find\n");。

break;

case 'X':

case 'x':

free(L1.elem);。

return 1;

default:break;。

}

}

//getchar();

return 1;

原文地址:http://www.qianchusai.com/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%AF%BE%E7%A8%8B%E5%AE%9E%E9%AA%8C%E6%8A%A5%E5%91%8A.html

写一个你最喜欢小动物的作文,写一个你最喜欢小动物的作文三年级

写一个你最喜欢小动物的作文,写一个你最喜欢小动物的作文三年级

和妈妈大扫除看图写话,和妈妈大扫除看图写话二年级下册

和妈妈大扫除看图写话,和妈妈大扫除看图写话二年级下册

象征幸运的狗狗名字,象征幸运的狗狗名字三个字英文

象征幸运的狗狗名字,象征幸运的狗狗名字三个字英文

怎样能够说一口流利的英语,怎样能够说一口流利的英语呢

怎样能够说一口流利的英语,怎样能够说一口流利的英语呢

描写小狗脾气的作文,描写小狗脾气不好的句子

描写小狗脾气的作文,描写小狗脾气不好的句子

caption是什么

caption是什么

没上网课的检讨书300字,没上网课的检讨书300字左右

没上网课的检讨书300字,没上网课的检讨书300字左右

写动物的作文的评语,写动物作文评语大全小学通用

写动物的作文的评语,写动物作文评语大全小学通用

我喜欢的动物蚂蚁200字,我喜欢的动物蚂蚁普通话三分钟

我喜欢的动物蚂蚁200字,我喜欢的动物蚂蚁普通话三分钟

照相机记忆法骗局,照相机记忆法骗局是真的吗

照相机记忆法骗局,照相机记忆法骗局是真的吗