Fork me on GitHub

实现的思路为:

采用泛型的方式,首先定义了一个Queue的接口,然后通过实现该接口实现了线性和链式的两种形式的队列:

接口代码如下:

 1 package com.peter.java.dsa.interfaces;
 2 
 3 public interface Queue<T> {
 4     
 5     /* put item at rear of queue; */
 6     void insert(T data);
 7 
 8     /* take item from front of queue */
 9     T remove();
10 
11     /* peek at front of queue */
12     T peek();
13 
14     boolean isEmpty();
15 
16     boolean isFull();
17 
18     int size();
19 
20     void clear();
21 }

线性栈的代码如下:

  1 package com.peter.java.dsa.common;
  2 
  3 import com.peter.java.dsa.interfaces.Queue;
  4 
  5 public class LinearQueue<T> implements Queue<T> {
  6     private int capacity;
  7     private T[] t;
  8     private int front;
  9     private int rear;
 10     private int size;
 11 
 12     public LinearQueue() {
 13         // TODO Auto-generated constructor stub
 14         capacity = 16;
 15         t = (T[]) new Object[capacity];
 16         front = -1;
 17         rear = -1;
 18         size = 0;
 19     }
 20 
 21     public LinearQueue(int capacity) {
 22         this.capacity = capacity;
 23         t = (T[]) new Object[capacity];
 24         front = -1;
 25         rear = -1;
 26         size = 0;
 27     }
 28 
 29     @Override
 30     public void insert(T data) {
 31         // TODO Auto-generated method stub
 32         if (isEmpty()) {
 33             front = (front + 1) % t.length;
 34             t[front] = data;
 35             rear = (rear + 1) % t.length;
 36         } else {
 37             if (isFull()) {
 38                 resize();
 39             }
 40             rear = (rear + 1) % t.length;
 41             t[rear] = data;
 42         }
 43         size++;
 44     }
 45 
 46     @Override
 47     public T remove() {
 48         // TODO Auto-generated method stub
 49         T tmp = null;
 50         if (!isEmpty()) {
 51             tmp = t[front];
 52             t[front] = null;
 53             front = (front + 1) % t.length;
 54             size--;
 55         }
 56         return tmp;
 57     }
 58 
 59     @Override
 60     public T peek() {
 61         // TODO Auto-generated method stub
 62         T tmp = null;
 63         if (!isEmpty()) {
 64             tmp = t[front];
 65         }
 66         return tmp;
 67     }
 68 
 69     @Override
 70     public boolean isEmpty() {
 71         // TODO Auto-generated method stub
 72         return front + rear == -2 && front == rear % t.length;
 73     }
 74 
 75     @Override
 76     public boolean isFull() {
 77         // TODO Auto-generated method stub
 78         return front == rear % t.length;
 79     }
 80 
 81     @Override
 82     public int size() {
 83         // TODO Auto-generated method stub
 84         return size;
 85     }
 86 
 87     @Override
 88     public String toString() {
 89         // TODO Auto-generated method stub
 90         StringBuffer buffer = new StringBuffer();
 91         buffer.append("Linear Queue Content:[");
 92         if (front < rear) {
 93             for (int i = front; i < rear + 1; i++) {
 94                 buffer.append(t[i] + ",");
 95             }
 96         } else {
 97             for (int i = front; i < t.length; i++) {
 98                 buffer.append(t[i] + ",");
 99             }
100             for (int i = 0; i < rear + 1; i++) {
101                 buffer.append(t[i] + ",");
102             }
103         }
104         buffer.append("]");
105         buffer.replace(buffer.lastIndexOf(","), buffer.lastIndexOf(",") + 1, "");
106         return buffer.toString();
107     }
108 
109     private void resize() {
110         int oldSize = t.length;
111         T[] tmp = (T[]) new Object[oldSize * 2];
112         for (int i = 0; i < oldSize; i++) {
113             tmp[i] = t[front];
114             front = (front + 1) % oldSize;
115         }
116         front = 0;
117         rear = oldSize - 1;
118     }
119 
120     @Override
121     public void clear() {
122         // TODO Auto-generated method stub
123         front = -1;
124         rear = -1;
125     }
126 
127 }

随着复习进度,后续代码会陆续更新。

posted on 2013-11-21 21:45  SilentKnight  阅读(433)  评论(0编辑  收藏  举报