队列的实现就显的有点麻烦了,因为队列是一种先进先出的数据结构,如果是用数组去做的话,就会导致数组的浪费,因为当你pop的时候,头指针向后移动,会导致index从0开始向后面的逐步浪费,但是你如果在pop操作后让数组先前移动的话,又会导致时间复杂度上的提升,所以用数组去完成队列的操作就会显的不是很完美;
(其实我觉得可以让数组变成一个环路,当尾指针指向size的时候就让他从0开始,当头和尾相撞的时候呢就报超模了,在扩容的时候就扩容(判断尾指针的位置进行一下复制的操作)这样的话就不会出现上述的问题,但是在扩容的时候会出现复杂度为N的复制操作,但是在空间的利用上还是pop的操作上都比上述的两种方法好,今后我会完成放出来的)
但是如果用链表去实现队列的操作就不会显的怎么笨重,pop的时候直接弹出头节点,push操作就在尾节点上加上一个节点,所以我比较倾向与用链表完成。
代码的完成:
//对节点的定义
class node{
int var;
node next = null;
public node(int var){
var = this.var;
}
public node(){
}
}
class queue{
private node first;//头节点
private node last;//尾节点
private int count = 0;//长度
//队列的添加元素
public void add(int var){
node llast = last;
last = new node(var);
if (count == 0){
first = new node(var);
}else {
llast.next = last;
}
count++;
}
//队列弹出队首元素
public int pop(){
node ffirst = first;
int var = ffirst.var;
ffirst = null;
first = first.next;
count--;
return var;
}
//判断队列是否空
public boolean isEmpty(){
if(count == 0) return true;
else return false;
}
//遍历元素
public void iterator(){
node Node = first;
while (Node.next != null){
System.out.print(Node.var + " ");
}
}
}
//验证是否完成操作
public class queuee {
public static void main(String[] args){
queue Queue = new queue();
if (Queue.isEmpty()){
System.out.println("为空操作完成");
}else {
System.out.println("为空操作失败");
}
Queue.add(111);
if (!Queue.isEmpty()){
System.out.println("添加操作完成");
}
int var = Queue.pop();
if (Queue.isEmpty()){
System.out.println("弹出操作完成且var = " + var);
}
}
}
只做了一些基础操作,还有很多的操作未实现