武汉纺织大学《数据结构》实验报告
班级: 级 管工类 专业 2 班 姓名: 序号: 1 实验时间: 2014 年 4 月 4 日 指导教师:
实验一:线性结构的基本操作
一、实验目的:
1、熟悉Java 上机环境,掌握Java语言编程方法,熟练运用Java语言实现数据结构设计和算法设计。 2、掌握线性表的顺序存储结构和链式存储结构的定义与基本操作,并能用Java语言实现线性表基本功能。
3、掌握栈、队列的存储结构与基本操作,并能利用该结构编写算法解决实际问题。
二、实验内容:
1、编写一个Java语言程序,利用线性表实现约瑟夫环问题,参考书本程序示例【例2.1】,完善该程序并运行。 实验步骤:
①、在Java编辑环境中新建程序,根据【例2.1】输入完整程序内容,并保存和编译; ②、运行程序,输入约瑟夫环长度number、起始位置start、计数值distance; ③、依次输入约瑟夫环中number个数据元素; ④、输出约瑟夫环执行过程。
2、编写一个程序,利用栈解决递归问题,实现n阶Hanoi塔问题。 实验步骤:
①、在Java编辑环境中新建程序,输入n阶Hanoi塔程序内容,并保存和编译;
②、运行程序,输入盘子数目n。
③、输出n阶Hanoi塔问题解决过程。 参考程序如下:
import java.util.Scanner; public class MethodOfHanoi{
public static void main(String[] args){ System.out.println(“请输入盘子数目:”);
Scanner scan=new Scanner(System.in); //输入盘子数目 int number=scan.nextInt();
hanoi(number,‘A’,‘B’,‘C’); //调用hanoi方法 }
public static void hanoi(int num, char a,char b,char c){
if (num==1) //只有一个盘子,直接移动 {
move(a,c); }else{
hanoi(num-1,a,c,b); //递归调用 move(a,c);
hanoi(num-1,b,a,c); //递归调用 }
} public static void move(char a,char c) //移动过程方法 {
System.out.println(\从 \移到 \
} }
3、编写一个程序,利用Java语言建立一个空队列,如果输入奇数,则奇数入队列;如果输入偶数,则队列中的第一个元素出队列;如果输入0,则退出程序。 实验步骤:
①、在Java编辑环境中新建程序,输入程序内容,并保存和编译; ②、运行程序,输入数据并进行相应队列操作。 ③、输出每次输入数据后的队列结果。
三、操作步骤: 1.代码:
import java.util.ArrayList; import java.util.List;
public class YSfh{
public YSfh(int number, int start, int distance) { List
.print(\约瑟夫环(\ + number + \ + start + \ + distance + \); System.out.print(list.toString()); int i = start;
while (list.size() > 1) {
i = (i + distance - 1) % list.size();
System.out.print(\删除\ + list.remove(i).toString() + \); System.out.print(list.toString()); }
System.out.print(\被赦免者是\ + list.get(0).toString());
}
public static void main(String args[]) { new YSfh(5, 0, 2); } }
运行结果:
2.代码:
import java.util.Scanner; public class MethodOfHanoi{
public static void main(String[] args){ System.out.println(\请输入盘子数目:\);
Scanner scan=new Scanner(System.in); //输入盘子数目 int number=scan.nextInt();
hanoi(number,'A','B','C'); }
public static void hanoi(int num, char a,char b,char c){ if (num==1) //只有一个盘子,直接移动 {
move(a,c); }else{
hanoi(num-1,a,c,b); //递归调用 move(a,c);
hanoi(num-1,b,a,c); //递归调用
}
} public static void move(char a,char c) //移动过程方法 {
System.out.println(\从 \+a+\移到 \+c); } }
运行结果:
3.代码
QQueue.java
public interface QQueue
boolean isEmpty(); boolean enqueue(T x); T dequeue();
SeqQueue.java
public class SeqQueue
public SeqQueue(int length) {
if (length < 64)
length = 64;
this.element = new Object[Math.abs(length)]; private Object element[]; private int front, rear;
this.front = this.rear = 0;
}
public SeqQueue() { this(64);
}
public boolean isEmpty() { return this.front == this.rear; }
public boolean enqueue(T x) { if (x == null) return false;
if (this.front == (this.rear + 1) % this.element.length) { Object[] temp = this.element;
this.element = new Object[temp.length * 2]; int i = this.front, j = 0; while (i != this.rear) { this.element[j] = temp[i]; i = (i + 1) % temp.length; j++;
}
this.front = 0; this.rear = j; return true;
}
this.element[this.rear] = x;
this.rear = (this.rear + 1) % this.element.length; return true;
}
public T dequeue() { if (isEmpty())
return null;
T temp = (T) this.element[this.front];
this.front = (this.front + 1) % this.element.length; return temp; }
public String toString() { String str = \; if (!isEmpty()) { str += this.element[this.front].toString(); int i = (this.front + 1) % this.element.length; while (i != this.rear) { str += \ + this.element[i].toString(); i = (i + 1) % this.element.length;
}
}
}
}
return str + \;
ts3.java
import java.util.Scanner;
public class ts3{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
SeqQueue
while(num != 0) {
num = in.nextInt();
if (num % 2 == 0) { }
System.out.println(\当前队列:\ + queue.toString())
if (queue.dequeue() == null) {
System.out.println(\当前队列为空!\);
}
if (!queue.enqueue(num)) {
System.out.println(\当前队列满!\); }
} else {
} } }
四、实验收获和建议:
通过这次实验,完成了三个具体的操作任务,对课堂上学到的知识有了进一步的了解,虽然有些地方还不是很懂,通过与其他同学的交流,更深入的理解了线性表,串,栈,队列的相关学习内容