实 验 报 告
课程名称 数据结构 实验项目 线性表的实现及应用 实验仪器 PC机一台
学 院_____ 专 业 班级/学号 姓名 实验日期 成 绩 指导教师
专业整理 知识分享
完美WORD格式
北京信息科技大学
信息管理学院
(数据结构课程上机)实验报告
专业: 班级: 学号: 姓名: 成绩: 实验名称 线性表的实现及应用 实验地点 实验时间 1. 实验目的: (1) 理解用顺序表实现线性表的特点;熟练掌握顺序表的基本操作;学会利用顺序表解决实际应用问题。 (2) 熟练掌握单链表的使用;理解用链表实现线性表的特点;了解链表的多种形式;学会利用单链表解决实际应用问题。 2. 实验要求: (1) 学时为8学时; (2) 能在机器上正确、调试运行程序; (3) 本实验需提交实验报告; (4) 实验报告文件命名方法:数据结构实验_信管16xx_学号_姓名.doc。 3. 实验内容和步骤: 第一部分 顺序表的实现与应用 (1)基于顺序表实现线性表的以下基本操作: public interface LList 完美WORD格式 boolean isEmpty(); //判断线性表是否空 int size(); //返回线性表长度 T get(int i); //返回第i(i≥0)个元素 void set(int i, T x); //设置第i个元素值为x void insert(int i, T x); //插入x作为第i个元素 void insert(T x); //在线性表最后插入x元素 T remove(int i); //删除第i个元素并返回被删除对象 int search(T key); //查找,返回首次出现的关键字为key的元素的位序 void removeAll(); //删除线性表所有元素 public String toString();//返回顺序表所有元素的描述字符串,形式为“(,)” } 要求:实现后应编写代码段对每个基本操作做测试。 (2)顺序表的简单应用 a) 运用基本操作编写算法删除第i个开始的k个元素。 b) 编写高效算法删除第i个开始的k个元素。 c) 将两个顺序表合并为一个顺序表(表中元素有序); d) 若两个元素按值递增有序排列的顺序表A和B,且同一表中的元素值各不相同。试构造一个顺序表C,其元素为A和B中元素的交集,且表C中的元素也按值递增有序排列; 专业整理 知识分享 完美WORD格式 (3)利用顺序表解决约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。要求:输出出列次序。 第二部分 单链表的实现与应用 (4)基于单链表实现线性表的以下基本操作(不需要建立接口,直接建立带头结点的单链表类): ADT List 完美WORD格式 串,形式为“(,)” } 要求:实现后应编写代码段对每个基本操作做测试。 (5)实现单链表的子类排序单链表,覆盖单链表如下方法: void set(int i, T x); //设置第i个元素值为x Node 完美WORD格式 (8)备份自己程序 4. 实验准备: 复习教材第2章线性表的知识点 熟悉Java编程环境 提前熟悉实验内容,设计相关算法 5. 实验过程: 第一部分: (1) package ex1; public interface LList 完美WORD格式 } public SeqList() //创建默认容量的空表,构造方法重载 { this(64); //调用本类已声明的指定参数列表的构造方法 } public SeqList(T [] values) //构造顺序表,由values数组提供元素,忽略其中空对象 { this(values.length*2); //创建2倍values数组容量的空表 //若values==null,用空对象调用方法,Java抛出空对象异常NullPointerException for (int i=0; i if (i>=0 && i 象为空,释放原引用实例 this.n--; return old; //返回old局部变量引用的对象,传递对象引用 } return null; } public void removeAll(){ //删除线性表所有元素 this.n=0; } public int search(T key){ //查找,返回首次出现的关键字为key的元素的位 System.out.print(this.getClass().getName()+\".indexOf(\"+key+\"),\"); for (int i=0; i 完美WORD格式 System.out.println(\"顺序表List是否为空\"+list.isEmpty()+\是否为空\"+list1.isEmpty()); System.out.println(\"list的长度\"+list.length()+\的长度\"+list1.length()); System.out.println(\"返回list1的第7个元素是:\"+list1.get(6)); System.out.println(\"重新设置第5个元素为19:\"); list1.set(4, 19); list1.insert(2, 100); list1.append(20); System.out.println(\"删除8:\"+list1.remove(8)); System.out.print(\"修改后的顺序表:\"); System.out.println(list1.toString()); list1.removeAll(); System.out.println(\"删除后的顺序表:\"+list1.toString()); //为空 System.out.println(\"寻找元素50:\"+list1.search(50)); } } (2) a) package ex1; public class Del { public Del(int i,int k) { String values[]={\"A\",\"b\",\"C\",\"d\",\"e\",\"f\",\"g\",\"h\"}; int n =values.length; for(int j=0;j for(int j=i+k;j 完美WORD格式 c) package ex1; public class Merge { public Merge(){ Integer values1[]={1,3,5,11}; SeqList new Merge(); } } d) package test; import ex1.SeqList; public class Intersection { public Intersection(){ Integer values1[]={1,3,5,11,12,13,22,23,50}; SeqList 完美WORD格式 } System.out.println(list1.toString()); System.out.println(list2.toString()); System.out.println(list3.toString()); } public static void main(String args[]) { new Intersection(); } 3. (1) package ex1; public class Josephus { public Josephus(int n, int k, int m) { System.out.println(\"Josephus(\"+n+\+k+\+m+\"),\"); SeqList 完美WORD格式 // System.out.println(list.toString()); } System.out.println(\"出列\"+list.get(0).toString());//get(0)获得元素,O(1) } public static void main(String args[]) { new Josephus(9,1,3); } } (2) package test; import ex1.SeqList; public class JosephusA { public JosephusA(int n, int k, int m) { System.out.println(\"Josephus(\"+n+\+k+\+m+\"),\"); SeqList 完美WORD格式 System.out.print(\"出列\"+list.remove(i).toString()+\",\"); //删除i位置对象,O(n) // System.out.println(list.toString()); } System.out.println(\"出列\"+list.get(0).toString());//get(0)获得元素,O(1) } public static void main(String args[]) { new JosephusA(15,2,9); } } 第二部分: (4)、 package ex2; public class Node 完美WORD格式 public String toString(){ return this.data.toString(); } } package ex2; public class SinglyList 完美WORD格式 public void set(int i, T x) //设置第i个元素值为x { if(x==null) throw new NullPointerException(\"x==null\"); //抛出空对象异常 Node 完美WORD格式 public T remove(int i) //删除第i个元素并返回被删除对象 { Node 完美WORD格式 } (5)、 package ex2; public class SortedSinglyList } public Node } public static void main(String[] args){ new Del1(2,2); } f、 package ex2; public class Del2 { public Del2(int mink,int maxk) { Integer[] values={1,3,9,17,34}; SortedSinglyList g、 package ex2; public class Meger{ public Meger() { Integer[] values1={1,2,5,7,9}; SortedSinglyList } public static void main(String args[]) { new Meger(); } (7)、 package Poly; public interface Subible 完美WORD格式 if (termstr.charAt(0)=='+') //去掉+号 termstr=termstr.substring(1); int i = termstr.indexOf('x'); if (i==-1) //没有x,即指数为0 { this.coef = Integer.parseInt(termstr); //获得系数 this.xexp = 0; } else //有x,x之前为系数,x^之后为指数 { if (i==0) //以x开头,即系数为1 this.coef = 1; else { String sub=termstr.substring(0,i); //x之前子串表示系数 if (sub.equals(\"-\")) //系数只有-号,即系数为-1 this.coef=-1; else this.coef = Integer.parseInt(sub); //获得系数 } i = termstr.indexOf('^'); if (i==-1) this.xexp=1; //没有^,即指数为1 else this.xexp = Integer.parseInt(termstr.substring(i+1));//获得指数 } } //返回一元多项式的一项对应的“系数x^指数”的省略形式字符串,省略形式说明同TermX(String)构造方法。 public String toString() { String str=this.coef>0 ? \"+\" : \"-\"; //系数的符号位 if (this.xexp==0 || this.xexp>0 && this.coef!=1 && this.coef!=-1) str+=Math.abs(this.coef); //系数绝对值,省略系数1 if (this.xexp>0) str+=\"x\"; //指数为0时,省略x^0,只写系数 if (this.xexp>1) str+=\"^\"+this.xexp; //指数为1时,省略^1,只写x return str; 专业整理 知识分享 完美WORD格式 } public int compareTo(TermX term) //按x指数比较两项大小,实现Comparable 完美WORD格式 public class PolySinglyList 完美WORD格式 front = p; p = p.next; } else { front.next = new Node 完美WORD格式 return; Node 完美WORD格式 for (Node 完美WORD格式 System.out.println(\"A=\"+apoly.toString()+\"\\n\\nB=\"+bpoly.toString()+\"\\n\"); System.out.println(\"C=A-B,C=\"+cpoly.toString()); } } 6. 实验总结:(本次实验的收获、未解决的问题以及体会和建议等) 说明: 1. 实验名称、实验目的、实验内容、实验要求由教师确定,实验前由教师事先填好,然后作为实验报告模 版供学生使用; 2. 实验准备由学生在实验或上机之前填写,教师应该在实验前检查; 3. 实验过程由学生记录实验的过程,包括操作过程、遇到哪些问题以及如何解决等; 4. 实验总结由学生在实验后填写,总结本次实验的收获、未解决的问题以及体会和建议等; 5. 源程序、代码、具体语句等,若表格空间不足时可作为附录另外附页。 专业整理 知识分享 因篇幅问题不能全部显示,请点此查看更多更全内容