




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构实验报告项目名称 线性表的操作 专业班级 学 号 姓 名 实验成绩:批阅教师:2013年 03 月 31 日实验一 线性表的操作 实验学时: 2 实验地点: 科教楼四楼 实验日期: 2013/3/20 1需求分析(1)程序设计的任务:A.应用线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储结构和链接存储结构上的运算。B. 实现一元n次多项式的加法运算(2)规定:输入的形式和输入值的范围:长整型数组0100输出的形式:多项式形式输出程序所能达到的功能:完成多项式的输入、显示;实现多项式的加法操作测试数据:A . 正确的输入及其输出结果: 分别输入两个多项式的系数和指数,
2、分别以0结束,例如3*x2,请输入3 24 6 2 5 8 7 1 00第一个多项式输入完毕,请输入下一个7 0 3 4 6 8 25 1 00多项式输入完毕请输入你想要进行的运算,1代表+,2代表-26*x8 + 8*x7 + 4*x6 + 2*x5 + 3*x4 + 25*x + -6Process completed.B . 错误的输入及其输出结果: 分别输入两个多项式的系数和指数,分别以0结束,例如3*x2,请输入3 24 5 1 2 3 6 5 5 0第一个多项式输入完毕,请输入下一个8 4 1 0 3 4 6 9 7 00多项式输入完毕2概要设计抽象数据类型的定义:public M
3、ultinomial1()主程序的流程: 定义类-à定义主函数-àà定义两个线性表用来存储多项式-àà提示用户输入多项式的系数与指数-àà将用户输入的多项式存入线性表-àà将两个线性表的元素比较并存入同一个线性表以实现多项式相加减-à-à输出多项式相加减后的结果各程序模块之间的层次(调用)关系:在Alist、Blist、Clist对堆申请空间时调用LinkList()函数,将多项式存入Alist、Blist中调用Add()函数,讲Alist、Blist两个线性表比较、排序并存入Clis
4、t中调用Sort()函数。3详细设计伪码算法:构建链表:int newindex, newfactor; Scanner scanner = new Scanner(System.in); LinkedList Alist = new LinkedList(); LinkedList Blist = new LinkedList(); LinkedList Clist = new LinkedList(); Node pNew;第一个多项式:System.out.println("请输入第一个多项式的系数和指数,例如2*x2,请输入2 2,以0 0表示结束"); newfa
5、ctor = scanner.nextInt(); newindex = scanner.nextInt(); while (newfactor != 0) pNew = new Node(); pNew.factor = newfactor; pNew.index = newindex; Alist.Add(pNew); newfactor = scanner.nextInt(); newindex = scanner.nextInt(); 第二个多项式:System.out.println("第一个多项式输入完毕,请输入第二个多项式"); newfactor = sca
6、nner.nextInt(); newindex = scanner.nextInt(); while (newfactor != 0) pNew = new Node(); pNew.factor = newfactor; pNew.index = newindex; Blist.Add(pNew); newfactor = scanner.nextInt(); newindex = scanner.nextInt(); System.out.println("多项式输入完毕");两多项式相加:int Ai = 0, Bi = 0; Node pc; Node pa =
7、Alist.head.next, pb = Blist.head.next; while (Ai < Alist.size && Bi < Blist.size) if (pa.index > pb.index) pc = new Node(); pc.index = pa.index; pc.factor = pa.factor; Clist.Add(pc); pc = pc.next; pa = pa.next; Ai+; Clist.size+; else if (pa.index < pb.index) pc = new Node(); pc.i
8、ndex = pb.index; pc.factor = pb.factor; Clist.Add(pc); pc = pc.next; pb = pb.next; Bi+; Clist.size+; else if (pa.index = pb.index) if (pa.factor + pb.factor != 0) pc = new Node(); pc.index = pa.index; pc.factor = pa.factor + pb.factor; Clist.Add(pc); pc = pc.next; pa = pa.next; pb = pb.next; Clist.s
9、ize+; Ai+; Bi+; else pa = pa.next; pb = pb.next; Ai+; Bi+; 多项式中未加的部分运算:while (Ai < Alist.size) pc = new Node(); pc.index = pa.index; pc.factor = pa.factor; Clist.Add(pc); pa = pa.next; pc = pc.next; Ai+; Clist.size+; while (Bi < Blist.size) pc = new Node(); pc.index = pb.index; pc.factor = pb.
10、factor; Clist.Add(pc); pb = pb.next; pc = pc.next; Bi+; Clist.size+; Node pc1 = Clist.head.next; for (int Ci = 0; pc1.next != null; Ci+) System.out.print(pc1.factor+"*x"+pc1.index+" + "); pc1 = pc1.next; System.out.print(pc1.factor+"*x"+pc1.index); 函数和过程的调用关系图:4调试分析调试过程
11、中遇到的问题是如何解决的:参考课本、和同学交流讨论、上网查询对设计与实现的回顾讨论和分析:算法的时空分析和改进设想:经验和体会:平时必须多写多看程序,多加练习,并在写代码之前构思好算法和流程。5用户使用说明操作步骤:A.Build fileB.Run fileC.根据提示输入多项式的系数与指数(以空格分开各项)D.然后EnterE.运行结果就会实现两个多项式的相加减6测试结果请输入第一个多项式的系数和指数,例如2*x2,请输入2 2,以0 0表示结束1 5 4 6 2 3 0 45 5 2 7 9 5 0第一个多项式输入完毕,请输入第二个多项式8 3 4 9 6 1 0 22 1 4 5 66
12、 7 1 5 3 00多项式输入完毕1*x5 + 4*x6 + 2*x3 + 5*x2 + 7*x9 + 5*x0 + 8*x3 + 4*x9 + 6*x1Process completed.请输入第一个多项式的系数和指数,例如2*x2,请输入2 2,以0 0表示结束41 85 5 7 9 5 5 2 4 45 4 5 1 2 4 512 00第一个多项式输入完毕,请输入第二个多项式463 5 1 2 2 5 9 3 26 26 5 21 3 255 62 2 2 3 5 600 0 0 0 多项式输入完毕41*x85 + 5*x7 + 472*x5 + 6*x2 + 4*x45 + 6*x5
13、 + 9*x3 + 26*x26 + 5*x21 + 3*x255 + 63*x2 + 4*x512 + 2*x3 + 5*x6Process completed. 请输入第一个多项式的系数和指数,例如2*x2,请输入2 2,以0 0表示结束15 4 6 4169 4 91 1 22 3 50 3 20 2 532 + 00 0at java.util.Scanner.throwFor(Scanner.java:840)at java.util.Scanner.next(Scanner.java:1461)at java.util.Scanner.nextInt(Scanner.java:20
14、91)at java.util.Scanner.nextInt(Scanner.java:2050)at Multinomial1.main(Multinomial1.java:34)Process completed.7附录带注释的源程序代码:链表:public class Node /定义Node类 public int index; /定义参数 public int factor; public Node last; public Node next;public class LinkedList /定义LinkedList类 public LinkedList() head = new
15、 Node(); head.last = null; tail = head; tail.next = null; public Node head; public Node tail; public int size = 0; public void Add(Node pNew) /实现线性表的插入 tail.next = pNew; tail = pNew; tail.next = null; size+; public void Sort() /排序 Node p = head.next; for (int i = 0; i < size; i+) if (p.index <
16、 p.next.index) p.next.next.last = p; p.last = p.next; p.next = p.next.next; p.last.next = p; head.next = p.last; else p = p.next; for (int j = 1; j < size - i; j+) if (p.index < p.next.index) p.next.next.last = p; p.last = p.next; p.next = p.next.next; p.last.next = p; else p = p.next; /* * (#
17、)Multinomial1.java * * * author * version 1.00 2013/3/19 */import java.util.Scanner;public class Multinomial1 /定义Multinomaill类 public Multinomial1() public static void main(String args) /主函数 int newindex, newfactor; Scanner scanner = new Scanner(System.in); /调用LinkedList()函数 LinkedList Alist = new L
18、inkedList(); LinkedList Blist = new LinkedList(); LinkedList Clist = new LinkedList(); Node pNew; System.out.println("请输入第一个多项式的系数和指数,例如2*x2,请输入2 2,以0 0表示结束"); /照此输入多项式的系数与指数 newfactor = scanner.nextInt(); newindex = scanner.nextInt(); while (newfactor != 0) pNew = new Node(); pNew.factor
19、= newfactor; pNew.index = newindex; Alist.Add(pNew); newfactor = scanner.nextInt(); newindex = scanner.nextInt(); System.out.println("第一个多项式输入完毕,请输入第二个多项式"); newfactor = scanner.nextInt(); newindex = scanner.nextInt(); while (newfactor != 0) pNew = new Node(); pNew.factor = newfactor; pNew
20、.index = newindex; Blist.Add(pNew); newfactor = scanner.nextInt(); newindex = scanner.nextInt(); System.out.println("多项式输入完毕"); int Ai = 0, Bi = 0; Node pc; Node pa = Alist.head.next, pb = Blist.head.next; /实现两个多项式的相加减 while (Ai < Alist.size && Bi < Blist.size) if (pa.index &
21、gt; pb.index) pc = new Node(); pc.index = pa.index; pc.factor = pa.factor; Clist.Add(pc); pc = pc.next; pa = pa.next; Ai+; Clist.size+; else if (pa.index < pb.index) pc = new Node(); pc.index = pb.index; pc.factor = pb.factor; Clist.Add(pc); pc = pc.next; pb = pb.next; Bi+; Clist.size+; else if (
22、pa.index = pb.index) if (pa.factor + pb.factor != 0) pc = new Node(); pc.index = pa.index; pc.factor = pa.factor + pb.factor; Clist.Add(pc); pc = pc.next; pa = pa.next; pb = pb.next; Clist.size+; Ai+; Bi+; else pa = pa.next; pb = pb.next; Ai+; Bi+; while (Ai < Alist.size) pc = new Node(); pc.inde
23、x = pa.index; pc.factor = pa.factor; Clist.Add(pc); pa = pa.next; pc = pc.next; Ai+; Clist.size+; while (Bi < Blist.size) pc = new Node(); pc.index = pb.index; pc.factor = pb.factor; Clist.Add(pc); pb = pb.next; pc = pc.next; Bi+; Clist.size+; Node pc1 = Clist.head.next; for (int Ci = 0; pc1.next
24、 != null; Ci+) System.out.print(pc1.factor+"*x"+pc1.index+" + "); pc1 = pc1.next; System.out.print(pc1.factor+"*x"+pc1.index); 数组:/* * (#)Multinomial.java * * * author * version 1.00 2013/3/19 */import java.util.Scanner;public class Multinomial public static void main(S
25、tring args) int Asize = 0, Bsize = 0, Csize = 0; int temp; int operator; int Afactor = new int100; int Aindex = new int100; int Bfactor = new int100; int Bindex = new int100; int Cfactor = new int100; int Cindex = new int100; Scanner scanner = new Scanner(System.in); System.out.println("分别输入两个多
26、项式的系数和指数,分别以0结束,例如3*x2,请输入3 2"); AfactorAsize = scanner.nextInt(); AindexAsize = scanner.nextInt(); Asize+; while (AfactorAsize = 0) AfactorAsize = scanner.nextInt(); if (AfactorAsize = 0) System.out.println("第一个多项式输入完毕,请输入下一个"); break; AindexAsize = scanner.nextInt(); Asize+; Bfactor
27、Bsize = scanner.nextInt(); BindexBsize = scanner.nextInt(); Bsize+; while (BfactorBsize = 0) BfactorBsize = scanner.nextInt(); if (BfactorBsize = 0) System.out.println("多项式输入完毕"); break; BindexBsize = scanner.nextInt(); Bsize+; System.out.println("请输入你想要进行的运算,1代表+,2代表-"); operato
28、r = scanner.nextInt(); for (int Ai = 0; Ai < Asize; Ai+) for (int Aj = 0; Aj < Asize-Ai; Aj+) if (AindexAj < AindexAj+1) temp = AindexAj+1; AindexAj+1 = AindexAj; AindexAj = temp; temp = AfactorAj+1; AfactorAj+1 = AfactorAj; AfactorAj = temp; for (int Bi = 0; Bi < Bsize; Bi+) for (int Bj
29、 = 0; Bj < Bsize-Bi; Bj+) if (BindexBj < BindexBj+1) temp = BindexBj+1; BindexBj+1 = BindexBj; BindexBj = temp; temp = BfactorBj+1; BfactorBj+1 = BfactorBj; BfactorBj = temp; int Ak = 0, Bk = 0; if (operator = 1) for (; Ak < Asize && Bk < Bsize;) if (AindexAk > BindexBk) Cinde
30、xCsize = AindexAk; CfactorCsize = AfactorAk; Csize+; Ak+; else if (AindexAk < BindexBk) CindexCsize = BindexBk; CfactorCsize = BfactorBk; Csize+; Bk+; else if (AfactorAk + BfactorBk != 0) CindexCsize = AindexAk; CfactorCsize = AfactorAk + BfactorBk; Csize+; Ak+; Bk+; else if (operator = 2) for (;
31、 Ak < Asize && Bk < Bsize;) if (AindexAk > BindexBk) CindexCsize = AindexAk; CfactorCsize = AfactorAk; Csize+; Ak+; else if (AindexAk < BindexBk) CindexCsize = BindexBk; CfactorCsize = BfactorBk; Csize+; Bk+; else if (AfactorAk - BfactorBk != 0) CindexCsize = AindexAk; CfactorCsi
32、ze = AfactorAk - BfactorBk; Csize+; Ak+; Bk+; else System.out.println("输入运算符错误"); while (Ak < Asize) CindexCsize = AindexAk; CfactorCsize = AfactorAk; Csize+; Ak+; while (Bk < Bsize) CindexCsize = BindexBk; CfactorCsize = BfactorBk; Csize+; Bk+; for (int Ci = 0; Ci < Csize-1; Ci+)
33、 if (CindexCi = 1) System.out.print(CfactorCi+"*x + "); else System.out.print(CfactorCi+"*x"+CindexCi+" + "); if (CindexCsize-1 = 0) System.out.print(CfactorCsize-1); else System.out.println(CfactorCsize-1+"*x"+CindexCsize-1); 百位数相加:/* * (#)Addition.java * * *
34、 author * version 1.00 2013/3/20 */import java.util.Scanner;public class Addition public Addition() public static void main(String args) int Anumber = new int 100; int Bnumber = new int 100; int Cnumber = new int 101; Cnumber0 = 0; int Asize = 0, Bsize = 0, Csize = 0; String str; Scanner scanner = new Scanner(System.in); System.out.println("请输入第一个多项式,并以#结束"); str = scanner.nextLine(); int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络游戏开发及版权保护合作合同
- 难忘的语文老师:写人作文(13篇)
- 公交公司树形象活动方案
- 公交精神文明活动方案
- 公众号七夕活动方案
- 快乐是一种态度作文7篇范文
- 公共法律服务活动方案
- 游东方年华游记作文600字(13篇)
- 公司k歌比赛活动方案
- 2025至2030年中国保湿平衡柔肤水行业投资前景及策略咨询报告
- 现代艺术野兽派-中外美术史-课件
- 浙江嘉兴市小学英语四年级下学期期末测试卷测试题(含答案)
- 无犯罪记录无吸毒史证明模板
- 双曲线齿轮几何设计
- 大型养路机械综合讲义
- 国际商务毕业论文范文
- 高分子材料完整版课件
- GB∕T 37456-2019 海洋平台电驱动齿轮齿条升降装置
- 空间解析几何教案
- 2022年甘肃省特岗教师理科综合真题
- DB34∕T 3587-2020 城镇排水管道检测与修复技术规程
评论
0/150
提交评论