你的浏览器不支持本网站所要求的功能, 现在看到的是本网站简化版本.
为了获得最佳体验, 请使用最新的Chrome, Safari, Firefox 或 Edge 浏览器.
删除操作称为出队 (pop)
插入只能在队尾
ADT Queue {
数据对象
数据关系
基本运算
boolean empty();
void push(E e)
E pop();
E peek() }
循环队列
初始时
出队操作是
class SqQueueClass<E>
{
final int MaxSize=100;
private E [] data;
private int front,rear;
public SqQueueClass()
{
data = (E[])new Object[MaxSize];
front = -1;
rear = -1;
}
}
public boolean empty()
{
return front == rear;
}
public void push(E e)
{
if (rear == MaxSize - 1)
throw new IllegalArgumentException("队满");
rear++;
data[rear]=e;
}
public E pop()
{
if (empty())
throw new IllegalArgumentException("队空");
front++;
return (E)data[front];
}
public E peek()
{
if (empty())
throw new IllegalArgumentException("队空");
return (E)data[front + 1];
}
public String toString()
{
String ans="";
if (!empty())
{
int p = front;
while (true)
{
p++;
ans += data[p] + " ";
if (p == rear) break;
}
}
return ans;
}
解决方法是使用循环队列
队尾指针循环进一
即队中最大元素个数为
出队操作是
class CSqQueueClass<E>
{
final int MaxSize=100;
private E [] data;
private int front,rear;
public CSqQueueClass()
{
data = (E[])new Object[MaxSize];
front = 0;
rear = 0;
}
}
public boolean empty()
{
return front == rear;
}
public void push(E e)
{
if ((rear+1)%MaxSize==front)
throw new IllegalArgumentException("队满");
rear = ( rear + 1 ) % MaxSize;
data[rear]=e;
}
public E pop()
{
if (empty())
throw new IllegalArgumentException("队空");
front = ( front + 1 ) % MaxSize;
return (E)data[front];
}
public E peek()
{
if (empty())
throw new IllegalArgumentException("队空");
return (E)data[( front + 1 ) % MaxSize];
}
public int size()
{
return ((rear-front+MaxSize)%MaxSize);
}
public String toString()
{
String ans = "";
if (!empty())
{
int p = front;
while (true)
{
p = ( p + 1 ) % MaxSize;
ans += data[p] + " ";
if (p == rear) break;
}
}
return ans;
}
称作链队
出队操作是
class LinkNode<E>
{
E data;
LinkNode<E> next;
public LinkNode()
{
next=null;
}
public LinkNode(E d)
{
data=d;
next=null;
}
}
public class LinkQueueClass<E>
{
LinkNode<E> front;
LinkNode<E> rear;
public LinkQueueClass()
{
front=null;
rear=null;
}
}
public boolean empty()
{
return front==null;
}
public void push(E e)
{
LinkNode<E> s=new LinkNode<E>(e);
if (empty())
front=rear=s;
else
{
rear.next=s;
rear=s;
}
}
public E pop()
{
E e;
if (empty())
throw new IllegalArgumentException("队空");
if (front==rear)
{
e=(E)front.data;
front=rear=null;
}
else
{
e=(E)front.data;
front=front.next;
}
return e;
}
public E peek()
{
if (empty())
throw new IllegalArgumentException("队空");
E e=(E)front.data;
return e;
}
public String toString()
{
String ans="";
if (!empty())
{
LinkNode<E> p=front;
while (p!=null)
{
ans+=p.data.toString()+" ";
p=p.next;
}
}
return ans;
}