队列初解

队列的初解
2013.7.11
在昨天上课之前,对于队列,是一个陌生而又神奇的东西,后来跟着胡哥的思路看他自己创建了一个队列才知道,工具已经
在自己手中了,东西的成型与否在于自己怎么去用,或者,利用已有的工具创建一个更高级一点的工具,然后再创建工具直
到创建一个美丽的事物,这也许就是一个软件工程师做的简单但又极其考验毅力的东西。
然后今天,自己做了一个队列的类,虽然不太完美,也很简单,但毕竟是自己造出的东西,每天就这样写一篇日记就当鼓励
自己了。
首先,建立一个队列类是为了使用它,所以最初步的建立了两个类MyQueue,TestQueue。
先考虑我的队列想要实现的功能:
  1.能添加数据,长度可变
  2.能找到指定位置数据
  3.能统计数据个数
  4.删除
  5.指定位置插入
然后开始考虑各个方法实现的算法了,代码就复制一下
//创建队列类
public class MyQueue{
private int count;//设置计数器属性
private int mqs[]=new int[0];//队列实现的基本方式为将队列类比为数组

//在队列中加入数据,主要思路是每加入一个数据,都新建一个长度比当前大1的数组并舍弃旧的数组,使新数组成为队列
public void add(int a){
int mqsN[]=new int [mqs.length+1];
for(int i=0;i<mqs.length;i++){
mqsN[i]=mqs[i];
}
mqsN[mqs.length]=a;
this.mqs=mqsN;
}

//在队列指定位置加入数据
public void add(int a,int index){
int mqsN[]=new int [mqs.length+1];
for(int i=0;i<index;i++){
mqsN[i]=mqs[i];
}
mqsN[index]=a;
for(int i=index+1;i<mqsN.length;i++){
mqsN[i]=mqs[i-1];
}
this.mqs=mqsN;
}

//打印队列中的数据内容,方法同数组
public void print(){
for(int i=0;i<mqs.length;i++){
System.out.print(mqs[i]+"    ");
}
}

//查找指定位置的数据,方法同数组
public int search(int index){
if(index<mqs.length){
return mqs[index];
}else
{
System.out.print("超出队列长度,查找失败");
return 0;
}
}

//计数方法,返回队列的数据个数,方法同数组
public int count(){
return mqs.length;
}

//删除操作,方法同数组
public void delet(int index){
int mqsN[]=new int [mqs.length-1];
for(int i=0;i<index;i++){
mqsN[i]=mqs[i];
}
for(int i=index;i<mqsN.length;i++){
mqsN[i]=mqs[i+1];
}
this.mqs=mqsN;
}

}

测试用的类就不写了。
其实技术性的东西确实少的可怜,思路主宰一切。
然后就是真正的心得了:
1.编出一个东西没有想象中的那么难了,虽然也许是这个练习简单的缘故,但至少不会见到练习就胆怯了,从简单的开始
找回自信吧。
2.回头来看,下午在尝试用队列存储五子棋中的棋子时,发现又得重新建一个队列,重新复制粘贴,改变队列中存储数据
的类型。晚上上课时胡哥介绍了一个“泛型”更简单的解决这个问题,学海无涯啊!public class MyQueue<E>{
......}
3.上课的心得吧,学姐学长老师的重要词汇:技术博客、课外学习...还有不记得了,但是慢慢积累总没错。
4.还有的疑问不要忘记:如何利用队列和重绘保存五子棋棋子、五子棋棋盘随界面的大小变化大小。
今天就先到这里


 

猜你喜欢

转载自linsyyang.iteye.com/blog/1904019