1.3.32

question:

Steque. a stack-ended queue or steque is a data type that supports push, pop, and enqueue. articulate an api for this adt. develop a linked-list-based implementation.

import edu.princeton.cs.algs4.*;

public class Stack_ended_queue<Item>
{
    private class Node
    {
        Item item;
        Node next;
    }
    
    private Node first;
    private Node last;
    private int size = 0;
 
    public boolean isEmpty()
    {
        return size == 0;
    }
    
    public int Size()
    {
        return size; 
    }
    
    public void push(Item item)
    {
        Node node = new Node();
        node.item = item;
        node.next = null;
        if(this.isEmpty())
        {
            last = first = node;
        }
        else
        {
            node.next = first;
            first = node;
        }
        size++;//注意别放在isEmpty()前,不然为空反而会执行else导致崩溃
    }
    
    public Item pop()
    {
        if(this.isEmpty())
        {
            return null;
        }
        size--;
        Item item = first.item;
        first = first.next;
        return item;
    }
    
    public void enqueue(Item item)
    {
        Node node = new Node();
        node.item = item;
        node.next = null;
        if(this.isEmpty())
        {
            last = first = node;
        }
        else
        {
            last.next = node;
            last = node;
        }
        size++;//注意别放在isEmpty()前,不然为空反而会执行else导致崩溃
    }
    
    public static void main(String[] args)
    {
        Stack_ended_queue<String> seq = new Stack_ended_queue();
        seq.enqueue("c");
        seq.push("j");
        seq.push("w");
        StdOut.println(seq.Size());
        for(int i = 0; i < 3; i++)
        {
            StdOut.print(seq.pop() + "\t");
        }
        StdOut.print("\n");
        StdOut.println(seq.Size());
    }
}

猜你喜欢

转载自www.cnblogs.com/w-j-c/p/9068910.html