java資料結構與演算法 第4章 棧和佇列
阿新 • • 發佈:2019-01-08
1.棧
棧只允許訪問一個數據項, 即最後插入的資料項,移除這個資料項才能訪問倒數第二個插入的資料項,依此類推。以下是java實現的棧:
package exam;
public class StackTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
StackX stackArray =new StackX(10);
stackArray.push(10);
stackArray.push(20);
stackArray.push(30 );
stackArray.push(40);
stackArray.push(50);
while (!stackArray.isEmpty()) {
long value=stackArray.pop();
System.out.println(value);
//結果
// 50
// 40
// 30
// 20
// 10
}
}
}
class StackX{
private int maxSize; //棧陣列大小;
private long[] stackArray;
private int top;
public StackX(int s){
maxSize=s; //陣列大小
stackArray=new long[maxSize]; //建立陣列
top=-1;
}
//插入元素
public void push(long i){
stackArray[++top]=i;
}
public long pop(){
return stackArray[top--];
}
public long peek(){
return stackArray[top];
}
public boolean isEmpty(){
return (top==-1);
}
public boolean isFull(){
return (top==maxSize-1);
}
}
2.佇列
和棧類似,但是先插進入的先出。
package exam;
public class QueueTest {
public static void main(String[] args) {
Queue testQueue= new Queue(5);
testQueue.insert(10);
testQueue.insert(30);
testQueue.insert(40);
testQueue.insert(20);
testQueue.remove();
testQueue.remove();
testQueue.remove();
testQueue.insert(60);
testQueue.insert(70);
testQueue.insert(80);
testQueue.insert(90);
while (!testQueue.isEmpty()) {
long n=testQueue.remove();
System.out.println(n);
}
}
}
class Queue{
private int maxsiza;
private long[] queArray;
private int front; //對頭
private int rear; //隊尾
private int nItems; //當前資料項的個數
public Queue(int s){
maxsiza=s;
queArray=new long[maxsiza];
front = 0;
rear =-1;
nItems = 0;
}
//插入的前提應該是佇列不滿 ISFull()為true
public void insert(long j){
if(rear==maxsiza-1)
rear =-1;
queArray[++rear] = j;
nItems++;
}
//remove方法的前提是佇列不為空
public long remove(){
long temp =queArray[front++];
if(front == maxsiza)
front = 0;
nItems--;
return temp;
}
public long peekFront(){
return queArray[front];
}
public boolean isEmpty(){
return (nItems==0);
}
public boolean isFull(){
return (nItems==maxsiza);
}
public int size() {
return nItems;
}
}