数据结构实验报告模板
- 格式:docx
- 大小:82.58 KB
- 文档页数:3


南昌航空大学实验报告课程名称:数据结构指导老师准考证号:036811100078姓名:周文飞指导老师:廖丽实验报告内容和步骤一、实验目的:通过实践加深对数据结构的基本概念、基本理论的理解,培养学生灵活使用所学知识解决实际问题的能力,同时提高程序设计实际操作能力。
二、实验内容:实现任意大的数字(包括任意整数和任意小数)的加法,减法和乘法运算。
三、实验要求:1、本程序的数据来自文件,第一个操作数存储在“a*.txt”文件中,第二个操作数存储在“b*.txt”文件中(a*与b*分别表示两组对应的数据),这两组文件中分别存储对应的任意大数,以供程序2、本程序主要实现3个功能:任意大数的加法运算,任意大数的减法运算和任意大数的乘法运算。
大数的范围包括:任意长度的整数和任意长度的小数。
四、实验过程1.BigNumber.java[c-sharp]view plaincopyprint?1. /*自定义大数类,用数组实现任意超大整数的加减乘运算*/2. i mport java.util.Random;3. p ublic class BigNumber {4. private int[] num;5. // 无参构造函数6. public BigNumber() {7. }8. // 有参构造函数9. public BigNumber(int i) {10. num = new int[i];11. Random random = new Random();12. int j;13. for (j = 0; j < i; j++)14. num[j] = random.nextInt(10);15. // 当生成的数首位是0的话,让重新生成16. while (num[i - 1] == 0) {17. num[i - 1] = random.nextInt(10);18. }19. }20. // 加法21. public static BigNumber add(BigNumber bigA, BigNumber bigB) {22. int alen = bigA.num.length;23. int blen = bigB.num.length;24. int clen = Math.max(alen, blen);25. BigNumber result = new BigNumber();26. result.num = new int[clen];27. if (alen >= blen) {28. for (int i = 0; i < blen; i++)29. result.num[i] = bigA.num[i] + bigB.num[i];30. for (int j = blen; j < alen; j++)31. result.num[j] = bigA.num[j];32. } else {33. for (int i = 0; i < alen; i++)34. result.num[i] = bigA.num[i] + bigB.num[i];35. for (int j = alen; j < blen; j++)36. result.num[j] = bigB.num[j];37. }38. for (int k = 0; k < clen - 1; k++) {39. if (result.num[k] >= 10) {40. result.num[k] -= 10;41. result.num[k + 1]++;42. }43. }44. return result;45. }46. // 减法47. public static BigNumber subtract(BigNumber bigA, BigNumber bigB) {48. int alen = bigA.num.length;49. int blen = bigB.num.length;50. int clen = Math.max(alen, blen);51. BigNumber result = new BigNumber();52. result.num = new int[clen];53. if (alen > blen) {54. for (int i = 0; i < blen; i++)55. result.num[i] = bigA.num[i] - bigB.num[i];56. for (int j = blen; j < alen; j++)57. result.num[j] = bigA.num[j];58. } else if (alen < blen) {59. for (int i = 0; i < alen; i++)60. result.num[i] = bigB.num[i] - bigA.num[i];62. result.num[j] = bigB.num[j];63. } else {64. if (isBigger(bigA, bigB)) {65. for (int i = 0; i < clen; i++) {66. result.num[i] = bigA.num[i] - bigB.num[i];67. }68. } else {69. for (int i = 0; i < clen; i++) {70. result.num[i] = bigB.num[i] - bigA.num[i];71. }72. }73. }74. for (int k = 0; k < clen - 1; k++) {75. if (result.num[k] < 0) {76. result.num[k] += 10;77. result.num[k + 1]--;78. }79. }80. return result;81. }82. // 乘法83. public static BigNumber multiply(BigNumber bigA, BigNumber bigB) {84. int alen = bigA.num.length;85. int blen = bigB.num.length;86. int clen = alen + blen;87. int t;88. BigNumber result = new BigNumber();89. result.num = new int[clen];90. for (int i = 0; i < alen; i++) {91. BigNumber temp = new BigNumber();92. temp.num = new int[clen];93. for (int j = 0; j < blen; j++) {94. temp.num[i + j] = bigA.num[i] * bigB.num[j];95. }97. if (temp.num[k] >= 10) {98. t = temp.num[k];99. temp.num[k] = t % 10;100. temp.num[k + 1] += t / 10;101. }102. }103. result = add(result, temp);104. }105. return result;106. }107. // 判断两个位数相同的BigNumber那个大,前面的大于或者等于返回true,后面的大返回false108. public static boolean isBigger(BigNumber bigA, BigNumber bigB) { 109. boolean flag = true;110. for (int i = bigA.num.length - 1; i >= 0; i--) {111. if (bigA.num[i] < bigB.num[i]) {112. flag = false;113. break;114. }else if(bigA.num[i] > bigB.num[i]){115. break;116. }else117. continue;118. }119.120. return flag;121. }122. // 打印123. public void print() {124. if (num[num.length - 1] != 0)125. System.out.print(num[num.length - 1]);126. for (int i = num.length - 2; i >= 0; i--)127. System.out.print(num[i]);128. System.out.println();129. }130. public static void main(String[] args) { 131. // TODO Auto-generated method stub 132. BigNumber a = new BigNumber(1000); 133. System.out.println("第一个数是:"); 134. a.print();135. BigNumber b = new BigNumber(900); 136. System.out.println("第二个数是:"); 137. b.print();138. System.out.println("它们的和为:"); 139. add(a, b).print();140. System.out.println("它们的差为:"); 141. subtract(a, b).print();142. System.out.println("它们的乘积为:"); 143. multiply(a, b).print();144. }145. }。
数据结构课程设计实验报告完整版【正文】一、实验目的本实验主要目的是通过实践,掌握数据结构的基本概念、常见数据结构的实现方式以及在实际应用中的应用场景和效果。
二、实验背景数据结构是计算机科学与技术领域中的一个重要概念,是研究数据的组织方式、存储方式、访问方式以及操作等方面的方法论。
在计算机科学领域,数据结构是实现算法和解决问题的基础,因此对数据结构的理解和应用具有重要意义。
三、实验内容本次数据结构课程设计实验主要分为以下几个部分:1. 实验环境的准备:包括选择合适的开发平台、安装必要的软件和工具。
2. 实验数据的收集和处理:通过合适的方式收集实验所需的数据,并对数据进行处理和整理。
3. 数据结构的选择和实现:根据实验需求,选择合适的数据结构,并进行相应的数据结构实现。
4. 数据结构的测试和优化:对所实现的数据结构进行测试,包括性能测试和功能测试,并根据测试结果对数据结构进行优化和改进。
5. 实验报告的撰写:根据实验过程和结果,撰写完整的实验报告,包括实验目的、实验背景、实验内容、实验结果和结论等。
四、实验过程1. 实验环境的准备本实验选择了Visual Studio作为开发平台,安装了相应版本的Visual Studio,并根据官方指引进行了相应的配置和设置。
2. 实验数据的收集和处理本实验选取了一份包含学生信息的数据集,包括学生姓名、学号、性别、年龄等信息。
通过编写Python脚本,成功提取了所需信息,并对数据进行了清洗和整理。
3. 数据结构的选择和实现根据实验需求,我们选择了链表作为数据结构的实现方式。
链表是一种常见的动态数据结构,能够高效地插入和删除元素,适用于频繁插入和删除的场景。
在实现链表时,我们定义了一个节点结构,包含数据域和指针域。
通过指针的方式将节点连接起来,形成一个链式结构。
同时,我们还实现了相关的操作函数,包括插入、删除、查找等操作。
4. 数据结构的测试和优化在完成链表的实现后,我们对其进行了性能测试和功能测试。
一、实验目的1. 理解并掌握数据结构的基本概念和常用算法。
2. 学会使用C语言实现线性表、栈、队列、树和图等基本数据结构。
3. 培养动手实践能力,提高编程水平。
二、实验内容1. 线性表(1)顺序表(2)链表2. 栈(1)顺序栈(2)链栈3. 队列(1)顺序队列(2)链队列4. 树(1)二叉树(2)二叉搜索树5. 图(1)邻接矩阵表示法(2)邻接表表示法三、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 编译器:Visual Studio 20194. 实验软件:C语言开发环境四、实验步骤1. 线性表(1)顺序表1)定义顺序表结构体2)实现顺序表的初始化、插入、删除、查找等基本操作3)编写测试程序,验证顺序表的基本操作(2)链表1)定义链表结构体2)实现链表的创建、插入、删除、查找等基本操作3)编写测试程序,验证链表的基本操作2. 栈(1)顺序栈1)定义顺序栈结构体2)实现顺序栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证顺序栈的基本操作(2)链栈1)定义链栈结构体2)实现链栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证链栈的基本操作3. 队列(1)顺序队列1)定义顺序队列结构体2)实现顺序队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证顺序队列的基本操作(2)链队列1)定义链队列结构体2)实现链队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证链队列的基本操作4. 树(1)二叉树1)定义二叉树结构体2)实现二叉树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉树的基本操作(2)二叉搜索树1)定义二叉搜索树结构体2)实现二叉搜索树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉搜索树的基本操作5. 图(1)邻接矩阵表示法1)定义邻接矩阵结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接矩阵表示法的基本操作(2)邻接表表示法1)定义邻接表结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接表表示法的基本操作五、实验结果与分析1. 线性表(1)顺序表实验结果表明,顺序表的基本操作实现正确,测试程序运行稳定。
1、实验目的本实验旨在通过实际操作和代码编写,掌握数据结构的基本概念、常用算法和数据结构的应用能力。
2、实验内容2.1 实验一、线性表的基本操作2.1.1 实验介绍在本实验中,我们将实现线性表的基本操作,包括初始化线性表、插入元素、删除元素、查找元素等。
通过这些基本操作的实现,我们可以加深对线性表的理解。
2.1.2 实验步骤步骤一、初始化线性表步骤二、插入元素步骤三、删除元素步骤四、查找元素2.2 实验二、栈的应用——括号匹配2.2.1 实验介绍在本实验中,我们将使用栈来实现括号匹配。
通过这个应用实例,我们可以更好地理解栈的特性和应用场景。
2.2.2 实验步骤步骤一、括号匹配算法的实现步骤二、测试括号匹配算法3、实验结果与分析3.1 实验一结果分析3.1.1 初始化线性表的效率分析3.1.2 插入操作的效率分析3.1.3 删除操作的效率分析3.1.4 查找操作的效率分析3.2 实验二结果分析3.2.1 括号匹配算法的验证3.2.2 算法的时间复杂度分析3.2.3 算法的空间复杂度分析4、实验总结通过本次实验,我们进一步了解了数据结构的基本概念和应用。
我们通过实际操作和代码编写,加深了对线性表和栈的理解,并且掌握了相关算法的实现和分析方法。
5、附件本实验报告涉及的附件包括:- 代码实现文件- 实验数据统计表格6、法律名词及注释在本文档中,涉及的法律名词和注释包括:- 数据结构:指在计算机科学中,我们用来组织和存储数据的方式或格式。
- 线性表:是最基本、最简单、也是最常用的一种数据结构。
线性表中的数据元素之间是一对一的关系。
- 栈:是一种特殊的线性表,它的插入和删除操作只能在同一端进行。
后进先出(Last In First Out,LIFO)是栈的特性之一。
- 括号匹配:是指检查一个字符串中的所有括号是否匹配完整的过程。