优化这段代码//设计链队数据结构及其基本操作 public class CarQueue { private CarNode front;//队首指针 private CarNode rear;//队尾指针 //链队列类的构造函数 public CarQueue() { front=rear=null; } //队列置空 public void clear() { front=rear=null; } //车辆队列判空 public boolean isEmpty() { return front==null; } //求队列长度 public int length() { CarNode p=front; int length=0; while(p!=null) { p=p.next;//指针下移 ++length;//计数器+1 } return length; } //取出队首元素 public Object peek() { if(front!=null)//队列非空 return front.car;//返回队首结点的数据域值 else return null; } //车辆入队 public boolean offer(Car car) { CarNode p=new CarNode(car);//初始化新结点 if(front!=null)//队列非空 { rear.next=p; rear=p;//改变队尾位置 } else { front=rear=p; } return true; } //车辆出队 public Object poll() { if(front!=null)//队列非空 { CarNode p=front;//p指向队首结点 front=front.next;//队首结点出列 if(p==rear)//被删除的结点是队尾结点时 rear=null; return p.car;//返回队首结点的数据域值 } else return null; } //输出队列中的所有数据元素(从头到尾) public void display() { CarNode p=front; while(p!=null) { System.out.println(p.car+","); p=p.next; } } }
时间: 2023-12-03 14:47:42 浏览: 134
1. 在 offer 方法中,可以直接将新结点 p 设置为 rear 的下一个结点,然后再将 rear 指向 p,这样可以减少判断队列是否为空的代码:
```
public boolean offer(Car car) {
CarNode p = new CarNode(car);
if (isEmpty()) {
front = rear = p;
} else {
rear.next = p;
rear = p;
}
return true;
}
```
2. 在 poll 方法中,可以先保存队首结点的数据域值,然后再将队首结点出列,这样可以减少判断队列是否为空的代码:
```
public Object poll() {
if (isEmpty()) {
return null;
}
CarNode p = front;
front = front.next;
if (front == null) {
rear = null;
}
return p.car;
}
```
3. 在 display 方法中,可以使用 StringBuilder 类来拼接字符串,然后一次性输出,避免多次调用 System.out.println 方法:
```
public void display() {
StringBuilder sb = new StringBuilder();
CarNode p = front;
while (p != null) {
sb.append(p.car).append(",");
p = p.next;
}
System.out.println(sb.toString());
}
```
阅读全文