太原理工大学 软件学院《数据结构B》--实验指导书-杨永强
太原理工大学 软件学院《数据结构B》--实验指导书-杨永强
《数据结构B》实验指导书计算机科学与技术学院计算机科学与技术系2011年09月目录实验一线性表 (1)实验二树 (5)实验三图 (7)实验四查找 (11)实验五内排序 (13)实验一线性表【目的与要求】本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。
要求仔细阅读并理解下列例题,上机调试并编译执行通过,并观察其结果,然后独立完成后面的实验内容,写出完整的实验报告。
编写程序过程中注意养成良好的编程风格与习惯,要求程序结构清晰,程序缩进,适当注释。
【参考例题】[问题描述]用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。
[输入]初始字符串,插入位置,插入字符,删除字符。
[输出]已建立链表(字符串),插入字符后链表,删除字符后链表,逆转后链表。
[存储结构]采用链式存储结构[算法的基本思想]建立链表:当读入字符不是结束符时,给结点分配存储空间,写数据域,将新结点插到表尾;插入字符:根据读入的字符在链表中找插入位置,将新结点插入到该位置之前;删除字符:根据读入的删除字符在链表中找到被删结点后,将其从链表中删除;链表逆转:从链表的第一个结点开始对所有结点处理,将每个结点的前驱变为它的后继;打印链表:从链表的第一个结点开始,依次打印各个结点的数据域。
[参考源程序]#define NULL 0typedef struct node{char a;struct node *link;}node,*nodelink;void readlink(nodelink head){nodelink p,q;char c;p=head;printf("Input a linktable(a string):");scanf("%c",&c);if (c=='\n') printf("This string is empty。
数据结构实验指导书
数据结构实验指导书适用所有开设数据结构实验的专业雷文赵攀编写概述一、课程目的《数据结构》是一门实践性很强的软件基础课程,为了学好这门课,每个学生必须完成一定数量的上机作业。
通过本课程的上机作业,要求在数据结构的选择和应用、算法的设计及实现等方面加深对课程基础内容的理解,同时,实验题中的问题比平时的练习题要复杂,也更接近实际,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
本课程实验的目的是旨在使学生进一步巩固课堂上所学的理论知识;深化理解和灵活掌握教学内容;培养学生算法设计的能力和解决实际问题的程序设计的能力。
二、实验名称与学时分配三、实验要求⒈问题分析充分地分析和理解问题本身,弄清要求做什么,包括功能要求、性能要求、设计要求和约束以及基本数据特性,数据间的联系等。
⒉数据结构设计针对要求解决的问题,考虑各种可能的数据结构,并且力求从中出最佳方案(必须连同算法一起考虑),确定主要的数据结构及全程变量。
对引入的每种数据结构和全程变量要详细说明其功能、初值和操作特点。
⒊算法设计算法设计分概要设计和详细设计,概要设计着重解决程序的模块设计问题,这包括考虑如何把被开发的问题程序自顶向下分解成若干顺序模块,并决定模块的接口,即模块间的相互关系以及模块之间的信息交换问题.详细设计则要决定每个模块内部的具体算法,包括输入、处理和输出,采用类C语言描述。
⒋测试用例设计准备典型测试数据和测试方案,测试数据要有代表性、敏感性,测试方案包括模块测试和模块集成测试。
⒌上机调试对程序进行编译,纠正程序中可能出现的语法错误,测试前,先运行一遍程序看看究竟将会发生什么,如果错误较多,则根据事先设计的测试方案并结合现场情况进行错误跟踪,包括打印执行路径或输出中间变量值等手段。
三、实验考核每次实验结束后,均应上交实验报告。
数据结构课程实验成绩单独考核,占1个学分。
实验报告应包括如下内容:1、问题描述:简述题目要解决的问题是什么。
太原理工大学软件工程《程序设计技术B》实验手册
本科实验报告课程名称:程序设计技术B实验地点:明相校区软件学院机房专业班级:软件工程XXXX班学号:xxxxxxxxx 学生姓名:XXX指导教师:曹棣2014年12 月29日实验名称实验一 C语言的运行环境和运行过程实验二 C语言运算符和表达式实验目的和要求1.学会安装C语言编译系统,如:Turbo C、Win-TC、Visual C++等;2.学会在上述某种编译系统中程序的编辑、编译、连接和运行;3.通过运行简单的C程序,初步了解C源程序的特点;4.理解C语言的数据类型,掌握各种常量的表示方法,变量的定义、初始化和赋值;5.学会使用C语言的算术运算符以及表达式的求值过程。
实验内容1.下载并安装C,语言编译系统,设置编辑。
2.输入并运行第1章例1-1和例1-2中程序,并记录遇到的问题和解决方法。
3.输入并运行第2章例2-2和例2-3中程序,并记录遇到的问题和解决方法。
4.求下面算术表达式的值(先自己分析,再试着用程序求解,比较得到的结果是否一致)。
⑴设x=2,a=7,y=4,求x+a%3*(x+y)%2/4;⑵设a=2,b=3,x=3.5,y=2.5,求(float)(a+b)/2+(int)x%(int)y;5.写出下面表达式运算后a的值,设原来a=10。
设a和n已定义成整型变量(先自己分析,再试着用程序求解,比较得到的结果是否一致)。
⑴ a+=a ⑵ a-=2⑶ a*=2+3 ⑷ a/=a+a⑸ a%=(n%=2),n的值等于5; ⑹ a+=a-=a*=a;主要仪器设备台式或笔记本电脑实验记录(写出实验内容中2,3,4,5的程序代码和运行结果)(可分栏或加页) 1.2 #include<stdio.h>void main(){ float a,b,sum,average;scanf("%f,%f",&a,&b);sum=a+b;average=(a+b)/2;printf("sum=%f,average=%f\n",sum,average);}1.3 #include<stdio.h>void main(){ float s[10],max,min,sum,score;int i;for(i=0;i<10;i++)scanf("%f",&s[i]);max=min=sum=s[0];for(i=1;i<10;i++){if(max<s[i]) max=s[i];if(min>s[i]) min=s[i];sum+=s[i];}score=(sum-max-min)/8;printf("score=%.4f",score); }1.4#include<stdio.h>void main(){ int x=2,y=4,a=7,t;t=x+a%3*(x+y)%2/4;printf("%d\n",t);}1.4-2#include <stdio.h>void main(){ int a=2,b=3,i;float x=3.5,y=2.5,t;t=(float)(a+b)/2+(int)x%(int)y; printf("%f",t);}1.5#include <stdio.h>int a=10;void main (){ int t1,t2,t3,t5,t6,t7,t8;float t4;t1=a+a;t2=a-2;t3=a*(2+3);t4=(float)a/(a+a);t5=a%(5%2);t6=a*a;t7=t6-t6;t8=t7;printf("%d,%d,%d,%.2f,%d,%d",t1,t2,t3,t4,t5,t8); }实验名称实验三简单程序、分支程序和循环程序设计实验四数组应用程序设计实验目的和要求1.理解C语言程序的基本结构和实现基本结构的语句;2.熟练应用赋值、输入和输出语句;3.理解并掌握关系运算符、逻辑运算符及其表达式的使用;4.熟练掌握if语句、switch语句、while语句、do—while语句和for语句的用法;5.掌握数组的定义、初始化和数组元素的引用方法;6.掌握与数组有关的算法,如:求最大(小)值,排序等;7.理解字符数组与字符串的关系,掌握字符串的处理过程和常用字符串处理函数。
太原理工大学软件测试实验报告
1笔记本电脑(windows操作系统)
2QTP9.2
四、操作方法与实验步骤
1.安装QTP9.2,启动该软件。
先解压文件,解压后先查看“安装重要说明”文件,根据该文件说明进行安装,安装成功后需要重新启动电脑,根据软件提示操作即可。安装完成后启动
“QuickTest Professional”,进入软件主界面。
scanf("%d%d%d",&x,&y,&z);
if(x>0&&z<10)
{
k=x*y+1;
j=sqrt(k);
}
if(x==4||y>5)
j=x*y+10;
j=j%3;
printf("j的值为:%d\n",j);
}
三、主要仪器设备
笔记本电脑
四、操作方法与实验步骤
⑴画出程序的控制流图(用题中给出的语句编号表示)。
测试用例6
测试用例7
六、实验结果与分析
实验所得结果与测试用例结果预期一致,通过白盒测试的方法的各种覆盖方法对代码进行了测试,没有发现错误。
七、讨论、心得
通过这次试验,深刻体会了白盒测试的各种路径覆盖测试方法,也了解了这
些覆盖方法的关系和优缺点。
实验名称
实验二黑盒测试方法
实验地点
逸夫楼202
实验时间
2016年9月28
⑵分别以语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖和基本路径覆盖法设计测试用例,并写出每个测试用例的执行路径(用题中给出的语句编号表示)。
⑶编写完整的C程序(含输入和输出),使用你所设计的测试用例运行上述程序段。完整填写相应的测试用例表(语句覆盖测试用例表、判定覆盖测试用例表、条件覆盖测试用例表、判定/条件覆盖测试用例表、条件组合覆盖测试用例表、路径覆盖测试用例表、基本路径测试用例表)。
太原理工大学数据结构实验报告
本科实验报告课程名称:数据结构实验项目:线性结构、树形结构、图结构、查找、排序实验地点:行知楼A210专业班级:服工1302班学号:2013006828 学生姓名:董倩指导教师:2015年 1 2 月24 日线性结构一、实验目的和要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。
要求仔细阅读并理解下列例题,上机通过,并观察其结果,然后独立完成后面的实习题。
二、实验内容和原理习题[问题描述]设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。
[输入]顺序表的长度,初始化顺序表数据,插入数据X。
[输出]已建立顺序表,输出插入X后的顺序表。
[存储结构]采用顺序存储结构[算法的基本思想]建立顺序表(用数组的形式实现)。
在表中从后往前查找要插入元素的位置,直到查找到第一个比X小的数,并从表的最后一元素依次后移,把要插入元素插入搜查找位置。
三、主要仪器设备使用的计算机惠普:硬件配置Win7、软件环境win-TC四、操作方法与实验步骤[习题源程序]#include"stdio.h"#define MAXSIZE 100#define RIGHT 1#define ERROR 0typedef int ElemType;typedef struct{ElemType elem[MAXSIZE];int last;}SeqList;void Initlist(SeqList *L){L->last=-1;}void putseqList(SeqList *L,int n){int i;for(i=0;i<n;i++)scanf("%d",&(L->elem[i]));L->last=L->last+n;}int LenList(SeqList *L){int Len;Len=L->last+1;return Len;}int PositionList(SeqList *L,int X) {int j;for(j=0;j<=L->last;j++)if(X<L->elem[j])return j+1;return (L->last+1);}int InsList(SeqList *L,int i,int e) {int k;if((i<1)||(i>L->last+2)){printf("the position is wrong");return(ERROR);}if(L->last>=MAXSIZE-1){printf("the list is full");return(ERROR);}for(k=L->last;k>=i-1;k--)L->elem[k+1]=L->elem[k];L->elem[i-1]=e;L->last++;return(RIGHT);}int OutputSeqList(SeqList *L){int i;for(i=0;i<=L->last;i++)printf("%d,",L->elem[i]);return(L->elem[i]);}void main(){int s,c;SeqList L;Initlist(&L);printf("please input the length: ");scanf("%d",&s);printf("please input the list: ");putseqList(&L,s);LenList(&L);printf("Please input an element to insert : ");scanf("%d",&c);InsList(&L,PositionList(&L,c),c);OutputSeqList(&L);printf("\n");getch();}五、实验数据记录和处理六、实验结果与分析此程序的优点是算法简单,易于实现。
太原理工大学数据结构B,C语言版的课件
软件学院2012年9月
1. 掌握数据结构的基本概念、基本原理和基本方法。
2. 掌握数据的逻辑结构、存储结构及其基本操作的实现,能够对算法进行基本的时间复杂度与空间复杂度的分析。
3. 能够运用数据结构的基本原理和方法进行问题的分析和求解;具备采用c或c++或JAVA语言设计与实现算法的能力。
课堂讲授48学时
包括抽象、实现和评价三个层次,讲授四种基本的逻辑结构的特点、实现。
实验8学时
熟悉四种基本结构的实现及其应用。
第一章绪论2学时
第二章线性表5学时
第三章栈和队列4学时
第五章数组3学时
第六章树和二叉树8学时 第七章图9学时
第九章查找6学时
第十章内部排序9学时
复习2学时
教材:
数据结构(C语言版)严蔚敏吴伟民编著
参考书:
1.数据结构黄国瑜叶乃菁编著清华大学出版社
2.数据结构算法设计指导胡学刚编著清华大学出版社
光盘:
数据结构(C语言版)严蔚敏吴伟民编著
精品课程网站:
/kecheng1site01/。
太原理工大学数据结构试题库及答案
数据结构试题库及答案第一章概论一、选择题1、研究数据结构就是研究( D )。
A. 数据的逻辑结构B. 数据的存储结构C. 数据的逻辑结构和存储结构D. 数据的逻辑结构、存储结构及其基本操作2、算法分析的两个主要方面是( A )。
A. 空间复杂度和时间复杂度B. 正确性和简单性C. 可读性和文档性D. 数据复杂性和程序复杂性3、具有线性结构的数据结构是( D )。
A. 图B. 树C. 广义表D. 栈6、算法是( D )。
A. 计算机程序B. 解决问题的计算方法C. 排序算法D. 解决问题的有限运算序列7、某算法的语句执行频度为(3n+nlog2n+n2+8),其时间复杂度表示( C )。
A. O(n)B. O(nlog2n)C. O(n2)D. O(log2n)11、抽象数据类型的三个组成部分分别为( A )。
A. 数据对象、数据关系和基本操作B. 数据元素、逻辑结构和存储结构C. 数据项、数据元素和数据类型D. 数据元素、数据结构和数据类型二、填空题三、综合题1、将数量级O(1),O(N),O(N2),O(N3),O(NLOG2N),O(LOG2N),O(2N)按增长率由小到大排序。
答案:O(1) O(log2N) O(N) O(Nlog2N) O(N2) O(N3) O(2N)一、填空题1. 数据结构被形式地定义为(D, R),其中D是数据元素的有限集合,R是D上的关系有限集合。
2. 数据结构包括数据的逻辑结构、数据的存储结构和数据的运算这三个方面的内容。
3. 数据结构按逻辑结构可分为两大类,它们分别是线性结构和非线性结构。
8.数据的存储结构可用四种基本的存储方法表示,它们分别是顺序、链式、索引、散列。
9. 数据的运算最常用的有5种,它们分别是插入、删除、修改、查找、排序。
二、单项选择题( C )2. 数据结构中,与所使用的计算机无关的是数据的 结构;A) 存储 B) 物理 C) 逻辑 D) 物理和存储三、简答题1.数据结构和数据类型两个概念之间有区别吗?答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素。
2010数据结构实验指导书
《数据结构B》实验指导书目录实验说明及要求 0实验一线性表..................................................................................... 错误!未定义书签。
实验二栈............................................................................................ 错误!未定义书签。
实验三队列 ........................................................................................ 错误!未定义书签。
实验四树.. (7)实验五散列表..................................................................................... 错误!未定义书签。
实验六排序 ........................................................................................ 错误!未定义书签。
实验七查找 ........................................................................................ 错误!未定义书签。
实验八图. (20)综合设计考核 (23)附录1 在V isual 2003中建立、编译和运行程序 (24)附录2 使用教材提供的参考文件的方法 (29)附录3 如何设置编译器生成C代码 (32)参考文献 (33)实验说明及要求一实验说明《数据结构B》实验是为了辅助《数据结构B》(双语教学)而开展的。
因为理论教学采用了两种教材(《数据结构与算法分析》的C++版和C语言描述版),所以在实验时程序的编写既允许采用C语言,又允许采用C++语言。
太原理工大学数据库实验
实验报告课程名称:数据库系统原理实验项目:认识DBMS系统、交互式SQL、数据完整性、用户鉴别与数据控制实验地点:实验室210专业班级:软件1334学号:学生姓名:指导教师:宋晓涛2015年5月8日学院名称软件学院专业班级1334 实验成绩学生姓名学号实验日期2015.0课程名称数据管理库系统概论实验题目认识DBMS系统一、实验目的和要求(1)通过对SQL Server 2005/2008数据库管理系统的使用,了解DBMS的工作原理和系统构架。
(2)熟悉SQL Server提供的管理工具(3)熟悉使用SQL Server Management Studio创建数据库对象二、主要仪器设备计算机:HP-6470b windows7 64 位运行环境: SQL Server 2008R2三、实验内容及要求3.1 安装SQL Server1.在安装过程中记录安装的选择,并且对所作的选择进行思考,为何要进行这样的配置,对今后运行数据库管理系统会有什么影响。
2.理解默认实例、命名实例的含义3.了解SQL Server的身份认证模式,初步了解SQL Server的安全性。
4.了解SQL Server提供的服务。
5.检查SQL Server安装是否成功。
3.2 管理和使用SQL Server了解SQL Server如何通过它提供的工具对数据库服务器进行管理和使用的。
1、启动、暂停和停止SQL Server学会运用SQL Server配置管理或SQL Server Management Studio启动和停止SQL Server 的各种服务。
2、了解SQL Server的管理工具初步了解SQL Server的提供了哪些主要管理工具和它们的功能。
3、学会使用SQL Server联机丛书学会SQL Server联机丛书查询SQL命令语法格式、SQL Server数据库的概念、术语等内容。
3.3 熟悉使用SQL Server Management Studio了解SQL Server Management Studio的基本用法,能熟练使用它管理数据库服务器和数据库对象。
太原理工大学软件工程程序设计实验报告
《程序设计》课程设计姓名:学号:班级:软件工程1334班指导教师:杨永强成绩:2015年6月实验一:谁拿了最多奖学金1.【问题描述】(1)问题描述某校的惯例是在每学期的期末考试之后发放奖学金。
发放的奖学金共有五种,获取的条件各自不同:1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;4) 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。
例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
2.【设计需求及分析】(1)设计思路先定义了一个Student的结构体,它里面定义了关于学生的各个属性。
比如期末平均成绩,班级评议成绩,班干部等等。
然后设计了一个判断函数,判断他得到奖学金的多少。
接下来就是主函数了,在主函数里,有着输出输入变量,和赋值函数,最重要的是比较函数,比较出哪一位学生的奖学金多及所有金额的总计。
最后输出。
下面是关键步骤:(2)输出输入格式输入数据格式格式:输入的第一行是一个整数N(1 <= N <= 100),表示学生的总数。
接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。
姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。
《数据结构》实验指导书(新教学计划)
数据结构实验指导书数据结构实验指导书目录数据结构实验指导书 (1)目录 (1)实验指导书概述 (2)实验题目 (3)实验一单链表的插入、删除 (3)[实验目的] (3)[实验内容] (3)[测试数据] (3)[实现提示] (3)实验二栈及其应用 (5)[实验目的] (5)[实验内容] (5)[测试数据] (5)实验三二叉树的递归算法 (5)[实验目的] (5)[实验内容] (6)[测试数据] (6)实验四查找及排序算法的应用 (7)[实验目的] (7)[实验内容] (7)[测试数据] (7)实验指导书概述“数据结构”是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。
本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了多种常用的查找和排序技术,并对其进行了性能分析和比较,内容非常丰富。
本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。
由于以下原因,使得掌握这门课程具有较大难度:∙内容多,时间短,给学习带来困难;∙贯穿全书的动态链表存储结构和递归技术是学习中的重点和难点;∙隐含在各部分的技术和方法丰富,也是学习的重点和难点;∙先修课程中所介绍的专业性知识不多,加大了学习难度。
由于数据结构课程的技术性与实践性,《数据结构课程实验》的设置十分必要。
为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。
数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。
在掌握基本算法的基础上,掌握分析、解决实际问题的能力。
通过实验实践内容的训练,突出构造性思维训练的特征, 提高学生组织数据及编写大型程序的能力。
数据结构实验指导书
《数据结构》实验指导书贵州大学电子信息学院通信工程目录实验一顺序表的操作 (3)实验二链表操作 (8)实验三集合、稀疏矩阵和广义表 (19)实验四栈和队列 (42)实验五二叉树操作、图形或网状结构 (55)实验六查找、排序 (88)贵州大学实验报告 (109)实验一顺序表的操作实验学时:2学时实验类型:验证实验要求:必修一、实验目的和要求1、熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。
2、以线性表的各种操作(建立、插入、删除等)的实现为重点。
3、掌握线性表的动态分配顺序存储结构的定义和基本操作的实现。
二、实验内容及步骤要求1、定义顺序表类型,输入一组整型数据,建立顺序表。
typedef int ElemType; //定义顺序表struct List{ElemType *list;int Size;int MaxSize;};2、实现该线性表的删除。
3、实现该线性表的插入。
4、实现线性表中数据的显示。
5、实现线性表数据的定位和查找。
6、编写一个主函数,调试上述算法。
7、完成实验报告。
三、实验原理、方法和手段1、根据实验内容编程,上机调试、得出正确的运行程序。
2、编译运行程序,观察运行情况和输出结果。
四、实验条件运行Visual c++的微机一台五、实验结果与分析对程序进行调试,并将运行结果进行截图、对所得到的的结果分析。
六、实验总结记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等,并将其写入实验报告中。
【附录----源程序】#include<stdio.h>#include<iostream>using namespace std;typedef int ElemType;struct List{ElemType *list;int Size;int MaxSize;};//初始化线性表bool InitList(List &L){L.MaxSize=20;L.list=new ElemType[L.MaxSize];for(int i=0;i<20&&L.list==NULL;i++){L.list=new ElemType[L.MaxSize];}if(L.list==NULL){cout<<"无法分配内存空间,退出程序"<<endl;return false;}L.Size=0;return true;}//向线性表中插入元素bool InsertList(List &L,int pos,ElemType item){if(pos>L.Size+1||pos<1){cout<<"位置无效"<<endl;return false;}else if(L.Size==L.MaxSize){int k=sizeof(ElemType);L.list=(ElemType*)realloc(L.list,2*L.MaxSize*k);if(L.list==NULL){cout<<"动态分配内存失败,退出运行"<<endl;return false;}L.MaxSize=2*L.MaxSize;}for(int i=L.Size-1;i>=pos-1;i--){L.list[i+1]=L.list[i];}L.list[pos-1]=item;L.Size++;return true;}//删除线性表中的元素bool DeleteList(List &L,ElemType &item,int pos){if(L.Size==0){cout<<"线性表中没有元素,无法删除"<<endl;return false;}if(pos<1||pos>L.Size){cout<<"位置无效"<<endl;return false;}item=L.list[pos-1];for(int i=pos;i<L.Size;i++)L.list[i-1]=L.list[i];L.Size--;if(float(L.Size)/L.MaxSize<0.4&&L.Size>10){int k=sizeof(ElemType);L.list=(ElemType*)realloc(L.list,L.MaxSize*k/2);L.MaxSize=L.MaxSize/2;}return true;}//输出线性表bool Print(List &L){if(L.Size==0){cout<<"线性表中无元素"<<endl;return false;}cout<<"线性表为:"<<endl;for(int i=0;i<L.Size;i++){cout<<L.list[i]<<" ";}cout<<"线性表长度为"<<L.Size<<endl;return true;}//查找数据bool GetList(List L,ElemType item,int pos){if(pos<1||pos>L.Size){cout<<"位置无效"<<endl;return false;}int k;cout<<"按位置查找选择1,按元素查找选择0"<<endl;cin>>k;if(k==1){cout<<"第"<<pos<<"个元素为"<<L.list[pos-1]<<endl;return true;}else if(k==0){for(int i=0;i<L.Size;i++){if(L.list[i]==item)cout<<"你要找的元素为"<<":"<<item<<"在第"<<i+1<<"个"<<endl;if(i==L.Size){cout<<"没有你要找的元素"<<endl;return false;}}}else{cout<<"查找无效,请选择0或1"<<endl;return false;}}void main(){List m;InitList(m);//初始化线性表Print(m);cout<<"请输入十个数据"<<endl;for(int i=0;i<10;i++){cin>>m.list[i];m.Size++;}Print(m);cout<<"向线性表中第r个位置插入s"<<endl;cout<<"请输入r,s"<<endl;int r;ElemType s;cin>>r>>s;cout<<"(m,r,s)"<<endl;//向线性表中插入元素InsertList(m,r,s);Print(m);cout<<"查找数据s或者查找第r个数据"<<endl;cin>>s>>r;GetList(m,s,r);Print(m);ElemType f=0;cout<<"删除第r个数据"<<endl;cin>>r;DeleteList(m,f,r);Print(m);cout<<"删除的数据是"<<f<<endl;}实验二链表操作实验学时:2学时实验类型:验证实验要求:必修一、实验目的和要求1、掌握链表的概念,了解线性表的链式存储结构,学会定义线性表的链式存储结构。
数据结构实验报告_太原理工大学软件学院
}
int InserOrderList(SqList *L,int e){
int i;
if((L->length)>=(L->listsize)){
int *newbase;
newbase=(int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
《数据结构》实验报告
专业:软件工程
班级:13XX班
姓名:X X X
2014年12月
太原理工大学学生实验报告
学院名称
软件学院
专业班级
软件13XX班
学号
201300XXXX
实验成绩
学生姓名
XXX
同组人姓名
实验日期
11.12
课程名称
数据结构
实验题目
实验一线性表
实验记录:
1.设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。
if(!newbase) exit(OVERFLOW);
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L->length;
L->length++;
return OK;
}
void main(){
大学实验指导书
《数据结构实验》指导书实验一抽象数据类型 (2)实验二线性表及其应用 (3)实验三栈和队列及其应用 (5)实验四串及其应用 (8)实验五数组及其应用 (9)实验六树及其应用 (12)实验七图及其应用 (15)实验八查找与排序算法 (18)实验报告撰写指导 (22)韶关学院信息工程学院计算机系教师:陈正铭2007-9-10实验一抽象数据类型【实验目的】熟悉抽象数据类型的表示和实现方法,重温高级语言的使用方法。
【实验内容】设计一个可进行复数四则运算的演示程序,要求实现下列六种基本运算:1)由输入的实部和虚部生成一个复数;2)两个复数求和;3)两个复数求差;4)两个复数求积;5)从已知复数中分离出实部;6)从已知复数中分离出虚部。
运算结果以相应的复数或实数的表示形式显示。
【实验指导】为实现上述程序功能,应以实数二元组表示复数。
抽象数据类型复数定义如下:ADT Complex {数据对象:D={e1,e2|e1,e2∈RealSet }数据关系:R1={<e1,e2> | e1是复数的实数部分, | e2 是复数的虚数部分}基本操作:InitComplex( &Z, v1, v2 )操作结果:构造复数Z,其实部和虚部分别被赋以参数v1和v2的值。
DestroyComplex( &Z)操作结果:复数Z被销毁。
GetReal( Z, &realPart )初始条件:复数已存在。
操作结果:用realPart返回复数Z的实部值。
GetImag( Z, &ImagPart )初始条件:复数已存在。
操作结果:用ImagPart返回复数Z的虚部值。
Add( z1,z2, &sum )初始条件:z1,z2是复数。
操作结果:用sum返回两个复数z1,z2的和值。
Sub( z1,z2, &dif )初始条件:z1,z2是复数。
操作结果:用dif返回两个复数z1,z2的差值。
《数据结构B》实验指导书
湖北汽车汽车工业学院《数据结构B》实验指导书袁科、马春江、付勇智编写计算机工程系目录实验一线性表基本操作的编程实现 (2)实验二堆栈和队列基本操作的编程实现 (12)实验三串基本操作的编程实现 (20)实验四二维数组基本操作的编程实现 (28)实验五二叉树基本操作的编程实现 (33)实验六图基本操作的编程实现 (41)实验七查找技术的编程实现 (50)实验八排序技术的编程实现 (57)附录一实验常见问题问答 (64)附录二如何准备实验 (64)附录三如何写实验报告 (65)附录四实验报告模板 (66)附录五实验注意事项 (70)(特别提示:程序设计包含两个方面的错误。
其一是语法错误,其二是功能错误。
为了提高学生的编程和调试能力,本指导书给出的程序代码并不保证没有上述的两种错误。
并且也不保证程序的完整性,有一些语句已经故意删除,就是要求学生自己编制完成,这样才能达到我们的教学要求。
希望大家以自己所学高级语言的基本功和数据结构原理的思考点为基础,不要过于依赖给出的参考代码,这样才能有所进步。
如果学生能够根据要求完全自己编制,那就更好了。
)实验一线性表基本操作的编程实现【实验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大部分功能。
还鼓励学生利用基本操作进行一些更实际的应用型程序设计。
【实验性质】验证性实验(学时数:2H)【实验内容】把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。
建议实现键盘输入数据以实现程序的通用性。
为了体现功能的正常性,至少要编制遍历数据的函数。
【注意事项】1.开发语言:使用C。
2.可以自己增加其他功能。
【参考代码】(以下内容,学生任意选择一个完成即可)(一)基础篇//利用顺序表完成一个班级学生课程成绩的简单管理#include<stdio.h>#include<stdlib.h>#include<conio.h>#define MAXSIZE 100 //根据需要自己设定一个班级能够容纳的最大学生数typedef struct stu{int num; //学生学号char name[10]; //学生姓名float score; //学生成绩}STUDENT; //存放单个学生信息的结构体类型typedef struct list{STUDENT stu[MAXSIZE]; //存放学生的数组定义,静态分配空间int length; //记录班级实际学生个数}LIST; //存放班级学生信息的顺序表类型void listcreate(LIST *Li,int m)//初始化班级的学生信息{int i;Li->length=0;for(i=1;i<=m;i++) //输入m个学生的所有信息{printf("请输入第%d个学生的信息:\n",i);printf("学号=");scanf("%d",&Li->stu[i].num); //输入第i个学生的学号printf("姓名=");scanf("%s",&Li->stu[i].name); //输入第i个学生的姓名printf("成绩=");scanf("%f",&Li->stu[i].score); //输入第i个学生的成绩Li->length++; //学生人数加1}}int listinsert(LIST *Li,int i)//将学生插入到班级Li的第i个位置。
太原理工大学《操作系统B》实验指导书
《操作系统B》实验指导书计算机科学与技术系二○一五年目录实验一几种操作系统的界面 (1)实验二进程调度程序设计 (2)实验三存储管理程序设计 (10)实验一几种操作系统的界面【目的与要求】(一)目的本实验的目的是使学生熟悉1—2种操作系统的界面,在熟练使用机器的基础上,能了解各种命令和调用在系统中的大致工作过程。
也就是通过操作系统的外部特征,逐步深入到操作系统的内部实质内容中去, 培养学生对系统软件的认知、结构、设计及实施能力。
(二)要求1.能熟练的在1—2种操作系统的环境下工作,学会使用各种命令,熟悉系统提供的各种功能。
主动而有效地使用计算机。
2.熟悉系统实用程序的调用方法和各种系统调用模块的功能和作用。
【实验内容】在某种操作系统的环境下建立、修改、运行、打印源程序和结果,最后撤消一个完整的程序。
提示:可按下述步骤进行1.编写一个完整的源程序,通过编辑命令送入机器,建立源程序文件;2.编译该源文件,建立相应的目标文件;3.编译有错时,再用编辑命令修改源文件,消除全部词法和语法错误;4.连接目标文件,形成可执行文件;5.执行该文件,得到结果;6.打印输出源程序和运行结果;7.撤消本次实验中形成的所有文件。
实验二进程调度程序设计【目的与要求】(一)目的进程是操作系统最重要的概念之一,进程调度是操作系统的主要内容,本实验要求学生独立地用高级语言编写一个进程调度程序,调度算法可任意选择或自行设计。
本实验可使学生加深对进程调度和各种调度算法的理解, 培养学生对操作系统软件的认知、结构、设计及实施能力,通过综合运用操作系统理论和技术,分析、构造、设计、实施和运行操作系统的工程技能。
(二)要求1.设计一个有几个进程共行的进程调度程序,每个进程由一个进程控制块(PCB)表示,进程控制块通常应包括下述信息:进程名,进程优先数,进程需要运行的时间,占用CPU的时间以及进程的状态等,且可按照调度算法的不同而增删。
2.调度程序应包含2—3种不同的调度算法,运行时可以任选一种,以利于各种方法的分析和比较。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构B》实验指导书计算机科学与技术学院计算机科学与技术系2011年09月目录实验一线性表 (1)实验二树 (5)实验三图 (7)实验四查找 (11)实验五内排序 (13)实验一线性表【目的与要求】本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。
要求仔细阅读并理解下列例题,上机调试并编译执行通过,并观察其结果,然后独立完成后面的实验内容,写出完整的实验报告。
编写程序过程中注意养成良好的编程风格与习惯,要求程序结构清晰,程序缩进,适当注释。
【参考例题】[问题描述]用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。
[输入]初始字符串,插入位置,插入字符,删除字符。
[输出]已建立链表(字符串),插入字符后链表,删除字符后链表,逆转后链表。
[存储结构]采用链式存储结构[算法的基本思想]建立链表:当读入字符不是结束符时,给结点分配存储空间,写数据域,将新结点插到表尾;插入字符:根据读入的字符在链表中找插入位置,将新结点插入到该位置之前;删除字符:根据读入的删除字符在链表中找到被删结点后,将其从链表中删除;链表逆转:从链表的第一个结点开始对所有结点处理,将每个结点的前驱变为它的后继;打印链表:从链表的第一个结点开始,依次打印各个结点的数据域。
[参考源程序]#define NULL 0typedef struct node{char a;struct node *link;}node,*nodelink;void readlink(nodelink head){nodelink p,q;char c;p=head;printf("Input a linktable(a string):");scanf("%c",&c);if (c=='\n') printf("This string is empty。
");while(c!='\n'){q=(nodelink)malloc(sizeof(node));q->a=c;p->link=q;p=q;scanf("%c",&c);}p->link=NULL;}void writelink(nodelink head){nodelink q;if (head->link==NULL) printf(" This link is empty。
\n");for(q=head->link;q;q=q->link)printf("%c",q->a);printf("\n");}int insert(nodelink head,char k1,char k2){nodelink p,q;p=head->link;while(p->a!=k1&&p)p=p->link;if(p){q=(nodelink)malloc(sizeof(node));q->a=k2;q->link=p->link;p->link=q;return 1;}else {printf("There is no %c\n",k1);return 0;}}int delete(nodelink head,char k){nodelink p,q;q=head;p=head->link;while(((p->a)!=k)&&p){q=q->link;p=p->link;}if(p){q->link=p->link;return 1;}else{printf("There is no %c\n",k);return 0;}}void opside(nodelink head){nodelink p,q;p=head->link;while(p->link){q=p->link;p->link=q->link;q->link=head->link;head->link=q;}}main(){char k1,k2,k3;nodelink head;head=(nodelink)malloc(sizeof(node));head->link=NULL;readlink(head);if (head->link!=NULL){printf("Build link is :");writelink(head); }if (head->link!=NULL){printf("Please input a char you want to insert after:");k1=getch();printf("%c\n",k1);printf("Please input a char you want to insert:");k2=getch();printf("%c\n",k2);if (insert(head,k1,k2)) {printf("After %c insert %c,link is:",k1,k2);writelink(head);}printf("Please input a char you want to delete:");k3=getch();printf("%c\n",k3);if (delete(head,k3)){ printf("after delete %c,link is:",k3);writelink(head);}if (head->link!=NULL){printf("Opsite result is :");opside(head);writelink(head);free(head);}}}【实验内容】1.设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。
2.用单链表ha 存储多项式A(x )=a0+a1x1+a2x2+…+a n x n(其中a I为非零系数),用单链表hb 存储多项式B(x )=b0+b1x1+b2x2+…+b m x m(其中b j为非零系数),要求计算C(x )= A(x )+B(x ),结果存到单链表hc中。
试写出程序。
3.设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到m的人又出列,如此重复,直到所有的人全部出列为止。
Josephus问题是:对于任意给定的n,m,s,求出按出列次序得到的n个人员的顺序表。
实验二树【目的与要求】熟悉树的各种表示方法和各种遍历方式,掌握有关算法的实现,了解树在计算机科学及其它工程技术中的应用。
【参考例题】[问题描述]任意给定一棵二叉树。
试设计一个程序,在计算机中构造该二叉树,并对它进行遍历。
[输入]一棵二叉树的结点若无子树,则可将其子树看作“.”,输入时,按照前序序列的顺序输入该结点的内容。
对下图,其输入序列为ABD..EH...CF.I..G..。
[输出]若为空二叉树,则输出:THIS IS A EMPTY BINARY TREE。
若二叉树不空,按后序序列输出,对上例,输出结果为:DHEBIFGCA。
[存储结构]采用二叉链表存储。
[算法的基本思想]采用递归方法建立和遍历二叉树。
首先建立二叉树的根结点,然后建立其左右子树,直到空子树为止。
后序遍历二叉树时,先遍历左子树,后遍历右子树,最后访问根结点。
[参考源程序]#include<stdio.h>#include<alloc.h>struct node{char info;struct node *llink,*rlink;};typedef struct node NODE;NODE *creat(){char x;NODE *p;scanf("%c",&x);printf("%c",x);if(x!='.'){p=(NODE *)malloc(sizeof(NODE));p->info=x;p->llink=creat();p->rlink=creat();}elsep=NULL;return p;}void run(NODE *t){if(t){run(t->llink);run(t->rlink);printf("%c",t->info);}}main(){NODE *T;printf("PLease input a tree:\n");T=creat();printf("\n");if(!T)printf("This is a empty binary tree.");else{ printf("The result of post travese is:\n ");run(T);}printf("\n");}【实验内容】1.编写递归算法,计算二叉树中叶子结点的数目。
2.编写递归算法,在二叉树中求位于先序序列中第K个位置的结点。
3.将上述例题用非递归程序实现。
实验三图【目的与要求】熟悉图的存储结构,掌握有关算法的实现,了解图在计算机科学及其他工程技术中的应用。
【参考例题】[问题描述]给定一个图,设计一个程序,找出一条从某一顶点A到另一顶点B边数最少的一条路径。
[输入]图的顶点个数N,图中顶点之间的关系及要找的路径的起点A和终点B。
[输出]若A到B无路径,则输出“There is no path”,否则输出A到B路径上各顶点。
[存储结构]图采用邻接矩阵的方式存储。
[算法的基本思想]采用广度优先搜索的方法,从顶点A开始,依次访问与A邻接的顶点V A1,V A2,...,V AK,访问遍之后,若没有访问B,则继续访问与V A1邻接的顶点V A11,V A12,...,V A1M,再访问与V A2邻接顶点...,如此下去,直至找到B,最先到达B点的路径,一定是边数最少的路径。