队列(第一次修改)

之前关于队列的代码实在是有很多地方应该改善,在此再次对热心帮我指出缺点的朋友表示感谢,不过我感觉如果用数组实现队列扩容还是得每次new一个新的数组,所以那部分只是修改了将原数组中数据复制到新数组中的方法。下面是我修改后的代码。
package com20130323;
/**
* 定义一个队列类
* @author Administrator
*
*/
public class ModifyQueue {
//系统自定义初始长度为100,每次扩容5
private int len = 100;
private int increase = 10;

//count用来记录当前数组中最后一个元素的下标
int count = 0;
String[] src ;

/**
* 重载构造函数,用户自定义队列的初始长度和每次扩容的长度
* @param len 队列初始长度
* @param increase 每次扩容增加的长度
*/
public ModifyQueue(int len,int increase){
this.len = len;
this.increase = increase;
src = new String[len];
}


/**
* 用户无法提供初始长度和每次增加的值时,使用默认参数
*/
public ModifyQueue(){
this(100,10);
}


/**
* 实现添加元素的方法
* @param s 是要添加的元素
*/
public void add(String s){
//先判断数组是否需要扩容
if(count<src.length&&src[count]==null){
src[count] = s;
count++;
}
else{
//定义一个新的数组,长度为原数组长度+1
String[] dest = new String[src.length+increase];
//将原来数组中的元素依次存入新数组
System.arraycopy(src, 0, dest, 0, src.length);
//将新数组赋值给原数组
src = dest;
src[count] = s;
count++;
}
}

/**
* 打印出队列非空元素
*/
public void print(){
for(int i=0;i<src.length;i++){
if(src[i]!=null){
String s = src[i];
System.out.println(s);
}
}
}
/**
* 删除下标为i的元素
* @param i
*/
public void delete(int i){
//定义一个新的数组,长度为原数组长度+1
String[] dest = new String[src.length-1];
System.arraycopy(src,0,dest,0,i);
System.arraycopy(src,i+1,dest,i,dest.length-i);

//将新数组赋值给原数组
src = dest;
}


/**
* 查找下标为i的元素
* @param i 要查找元素的下标
* @return 返回下标为i的元素
*/
public String get(int i){
String s = src[i];
return s;
}



/**
* 修改下标为i的元素
* @param i 要修改的元素的下标
*/
public void modify(int i,String s){
src[i] = s;
}
/**
* 得到队列长度的方法
* @return 返回队列的长度
*/
public int size(){
return src.length;
}
}


package com20130323;

import java.util.Scanner;

import com20130317.Queue;

/**
* 定义一个队列测试类
* @author Administrator
*
*/
public class Test {
public static void main(String args[]){
ModifyQueue qu ;
System.out.println("请输入要创建队列初始长度和扩容大小:");
System.out.println("当您输入0 0时系统将采用默认参数");

Scanner input = new Scanner(System.in);
int len = input.nextInt();
int increase = input.nextInt();
if(len!=0&&increase!=0){
qu = new ModifyQueue(len,increase);
}
else{
qu = new ModifyQueue();
//初始创建10个元素,便于后面对ModifyQueue中方法的测试
len = 10;
}

for(int i=0;i<len;i++){
qu.add("姓名"+i);
}
qu.print();

System.out.println("输入1执行的是增加操作");
System.out.println("输入2执行的是删除操作");
System.out.println("输入3执行的是找操作");
System.out.println("输入4执行的是改操作");
System.out.println("请输入:");

for(int i=0;i<4;i++){
int choose = input.nextInt();
switch(choose){
case 1: qu.add("增加的");break;
case 2: System.out.println("请输入要删除元素位置:");
int n = input.nextInt();
qu.delete(n); break;
case 3: System.out.println("请输入要查找元素位置:");
int m = input.nextInt();
String s =qu.get(m); System.out.println(s);return;
case 4: qu.modify(1,"被改了");break;
default : System.out.println("请输入1至4");
}

qu.print();
System.out.println();
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值