顺序存储
package 栈的应用.SqQueue_4;
import java.util.Arrays;
public class SqQueueClass<E> {
public E data[];
final int MaxSize=10;
int front,rear;
public SqQueueClass()
{
data=(E[]) new Object[MaxSize];
// front=rear=-1;
front=rear=0;//牺牲front不存放数据,则就表示它一直指向队首前一个位置
}
public boolean isEmpty()
{
return front==rear;
}
// public boolean isFull()
// {
// return (rear+1)%MaxSize==front;//!!!!!
// }
public void push(E e)
{
if((rear+1)%MaxSize==front)
//if(rear==MaxSize-1)
throw new IllegalArgumentException("队满");
// rear++;
rear=(rear+1)%MaxSize;//!!!!
data[rear]=e;
}
public E pop()
{
if(isEmpty())
throw new IllegalArgumentException("队空");
// front++;
front=(front+1)%MaxSize;
return data[front];
}
public E peek()
{
if(isEmpty())
throw new IllegalArgumentException("队空");
// return data[front+1];//+1很重要
return data[(front+1)%MaxSize];
}
public void show()
{
for(int i=0;i<data.length;i++)
{
System.out.print(data[(front+i)%MaxSize]+" ");
}
System.out.println();
}
}
package 栈的应用.SqQueue_4;
import java.sql.SQLOutput;
public class SqQueueDemo1 {
public static void main(String[] args) {
String s="123456789";
SqQueueClass q=new SqQueueClass();
String ss[]=s.split("");
for(String a:ss)
{
q.push(a);
System.out.print("此时队中数据为:");
q.show();
}
q.pop();
System.out.print("出队后:");
q.show();
System.out.print("取栈顶元素:"+q.peek());
}
}
package 栈的应用.SqQueue_4;
public class SqQueueClass2<E> {
public E data[];
final int MaxSize=10;
int front,rear;
boolean tag;
public SqQueueClass2()
{
data=(E[]) new Object[MaxSize];
front=rear=0;
tag=true;
}
public boolean isEmpty()
{
if (tag&&front==rear)
return true;
else
return false;
}
public void push(E e)
{
if(!tag&&rear==front)
//if(rear==MaxSize-1)
throw new IllegalArgumentException("队满");
data[rear]=e;
rear=(rear+1)%MaxSize;
tag=false;
}
public E pop()
{
if(rear==front&&tag)
throw new IllegalArgumentException("队空");
else
{
front=(front+1)%MaxSize;
if(rear==front)
tag=true;
return data[front];
}
}
public E peek()
{
if(rear==front&&tag)
throw new IllegalArgumentException("队空");
else
{
if(rear==front)
tag=true;
return data[front];
}
}
public void show()
{
for(int i=0;i<data.length;i++)
{
System.out.print(data[(front+i)%MaxSize]+" ");
}
System.out.println();
}
}
package 栈的应用.SqQueue_4;
public class SqQueueDemo2 {
public static void main(String[] args) {
String s="1234567890";
SqQueueClass2 q2=new SqQueueClass2();
String ss[]=s.split("");
for(String a:ss)
{
q2.push(a);
System.out.print("此时队中数据为:");
q2.show();
}
q2.pop();
System.out.print("出队后:");
q2.show();
System.out.print("取栈顶元素:"+q2.peek());
q2.pop();
System.out.print("出队后:");
q2.show();
q2.pop();
System.out.print("出队后:");
q2.show();
q2.pop();
System.out.print("出队后:");
q2.show();
q2.pop();
System.out.print("出队后:");
q2.show();
q2.pop();
System.out.print("出队后:");
q2.show();
q2.pop();
System.out.print("出队后:");
q2.show();
q2.pop();
System.out.print("出队后:");
q2.show();
q2.pop();
System.out.print("出队后:");
q2.show();
// q2.pop();
// System.out.print("出队后:");
// q2.show();
q2.push("a");
q2.show();
q2.push("b");
q2.show();
}
}
链式存储:
package 栈的应用.SqQueue_4.LinkQueue_4;
public class LinkNode<E> {
public E data;
public LinkNode next;
public LinkNode()
{
next=null;
}
public LinkNode(E e)
{
data=e;
next=null;
}
}
package 栈的应用.SqQueue_4.LinkQueue_4;
public class LinkQueueClass<E> {
LinkNode<E> front;
LinkNode<E> rear;
public LinkQueueClass()
{
front=rear=new LinkNode<>();
front.next=null;
rear.next=null;
}
public boolean isEmpty()
{
return front==rear;
}
public void push(E e)
{
LinkNode<E> s=new LinkNode<>(e);
s.next=null;
rear.next=s;
rear=s;
}
public E pop()
{
if(isEmpty())
throw new IllegalArgumentException("队空");
E a= (E) front.next.data;
front.next=front.next.next;
if(front.next==null)
{
rear=front;
}
return a;
}
public E peek()
{
if(isEmpty())
throw new IllegalArgumentException("队空");
E a= (E) front.next.data;
// front.next=front.next.next;
// if(front.next==null)
// {
// rear=front;
// }
return a;
}
@Override
public String toString() {
String res="";
LinkNode p=front.next;
while(p!=null)
{
res+=p.data+" ";
p=p.next;
}
return res;
}
}
package 栈的应用.SqQueue_4.LinkQueue_4;
public class LinkQueueDemo {
public static void main(String[] args) {
String s1="1234567";
LinkQueueClass<String> q=new LinkQueueClass<>();
String ss[]=s1.split("");
for(String a:ss)
{
q.push(a);
System.out.print("此时队中数据:");
System.out.println(q.toString());
}
q.pop();
System.out.println("出队后队中数据: "+q.toString());
System.out.println("取队顶"+q.peek());
}
}
package 栈的应用.SqQueue_4.LinkQueue_4;
public class LinkCQueueClass<E> {
LinkNode rear;
public LinkCQueueClass()
{
rear=null;
}
public boolean isEmpty()
{
return rear==null;
}
public void push(E e)
{
LinkNode s=new LinkNode(e);
if(rear==null)
{
s.next=rear;
rear.next=s;
}
else
{
s.next=rear.next;
rear.next=s;
rear=s;
}
}
public E pop()
{
if(isEmpty())
throw new IllegalArgumentException("队空");
E a=(E)rear.data;
rear.next=rear.next.next;
if(rear.next==rear)
{
rear=rear;
}
return a;
}
public E peek()
{
if(isEmpty())
throw new IllegalArgumentException("队空");
E a=(E)rear.data;
return a;
}
public String toString() {
String res="";
LinkNode p=rear;
while(p!=null)
{
res+=p.data+" ";
p=p.next;
}
return res;
}
}
package 栈的应用.SqQueue_4.LinkQueue_4;
public class LinkCQueueDemo {
public static void main(String[] args) {
String s1="1234567";
LinkQueueClass<String> q=new LinkQueueClass<>();
String ss[]=s1.split("");
for(String a:ss)
{
q.push(a);
System.out.print("此时队中数据:");
System.out.println(q.toString());
}
q.pop();
System.out.println("出队后队中数据: "+q.toString());
q.pop();
System.out.println("出队后队中数据: "+q.toString());
q.pop();
System.out.println("出队后队中数据: "+q.toString());
q.pop();
System.out.println("出队后队中数据: "+q.toString());
q.pop();
System.out.println("出队后队中数据: "+q.toString());
System.out.println("取队顶"+q.peek());
q.pop();
System.out.println("出队后队中数据: "+q.toString());
q.pop();
System.out.println("出队后队中数据: "+q.toString());
}
}