湖南农业大学
Java数据结构课程设计报告
学生姓名:付常军 学 号:200941903224
年级专业:09级计算机科学与技术2班
指导老师 戴小鹏 学 院:东方科技学院
JAVA实训报告
付常军
(湖南农业大学东方科技学院,长沙 410128)
摘 要:JAVA实训课程的内容,包括对JAVA的初步了解,运用JAVA实现并解决相关问题等。
关键词:JAVA,实训,数据结构,核心代码
一、前言
本周我们依学校安排,很荣幸参加了由向明老师主讲,赵丹老师助理的JAVA实训。在这一周的时间里,我对JAVA这门语言有了一定的了解,也初步掌握了JAVA的一些基本技能,收获很大。通过这一周的学习,激发了我对编程的兴趣,也让我也了一定的编程能力。
二、实训内容
实训内容安排很合理,从基本的变量定义,初始化到类的继承等面向对象高级应用,使我们对java有了一个较系统的了解,并能用java实现一些简单的数据结构。
1.第一天
初步了解JAVA的发展领域,实用价值等内容;
了解JAVA虚拟机;
编写了第一个JAVA程序“HELLO WORLD”
JAVA中的变量和数据类型,数据转换,程序控制结构,回收机制等
2.第二天
JAVA中数组的声明,初始化以及一些其他的基本运用
3.第三天
JAVA中的对象的特征;
类与对象的区别;
访问权限,继承,借口与抽象类;
4.第四天
在JAVA中数据结构的基本运用;
5.第五天
用JAVA实现队列,链表,栈等基本的数据结构。
三、实训核心代码及截图
1.用JAVA实现队列
package Queue;
publicclass SqQueue {
publicint MAX = 100;
publicint data[]= newint[MAX];
publicint front= 0 ;
publicint rear= 0 ;
}
package Queue;
publicclass Queue {
private SqQueue q = new SqQueue();
public Queue(){
}
publicboolean QueueEmpty(){
return (q.rear==q.front);
}
publicint QueueLenth(){
return (q.rear - q.front + q.MAX )% q.MAX;
}
publicvoid enQueue(int e){
if((q.rear + 1) % q.MAX == q.front)
{
System.out.println("队满,不能进队");
return ;
}
q.rear = (q.rear + 1) % q.MAX;
q.data[q.rear]=e;
System.out.println("元素" + e + "已成功进队");
}
publicint deQueue() {
if(q.front == q.rear){
System.out.println("队空,不能出队");
return 0;
}
q.front = ( q.front +1 ) % q.MAX;
return q.data[q.front];
}
}/**
*
*/
package Queue;
/**
* @author 实验教学中心
*
*/
public class main1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int e;
Queue q ;
q= new Queue();
System.out.println("(1)初始化队列");
System.out.println("(2)依次进队元素 1,2,3");
q.enQueue(1);
q.enQueue(2);
q.enQueue(3);
if(q.QueueEmpty()){
System.out.println("(3)队列为空");
}
else{
System.out.println("(3)队列非空");
}
int t=0;
for(e=0;e<4;e++){
t=q.deQueue();
if(t!=0)
{
System.out.println("(4)出队一个元素" + t);
}
}
System.out.println("(5)队列元素的个数" + q.QueueLenth());
System.out.println("(6)依次进队元素 7,8,9");
for(e=7;e<10;e++){
q.enQueue(e);
}
System.out.println("(7)队列元素的个数" + q.QueueLenth());
System.out.println("(8)出队的序列" );
while(!q.QueueEmpty()){
t=q.deQueue();
if(t!=0)
{
System.out.println("(4)出队一个元素" + t);
}
}
}
}
2.用JAVA实现栈
栈:
package myPack;
import java.util.Scanner;
publicclass text {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
Scanner scan=new Scanner(System.in);
stack obj=new stack();
System.out.println("你想往栈里面输几个数?");
int temp=scan.nextInt();
for(int i=0;i<temp;i++)
{
int n=scan.nextInt();
obj.push(n);
}
System.out.println("判断栈是否为空!");
boolean y=obj.isempty();
System.out.println(y);
System.out.println("现在获得栈顶元素!");
System.out.println(obj.gettoop());
System.out.println("现在栈元素出栈!");
for(int i=0;i<temp;i++)
System.out.println(obj.pop());
}
}
package myPack;
publicclass stack {
privateint a[] = newint[100];
privateint top;
privateint n;
public stack() {
top = 0;
}
publicvoid push(int i) {
a[top] = i;
n = top;
top++;
}
publicint pop() {
if(top==-1)
return 0;
return a[--top];
}
publicvoid display() {
int i = 0;
for (i = n; i >= 0; i--)
System.out.print(a[i]);
}
publicint gettoop() {
return a[n];
}
publicboolean isempty() {
if (top != 0)
returnfalse;
returntrue;
}
}
运行结果:
3.用JAVA实现单链表
package mt
public class linked {
int data;
linked next;
linked pre;
package mt;
public class linkined {
linked head = new linked();
linked p = new linked();
int size = 0;
int binary;
public linkined() {
head.next = null;
head.pre = null;
p = head;
}
public void add(int d) {
linked n = new linked();
n.data = d;
p.next = n;
n.next = null;
// n.pre=null;
p =n;
size++;
}
public int get(int j) {
linked p = new linked();
p = head;
if (size <= 0) {
System.out.println("err");
return -1;
} else {
for (int i = 1; i <=j; i++) {
p = p.next;
}
return p.data;
}
}
public void delete(int j) {
linked p = new linked();
p = head;
if (j < 2 || j > binary)
System.out.println("error!");
else {
linked n = new linked();
int i = 0;
while (i + 1 != j) {
p = p.next;
i++;
}
n = p.next;
p.next = n.next;
}
}
public void display() {
linked p = new linked();
p = head;
while (p.next!= null) {
p = p.next;
System.out.print(p.data);
}
System.out.print("\n");
}
public void update(int j,int n) {
linked p = new linked();
p=head;
if (size <= 0) {
System.out.println("err");
}
else{
for(int i=1;i<size;i++)
{
p=p.next;
if(i==j)
{
p.data=n;
// System.out.println(" p.data:"+ p.data);
}
}
}
}
}
package mt;
import java.util.Scanner;
public class Text {
/**
* @param args
*/
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
linkined obj=new linkined();
System.out.println("请输入你要做多长的链表");
int temp=scan.nextInt();
obj.binary=temp;
for(int i=0;i<temp;i++)
{
int t=scan.nextInt();
obj.add(t);
}
obj.display();
System.out.println("你想获得第几个元素");
temp=scan.nextInt();
System.out.println(obj.get(temp));
System.out.println("你想修改第几个元素");
temp=scan.nextInt();
int n=scan.nextInt();
obj.update(temp, n);
obj.display();
System.out.println("你想删除第几个元素");
temp=scan.nextInt();
obj.delete(temp);
obj.display();
}
}
4.}用JAVA实现双链表
双链表:
package myPack;
import java.util.Scanner;
publicclass text {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
Scanner scan=new Scanner(System.in);
doublelinkined obj=new doublelinkined();
System.out.println("你想做多长的双链表!");
int temp=scan.nextInt();
//obj.binary=temp;
for(int i=0;i<temp;i++)
{
int n=scan.nextInt();
obj.add(n);
}
obj.display();
System.out.println("你想删除第几个元素!");
obj.delete(scan.nextInt());
obj.display();
System.out.println("你想获得第几个元素!");
System.out.println(obj.get(scan.nextInt()));
System.out.println("你想更新第几个元素!");
temp=scan.nextInt();
int n=scan.nextInt();
obj.update(temp, n);
obj.display();
}
}
package myPack;
publicclass doublelinkined extends linkined {
linked head = new linked();
linked last = new linked();
linked p = new linked();
int binary;
privateint size = 0;
public doublelinkined() {
head.pre = head.next = null;
last.next = null;
p = head;
}
@Override
publicvoid add(int d) {
linked n = new linked();
n.data = d;
p.next = n;
n.next = null;
p = n.pre;
p = n;
last = p;
size++;
// super.add(d);
}
@Override
publicvoid delete(int i) {
// super.delete(j);
linked p = new linked();
p = head;
int j = 0;
while (j < i - 1) {
j++;
p = p.next;
}
linked n = new linked();
n = p.next;
p.next = n.next;
p.next.pre = n;
}
@Override
publicvoid display() {
// super.display()
linked p = new linked();
p = head;
while (p.next != null) {
p = p.next;
System.out.print(p.data + " ");
}
System.out.print("\n");
}
@Override
publicint get(int j) {
// return super.get(j);
linked p = new linked();
p = head;
if (j <= binary / 2) {
if (size <= 0) {
System.out.println("err");
return -1;
} else {
for (int i = 1; i <= j; i++) {
p = p.next;
}
return p.data;
}
} else {
linked n = new linked();
n = last;
if (size <= 0) {
System.out.println("err");
return -1;
} else {
for (int i = binary - 1; i >= j; i--)
n = n.next;
return n.data;
}
}
}
@Override
publicvoid update(int j, int n) {
// super.update(j, n);
linked p = new linked();
p = head;
if (j <= binary / 2) {
if (size <= 0) {
System.out.println("err");
} else {
for (int i = 1; i < size; i++) {
p = p.next;
if (i == j) {
p.data = n;
// System.out.println(" p.data:"+ p.data);
}
}
}
} else {
linked y = new linked();
y = last;
if (size <= 0) {
System.out.println("err");
} else {
for (int i = binary - 1; i >= 0; i--) {
y = y.next;
if (i == j)
y.data = n;
}
}
}
}
}
运行结果:
四、结论
通过这次JAVA实训,使我在掌握++的基础上有重新了解了一门高级语言,这使得我对编程产生了更浓厚的兴趣C,也使我更深入地了解了面向对象编程。通过用JAVA实现一些简单的数据结构,也开拓了我的思维,使我对算法产生了浓厚的兴趣。我意识到数据结构是程序设计的主要部分。
致 谢
在向明老师与赵丹老师的教导下,我顺利完成了这次的数据结构JAVA实训,获益匪浅,在此郑重感谢两位老师!
付常军
2010.12.10