算法-第四版-练习1.3.32解答

题目

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();
    }
}

 

猜你喜欢

转载自blog.csdn.net/qq_26207065/article/details/81476738