Java泛型实现单链表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号11710115
天津城建大学
Java 语言程序设计C
实验报告
实验3:泛型实现链表
学生姓名路江飞
班级11卓越七班
一、实验内容
1.掌握使用Java语言进行结构化程序设计;
2.熟悉Java泛型。

3.熟悉Eclipse开发环境,编写简单的Application程序,并编译和执行。

二、实验要求
1.调试程序、编译,运行后得到正确的结果;
2.写出实验报告,要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。

三、实验结果
文件1:
package _List;
class Node<E>{
E e;
Node <E> next;
Node(E e){
this.e=e;
next=null;
}
}
文件2:
package _List;
public class Show {
void print(){
System.out.println("*************************************");
System.out.println("* 1.按位查找*");
System.out.println("* 2.按值查找*");
System.out.println("* 3.插入*");
System.out.println("* 4.按位删除*");
System.out.println("* 5.按值删除*");
System.out.println("* 6.修改*");
System.out.println("* 7.遍历*");
System.out.println("* 8.查看链表长度*");
System.out.println("* 9.退出*");
System.out.println("*************************************");
}
}
文件3:
package _List;
import java.util.Scanner;
public class List<E> {
Node <E> head;
List(){
this.head=null;
}
List(E e[],int n){ //构造函数
this.head=new Node <E>(e[0]);
Node <E> r=this.head;
for(int i=1;i<n;i++){
Node <E>s=new Node <E>(e[i]);
r.next=s;
r=s;
}
r.next=null;
}
void add (E e){//按位置插入
int index,b=1;
Scanner input=new Scanner(System.in);
for(int j=0;b==1;j++){
System.out.print("请输入插入的位置(第一个数据之前是0号位置,以此类推):");
try{
index=input.nextInt();
}
catch(Exception a){
System.out.println("输入错误!");
continue;
}
if(index>this.Length()||index<0) { System.out.println("插入位置错误!");
continue;
}
if(index==0){
Node <E>s=new Node <E>(e);
s.next=this.head;
this.head=s;
b=0;
}
else{
int i=1;
Node <E> p=this.head;
while(i<index){
p=p.next;
i++;
}
Node <E>s=new Node <E>(e);
s.next=p.next;
p.next=s;
b=0;
}
}
}
void delete(){ //按位置删除
int index,b=1;
for(int j=0;b==1;j++){
Scanner input=new Scanner(System.in);
System.out.print("请输入删除的位置(第一个数据是1号位置,以此类推):");
try{
index=input.nextInt();
}
catch(Exception e){
System.out.println("输入错误!");
continue;
}
if(index>this.Length()||index<=0) {
System.out.println("删除位置错误!");
continue;
}
Node <E> p=this.head;
int i=1;
if(index==1){
this.head=p.next;
b=0;
}
else{
while(i<index-1){
p=p.next;
i++;
}
p.next=p.next.next;
b=0;
}
}
}
void delete(E e){ //按值删除
Node <E> p=this.head;
Node <E> q = null;
if(e.equals(p.e)){ //处理数据在1号位置的特殊情况this.head=p.next;
}
else{
while(p!=null){
if(e.equals(p.e)){
q.next=p.next;
break;
}
q=p; //p为要删除数据的前一个
p=p.next;
}
}
if(p==null){
System.out.println("删除的数据不存在!");
}
}
void Set(E a){ //按位置修改
int index,b=1;
Scanner input=new Scanner(System.in);
for(int j=0;b==1;j++){
System.out.print("请输入修改的位置:");
try{
index=input.nextInt();
}
catch(Exception e){
System.out.println("输入错误!");
continue;
}
int i=1;
Node <E> p=this.head;
if(index<=0||index>this.Length()) {
System.out.println("修改位置错误!");
continue;
}
while(i<index){
p=p.next;
i++;
}
p.e =a;
b=0;
}
}
int Length(){ //链表长度
int count=0;
Node <E> p=this.head;
while(p!=null){
count++;
p=p.next;
}
return count;
}
void Get(){ //按位查找
int index,b=1;
for(int j=0;b==1;j++){
Scanner input=new Scanner(System.in);
System.out.print("请输入查询的位置:");
try{ //检测异常
index=input.nextInt();
}
catch(Exception e){ //捕捉异常
System.out.println("输入错误!");
continue;
}
int i=1;
Node <E> p=this.head;
if(index>this.Length()||index<=0){
System.out.println("查找位置错误!");
continue;
}
while(i<index){
p=p.next;
i++;
}
System.out.println("第"+index+"个元素为:"+p.e.toString());
b=0;
}
}
void Get1(E e){ //按值查找
Node <E> p=this.head;
int index=1;
for(int i=0;p!=null;i++){
if(e.equals(p.e)){ //不能写成p.e==e和s1==s2
System.out.println(p.e.toString()+"是第"+index+"个数!");
break;
}
else{
p=p.next;
index++;
}
}
if(p==null)
System.out.println("所找的数据不存在!");
}
void printlist(){ //遍历
Node <E> p=this.head;
if(p==null){
System.out.println("链表没有元素");
}
else{
while(p.next!=null){
System.out.print(p.e.toString()+" ");
p=p.next;
}
System.out.println(p.e.toString());
}
}
}
文件4:
package _List;
import java.util.Scanner;
public class MainClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str[]={"12","43","54","23","abc"};
int lenth=str.length;
int k=1,t=0;
List <String>a=new List<String>(str,lenth);//初始化链表
Show show=new Show();
show.print();
for(int i=0;k==1;i++){
System.out.print("请选择您的操作:");
try{
Scanner input=new Scanner(System.in);
t=input.nextInt();
}
catch(Exception e){
System.out.println("输入错误!");
continue;
}
Scanner input1=new Scanner(System.in);
switch (t){
case 1:
a.Get();
break;
case 2:
System.out.print("请输入您要查找的数据:");
String h=input1.nextLine();
a.Get1(h);
break;
case 3:
System.out.print("请输入您要插入的数据:");
String m=input1.nextLine();
a.add(m);
break;
case 4:
a.delete();
break;
case 5:
System.out.print("请输入您要删除的数据:");
String s=input1.nextLine();
a.delete(s);
break;
case 6:
System.out.print("请输入您要修改后的数据:");
String n=input1.nextLine();
a.Set(n);
break;
case 7:
a.printlist();
break;
case 8:
System.out.println("链表的长度:"+a.Length());
Break ;
case 9:
k=0;
break;
default:
System.out.println("输入错误!");
break;
}
}
}
}
运行结果:。

相关文档
最新文档