武汉纺织大学数据结构实验报告1Word格式文档下载.doc
- 文档编号:240282
- 上传时间:2023-04-28
- 格式:DOC
- 页数:8
- 大小:100.50KB
武汉纺织大学数据结构实验报告1Word格式文档下载.doc
《武汉纺织大学数据结构实验报告1Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《武汉纺织大学数据结构实验报告1Word格式文档下载.doc(8页珍藏版)》请在冰点文库上搜索。
publicclassMethodOfHanoi{
publicstaticvoidmain(String[]args){
System.out.println(“请输入盘子数目:
”);
Scannerscan=newScanner(System.in);
//输入盘子数目
intnumber=scan.nextInt();
hanoi(number,‘A’,‘B’,‘C’);
//调用hanoi方法
}
publicstaticvoidhanoi(intnum,chara,charb,charc){
if(num==1)//只有一个盘子,直接移动
{
move(a,c);
}else{
hanoi(num-1,a,c,b);
//递归调用
hanoi(num-1,b,a,c);
//递归调用
}
publicstaticvoidmove(chara,charc)//移动过程方法
{
System.out.println("
从"
+a+"
移到"
+c);
}}
3、编写一个程序,利用Java语言建立一个空队列,如果输入奇数,则奇数入队列;
如果输入偶数,则队列中的第一个元素出队列;
如果输入0,则退出程序。
实验步骤:
①、在Java编辑环境中新建程序,输入程序内容,并保存和编译;
②、运行程序,输入数据并进行相应队列操作。
③、输出每次输入数据后的队列结果。
4、编写程序,利用数组解决以下实际问题(二选一)
(1)、如果矩阵A中存在这样的一个元素A[i][j],满足条件:
A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。
试编写程序计算出m*n矩阵A的所有马鞍点。
①、在Java编辑环境中新建程序,输入完整程序内容,并保存和编译;
②、运行程序,输入数组行数m和列数n;
③、依次输入数组各个数据元素;
④、输出鞍点求取结果。
(2)、编写程序以构造一个n阶魔阵。
所谓魔阵是这样的一个方阵,它的每一行、每一列和对角线之和均相等,例如3阶魔阵为:
816
357
492
解决方法如下:
(1)、将1放在第一行中间一列;
(2)、从2开始直到n×
n为止,各数依次按照下列规则存放:
每一个数存放的行比前一个数的行数减1,列数加1;
(3)、如果上一个数的行数为1,则下一个数的行数为n(指最下一行);
(4)、当上一个数的列数为n时,下一个数的列数应为1,行数减1;
(5)、如果按照上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。
②、运行程序,输入n值;
③、输出n阶魔阵。
三、操作步骤:
1、编写一个Java语言程序,利用线性表实现约瑟夫环问题
程序代码:
packagezy;
publicclassJosephus{
publicJosephus(intnumber,intstart,intdistance){
SeqList<
String>
list=newSeqList<
(number);
for(inti=0;
i<
number;
i++)
list.append((char)('
A'
+i)+"
"
);
System.out.print("
约瑟夫环("
+number+"
"
+start+"
+distance+"
),"
System.out.println(list.toString());
inti=start;
while(list.length()>
1){
i=(i+distance-1)%list.length();
System.out.print("
删除"
+list.remove(i).toString()+"
System.out.println(list.toString());
}
System.out.println("
幸存者是"
+list.get(0).toString());
}
publicstaticvoidmain(Stringargs[]){
newJosephus(5,0,2);
publicclassSeqList<
T>
implementsLList<
{
privateObject[]element;
privateintlen;
publicSeqList(intsize){
this.element=newObject[size];
this.len=0;
publicSeqList(){this(64);
publicbooleanisEmpty(){returnthis.len==0;
publicintlength(){returnthis.len;
publicTget(inti){
if(i>
=0&
&
this.len)
return(T)this.element[i];
returnnull;
publicvoidset(inti,Tx){
if(x==null)
return;
this.element[i]=x;
else
thrownewIndexOutOfBoundsException(i+"
publicStringtoString(){
Stringstr="
("
;
if(this.len>
0)
str+=this.element[0].toString();
for(inti=1;
this.len;
str+="
+this.element[i].toString();
returnstr+"
)"
publicvoidinsert(inti,Tx){
if(this.len==element.length){
Object[]temp=this.element;
this.element=newObject[temp.length*2];
for(intj=0;
j<
temp.length;
j++)
this.element[j]=temp[j];
if(i<
i=0;
i=this.len;
for(intj=this.len-1;
j>
=i;
j--)
this.element[j+1]=this.element[j];
this.element[i]=x;
this.len++;
publicvoidappend(Tx){insert(this.len,x);
publicTremove(inti){
if(this.len==0||i<
0||i>
=this.len)
returnnull;
Told=(T)this.element[i];
for(intj=i;
this.len-1;
this.element[j]=this.element[j+1];
this.element[this.len-1]=null;
this.len--;
returnold;
publicvoidremoveAll(){this.len=0;
publicinterfaceLList<
booleanisEmpty();
intlength();
Tget(inti);
voidset(inti,Tx);
voidinsert(inti,Tx);
voidappend(Tx);
Tremove(inti);
voidremoveAll();
运行结果:
2、编写一个程序,利用栈解决递归问题,实现n阶Hanoi塔问题
publicstaticvoidmain(String[]args){
请输入盘子的数目:
Scannerscan=newScanner(System.in);
intnumber=scan.nextInt();
hanoi(number,'
'
B'
C'
publicstaticvoidhanoi(intnum,chara,charb,charc){
if(num==1){
move(a,c);
else{
hanoi(num-1,a,c,b);
hanoi(num-1,b,a,c);
}
publicstaticvoidmove(chara,charc){
}
如果输入0,则退出程序
importjava.util.*;
publicclassNO3{
publicstaticvoidmain(String[]args){
Scannersanner=newScanner(System.in);
Queue<
Integer>
q=newLinkedList<
();
intnumber=sanner.nextInt();
if(number==0){
System.exit(0);
}
while(number!
=0){
number=sanner.nextInt();
if(number%2==0&
number!
q.poll();
System.out.println(q.toString());
}
if(number%2==1){
q.offer(number);
}
}
4、编写程序以构造一个n阶魔阵。
所谓魔阵是这样的一个方阵,它的每一行、每一列和对角线之和均相等
publicclassMZ{
publicstaticvoidmain(String[]args){
System.out.println("
请输入数字:
Scannersc=newScanner(System.in);
intn=sc.nextInt();
int[][]a=newint[n][n];
inti=0;
intj=n/2;
for(intk=1;
k<
=n*n;
k++){
a[i][j]=k;
if(k%n==0){
i=(i+1)%n;
}
else{
i=(i-1+n)%n;
j=(j+1)%n;
}
}
for(intk=0;
a.length;
k++){
for(intr=0;
r<
a[k].length;
r++){
System.out.print(a[k][r]+"
\t"
System.out.println();
}
四、实验收获和建议:
通过本实验报告,基本熟悉了Java上机环境,掌握了Java语言编程方法,熟练运用Java语言实现数据结构设计和算法设计;
掌握了线性表的顺序存储结构和链式存储结构的定义与基本操作,并能用Java语言实现线性表基本功能;
掌握了栈、队列的存储结构与基本操作,并能利用该结构编写算法解决实际问题;
以及数组的存储结构与基本操作,并能利用该结构编写算法解决实际问题,受益匪浅。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉 纺织 大学 数据结构 实验 报告