栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制。本实例介绍如何使用顺序栈、顺序队列和优先队列以及使用的规则和要领。
package JAVA_Project_01_04;
class Stack{
long stackArray[];
int size;
int top;
public Stack( int size ) {
this.stackArray =new long[size];
this.size = size;
this.top = -1;
}
public long pop(){
return stackArray[top--];
}
public void push(long value){
stackArray[++top]=value;
}
public boolean isEmpty(){
return top==-1;
}
public boolean isFull(){
return top==size-1;
}
public long peek(){
return stackArray[top];
}
}
class Queue{
private long queueArray[];
private int front;
private int rear;
private int size;
private int count;
public Queue(int size) {
this.queueArray = new long[size];
this.front =0;
this.rear =-1;
this.size = size;
this.count = 0;
}
public void insert(long value){
if (rear==size-1)
rear=-1;
queueArray[++rear]=value;
count++;
}
public long remove(){
long temp=queueArray[front++];
if (front==size)
front=0;
count--;
return temp;
}
public long peakFront(){
return queueArray[front];
}
public boolean isEmpty(){
return count==0;
}
public boolean isFull(){
return count==size;
}
public int Count(){
return count;
}
public void print(){
for (int i = front; i < front+count; i++) {
System.out.print(queueArray[i]+"\t");
}
System.out.println();
}
}
class PriorityQueue {
private int count;
private long priorityArray[];
private int size;
public PriorityQueue(int size) {
this.size = size;
this.priorityArray = new long[size];
this.count = 0;
}
public void insert(long value) {
int i;
if (count == 0)
priorityArray[count++] = value;
else {
for (i = count - 1; i > 0; i--) {
if (value < priorityArray[i]) {
priorityArray[i + 1] = priorityArray[i];
} else
break;
}
priorityArray[i + 1] = value;
count++;
}
}
public long remove() {
return priorityArray[--count];
}
public boolean isEmpty() {
return count == 0;
}
public boolean isFull() {
return count == size;
}
public void print() {
for (int i = 0; i < count; i++)
System.out.println(priorityArray[i] + "\t");
System.out.println();
}
}
public class TextStackAndQueue {
public static void main(String[] args) {
System.out.println("1.数组实现顺序栈");
Stack stack = new Stack(6);
while (!stack.isFull()) {
long r = (long) (Math.random() * 20);
stack.push(r);
System.out.print(r + "\t");
}
System.out.println();
while (!stack.isEmpty()) {
long value = stack.pop();
System.out.print(value + "\t");
}
System.out.println();
System.out.println("----------------------------");
System.out.println("2.数组实现顺序队列");
Queue queue = new Queue(6);
while (!queue.isFull()) {
long value = (long) (Math.random() * 20);
queue.insert(value);
}
queue.print();
while (!queue.isEmpty()) {
queue.remove();
queue.print();
}
queue.print();
System.out.println(queue.isEmpty());
System.out.println("---------------------------");
System.out.println("3.数组实现优先队列");
PriorityQueue priority =new PriorityQueue(6);
while (!priority.isFull()) {
long value = (long) (Math.random() * 20);
priority.insert(value);
}
priority.print();
}
}