武汉纺织大学《数据结构》实验报告
班级: 12 级 专业 班 姓名: 序号:
实验时间: 20## 年 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("从 "+a+" 移到 "+c);
} }
3、编写一个程序,利用Java语言建立一个空队列,如果输入奇数,则奇数入队列;如果输入偶数,则队列中的第一个元素出队列;如果输入0,则退出程序。
实验步骤:
①、在Java编辑环境中新建程序,输入程序内容,并保存和编译;
②、运行程序,输入数据并进行相应队列操作。
③、输出每次输入数据后的队列结果。
三、操作步骤:
1.代码:
import java.util.ArrayList;
import java.util.List;
publicclass YSfh{
public YSfh(int number, int start, int distance) {
List<String> list = new ArrayList<String>(number);
for (int i = 0; i < number; i++)
list.add((char) ('A' + i) + "");
System.out
.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());
}
publicstaticvoid main(String args[]) {
new YSfh(5, 0, 2);
}
}
运行结果:
2.代码:
import java.util.Scanner;
publicclass MethodOfHanoi{
publicstaticvoid main(String[] args){
System.out.println("请输入盘子数目:");
Scanner scan=new Scanner(System.in); //输入盘子数目
int number=scan.nextInt();
hanoi(number,'A','B','C');
}
publicstaticvoid 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); //递归调用
}
}
publicstaticvoid move(char a,char c) //移动过程方法
{
System.out.println("从 "+a+" 移到 "+c);
}
}
运行结果:
3.代码
QQueue.java
publicinterface QQueue<T> {
boolean isEmpty();
boolean enqueue(T x);
T dequeue();
}
SeqQueue.java
publicclass SeqQueue<T> implements QQueue<T> {
private Object element[];
privateint front, rear;
public SeqQueue(int length) {
if (length < 64)
length = 64;
this.element = new Object[Math.abs(length)];
this.front = this.rear = 0;
}
public SeqQueue() {
this(64);
}
publicboolean isEmpty() {
returnthis.front == this.rear;
}
publicboolean enqueue(T x) {
if (x == null)
returnfalse;
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;
returntrue;
}
this.element[this.rear] = x;
this.rear = (this.rear + 1) % this.element.length;
returntrue;
}
public T dequeue() {
if (isEmpty())
returnnull;
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;
publicclass ts3{
publicstaticvoid main(String[] args) {
Scanner in = new Scanner(System.in);
SeqQueue<Integer> queue = new SeqQueue(64);
int num = -1;
while(num != 0) {
num = in.nextInt();
if (num % 2 == 0) {
if (queue.dequeue() == null) {
System.out.println("当前队列为空!");
}
} else {
if (!queue.enqueue(num)) {
System.out.println("当前队列满!");
}
}
System.out.println("当前队列:" + queue.toString())
}
}
}
四、实验收获和建议:
通过这次实验,完成了三个具体的操作任务,对课堂上学到的知识有了进一步的了解,虽然有些地方还不是很懂,通过与其他同学的交流,更深入的理解了线性表,串,栈,队列的相关学习内容
计算机科学与工程系
计算机科学与工程系
2
计算机科学与工程系
附录(可包括源程序清单或其它说明)
#include<iostream.h>
#include<stdlib.h>
#include"stdio.h"
typedef struct LNode{ //链表类型
int data;
struct LNode *next;
}LNode,*LinkList;
void createLink(LinkList &L,int n); //创建链表 void printList(LinkList L,int n); //输出链表
void Josephus(LinkList &L,int s,int m); //约瑟夫环 void createLink(LinkList &L,int n){
LinkList p,r;
L=(LinkList)malloc(sizeof(LNode));
r=(LinkList)malloc(sizeof(LNode));
r=L;
L->data=1;
L->next=NULL;
for(int i=2;i<=n;i++){
p=(LinkList)malloc(sizeof(LNode)); p->data=i;
p->next=NULL;
r->next=p;
r=p;
}
r->next=L;
}
void Josephus(LinkList &L,int s,int m){
LinkList p,q;
int count=1,t;
p=L;
for(int i=1;i<s;i++)
p=p->next;
while(p->next!=p){
if(count==m){
q=p->next;
p->next=p->next->next;
cout<<p->data<<" ";
t=p->data;
p->data=q->data;
delete q;
count=1;
}
count++;
3
计算机科学与工程系
p=p->next;
}
cout<<p->data<<endl;
delete p;
}
void printList(LinkList L,int n){
LinkList p;
p=L;
for(int i=0;i<n;i++){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void main(){
LinkList L;
int n,s,m;
cout<<"请输入Josephus环所需要的总人数n,起始点s,数过的人数m"<<endl; cin>>n;
cin>>s;
cin>>m;
createLink(L,n);
cout<<"链表输出:";
printList(L,n);
cout<<"约瑟夫环的出圈顺序:";
Josephus(L,s,m);
}
运行结果:
1. 当n=9,s=1,m=5 时
2. 当n=9,s=1,m=10 时
4
实验报告实验课程:数据结构实验项目:实验专业:计算机科学与技术姓名:**学号:***指导教师:**实验时间:20**-12-7重庆…
数据结构实验实验内容和目的掌握几种基本的数据结构集合线性结构树形结构等在求解实际问题中的应用以及培养书写规范文档的技巧学习基本的查…
数据结构实验报告目的要求掌握图的存储思想及其存储实现掌握图的深度广度优先遍历算法思想及其程序实现掌握图的常见应用算法的思想及其程序…
数据结构实验报告格式实验11顺序表的基本操作一实验目的1掌握使用VC上机调试线性表的基本方法2掌握线性表的基本操作插入删除查找等运…
数据结构实验报告全集实验一线性表基本操作和简单程序1实验目的1掌握使用VisualC60上机调试程序的基本方法2掌握线性表的基本操…
数据结构与算法分析实验报告班级指导老师学生组长数据结构与算法设计课程设计组号设计主题数据结构与算法设计实验指导老师组长学号组员学号…
数学与计算机学院约瑟夫环问题实验报告年级10级学号20xx434062姓名成绩专业电气信息计算机类实验地点主楼402指导教师史青宣…
数据结构课程设计报告课程名称课程设计题目姓名院系专业年级学号指导教师数据结构课程设计joseph环计算机学院20xx年12月18日…
徐州工程学院信电工程学院数据结构课程设计学院课程设计报告课程名称数据结构课程设计报告专业班级学生姓名学号设计题目约瑟夫环指导教师设…
郭艳慧实验一线性表081020数据结构实验报告班级学号姓名日期081020题目约瑟夫环一上机实验的问题和要求问题描述编号为1到n的…
《数据结构与算法设计》实验报告实验一学院:自动化学院班级:学号:**一、实验目的1、熟悉VC环境,学习使用C语言利用链表的存储结构…