关于队列的学习
我好久没弄这个了,要不是有人催我都快忘了
首先介绍下队列:
“队列”这个单词是英国人说的“排”。在英国“排队”的意思就是站到一排当中去。计算机科学中,队列是一种数据结构,有点类似栈,只是在队列中第一个插入的数据项也会最先被移除,而在栈中,最后插入的数据项最先移除。队列的作用就像电影院前的人们站成的排一样:第一个进入附属的人将最先到达队头买票。最后排队的人最后才能买到票。
在计算机中,队列和栈一样也被用作程序员的工具。它也可以用于模拟真实世界的环境,例如模拟人们在银行里排队等待,飞机等待起飞,或者因特网络上数据包等待传送。
在计算机操作系统里,有各种队列在安静地工作着。打印作业在打印队列中等待打印。当在键盘上敲击时,也有一个存储键入内容的队列。同样,如果使用文字处理程序敲击一个键,而计算机又暂时要做其它的事,敲击的内容不会丢失,它会排在队列中等待,直到文字处理程序有时间来读取它。利用队列保证了键入内容在处理时其顺序不会改变。(以上均为百度所得)
下面我来说下我是如何实现队列的
//定义一个类型为Object长度为0的数据
private Object[] arr = new Object[0];
//添加成员
public void add(Object obj) {
//新建一个数据,长度比原来的长度大1
Object[] arr2 = new Object[arr.length+1];
//将原来数组的数据复制到新的数组
for(int i = 0; i < arr.length; i++){
arr2[i] = arr[i];
}
//将要添加的数据放到新建数组的最后
arr2[arr2.length-1] = obj;
//用新建的数组替换掉原来的数组
arr = arr2;
}
//返回队列(其实就是数组)的长度
public int size() {
return arr.length;
}
//取某个位置对应的数据
public Object get(int index) {
if(index < 0 || index >= arr.length)
throw new java.lang.ArrayIndexOutOfBoundsException("超出队列范围:0-"+(arr.length-1));
return arr[index];
}
//删掉指定位置的数据
public void remove(int index) {
if(index < 0 || index >= arr.length)
throw new java.lang.ArrayIndexOutOfBoundsException("超出队列范围:0-"+(arr.length-1));
//新建一个数据,长度比原来的长度小1
Object[] arr2 = new Object[arr.length-1];
//将index之前的数据复制到新数据
for(int i = 0; i < index; i++){
arr2[i] = arr[i];
}
//将index之后的数据复制到新数据
for(int i = index+1; i < arr.length; i++){
arr2[i-1] = arr[i];
}
//替换原来的数组
arr = arr2;
}
//插入一个数据到指定位置
public void insert(int index, Object obj) {
if(index < 0 || index >= arr.length)
throw new java.lang.ArrayIndexOutOfBoundsException("超出队列范围:0-"+(arr.length-1));
//新建一个数据,长度比原来的长度大1
Object[] arr2 = new Object[arr.length+1];
//将index之前的数据复制到新数据
for(int i = 0; i < index; i++){
arr2[i] = arr[i];
}
//将index及之后的数据复制到新数据
for(int i = index; i < arr.length; i++){
arr2[i+1] = arr[i];
}
//插入新数据
arr2[index] = obj;
//替换原来的数组
arr = arr2;
}
其实队列就是数组,只要用数组的东西去处理就行了