题目
Steque。一个以栈为目标的的队列(或称steque),是一种支持push、pop和enqueue操作的数据类型。为这种抽象数据类型定义一份API并给出一份居于链表的实现。
思路
思路很简单,就是在用链表建立的栈中添加一个enqueue方法,使能在栈底添加数据。
代码
package Chap1.$3;
import java.util.Scanner;
public class E32
{
private class Node
{
Node next;
int item;
}
private Node first;
private Node last;
private int N = 0;
public boolean isEmpty()
{
return N == 0;
}
public int size()
{
return N;
}
public void push(int item)
{
Node oldfirst = first;
first = new Node();
first.item = item;
if (isEmpty()) last = first;
else first.next = oldfirst;
N++;
}
public int pop()
{
int item = first.item;
first = first.next;
N--;
return item;
}
public void enqueue(int item)
{
Node oldlast = last;
last = new Node();
last.item = item;
if (isEmpty()) first = last;
else oldlast.next = last;
N++;
}
public int dequeue()
{
int item = last.item;
Node x = first;
for (int i = 0; i < this.size() - 2; i++)
x = x.next;
last = new Node();
last = x;
N--;
return item;
}
public void start()
{
E32 e = new E32();
Scanner in = new Scanner(System.in);
while (in.hasNext())
{
e.push(in.nextInt());
e.enqueue(in.nextInt());
}
int maxsize = e.size();
for (int i = 0; i < maxsize; i++)
{
System.out.print(e.pop() + " ");
System.out.print(e.dequeue() + " ");
i++;
}
}
public static void main(String[] args)
{
new E32().start();
}
}