自定义栈Stack 和 队列Queue

自定义栈

接口

package com.test.custom;

public interface IStack<E> {
     E pop();
     void push(E e);
     E peek();
     int size();
     boolean empty();
     void clear();
}

实现类

package com.test.custom;

import java.util.ArrayList;
import java.util.EmptyStackException;
import java.util.List;

public class CustomStack<E> implements IStack<E>{

    List<E> list =new ArrayList<E>();

    @Override
    public E pop() {
        // TODO Auto-generated method stub
        E e = peek();
        list.remove(list.size()-1);

        return e;
    }

    @Override
    public void push(E e) {
        // TODO Auto-generated method stub
        list.add(e);
    }

    @Override
    public E peek() {
        // TODO Auto-generated method stub
        int len = list.size();
        if(len==0){
            throw new EmptyStackException();
        }
        return list.get(len-1);
    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public boolean empty() {
        // TODO Auto-generated method stub
        return size()==0;
    }

    @Override
    public void clear() {
        // TODO Auto-generated method stub
        list.clear();
    }

}

测试

package com.test.custom;

public class TestStack {
     public static void main(String[] args) {

        CustomStack<String> stack =new CustomStack<String>();
        for(int i =0 ; i < 4 ; i++){
            stack.push(""+(char)(‘A‘+i));
        }

        System.out.println(stack.peek());
        System.out.println(stack.size());
        System.out.println(stack.pop());
        System.out.println(stack.size());
        System.out.println(stack.peek());
        stack.push("hello");
        System.out.println(stack.size());
        for(int i=0;i<5;i++){
        System.out.println(stack.pop());
        System.out.println(stack.size());
        }

    }
}


自定义队列

接口

package com.test.custom;

public interface IQueue<E> {
     boolean offer(E e); //超过容量就抛出 IllegalStateException
     E peek();//获取列头不移除,队列为null返回null
     E poll(); //获取并且移除列头
     int size();
     boolean isEmpty();

}
package com.test.custom;

import java.util.ArrayList;
import java.util.List;

public class CustomQueue<E> implements IQueue<E>{

    List<E> list =new ArrayList<E>();
    private int size;
    @Override
    public boolean offer(E e) {
        // TODO Auto-generated method stub
        if(list.size()>=size){
            throw new IllegalArgumentException();
        }
        list.add(e);
        return true;
    }

    @Override
    public E peek() {
        // TODO Auto-generated method stub

        if(size() == 0) return null;
        return list.get(0);
    }

    @Override
    public E poll() {
        // TODO Auto-generated method stub
        E e = peek();
        if(size()>0) list.remove(0);
        return e;
    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public boolean isEmpty() {
        // TODO Auto-generated method stub
        return list.size()==0;
    }

    public CustomQueue(int size) {

        this.size = size;
    }

}

测试

package com.test.custom;

public class TestQueue {
      public static void main(String[] args) {
          CustomQueue<String> stack =new CustomQueue<String>(4);
          for(int i =0 ; i < 4 ; i++){
              stack.offer(""+(char)(‘A‘+i));
          }

          System.out.println(stack.peek());
          System.out.println(stack.size());

          System.out.println(stack.poll());
          System.out.println(stack.size());

          System.out.println(stack.peek());
          System.out.println(stack.size());

          stack.offer("hello");
          System.out.println(stack.size());

          for(int i=0;i<5;i++){
          System.out.println("i:"+stack.poll());

          }

          for(int i =0 ; i < 5 ; i++){
              stack.offer(""+(char)(‘A‘+i));
          }

      }

}

原文地址:https://www.cnblogs.com/tk55/p/11152903.html

时间: 2024-11-05 16:33:55

自定义栈Stack 和 队列Queue的相关文章

利用栈Stack实现队列(Queue)

实现说明: 入队时,将元素压入s1; 出队时,判断s2是否为空,如不为空,则直接弹出顶元素:如为空,则将s1的元素逐个"倒入"s2,把最后一个元素弹出并出队; 这个思路,避免了反复"倒"栈,仅在需要时才"倒"一次. package com.knowledgeStudy.threadLocal; import java.util.Stack; public class MyQueue { Stack<Object> s1 = new S

简单计算器-栈stack和队列queue

一.技术总结 主要是一个中缀表达式,然后求值,一些加减乘除 第一步是把中缀表达式转化为后缀表达式 然后就是计算后缀表达式,计算出结果 主要是两个函数,一个是转化函数Change()还有一个是计算函数Cal() 二.参考代码: #include<iostream> #include<cstdio> #include<string> #include<stack> #include<queue> #include<map> using n

数据结构之——链表(list)、队列(queue)和栈(stack)

在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据时,优先使用数组.数组可以通过下标直接访问(即随机访问),正是由于这个优点,数组无法动态添加或删除其中的元素,而链表弥补了这种缺陷.首先看一下C风格的单链表节点声明: 1 typedef struct _ListNode{ 2 int val; 3 struct _ListNode *next; 4

用结点实现链表LinkedList,用数组和结点实现栈Stack,用数组和结点链表实现队列Queue

一,用结点实现链表LinkedList,不用换JavaAPI的集合框架 import java.util.Scanner; public class Main { public static class Node { int data; Node next=null; public Node(int data){this.data=data;}; } public static class MyLinkedList { Node head=null; public MyLinkedList()

队列 (Queue) 与 栈 (Stack)

队列 (Queue)                                                                                                                                                                                                       队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时

[LeetCode] Implement Queue using Stacks 用栈来实现队列

Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue. pop() -- Removes the element from in front of queue. peek() -- Get the front element. empty() -- Return whether the queue is empty. Notes: You

LeetCode 232 Implement Queue using Stacks(用栈来实现队列)(*)

翻译 用栈来实现队列的下列操作. push(x) -- 将元素x写入到队列的尾部 pop() -- 从队列首部移除元素 peek() -- 返回队列首部元素 empty() -- 返回队列是否为空 注意: 你必须使用一个只有标准操作的栈. 也就是说,只有push/pop/size/empty等操作是有效的. 栈可能不被原生支持,这取决于你所用的语言. 只要你只是用stack的标准操作,你可以用list或者deque(double-ended queue)来模拟栈. 你可以假设所有的操作都是有效的

[LeetCode] 232. Implement Queue using Stacks 用栈来实现队列

Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue. pop() -- Removes the element from in front of queue. peek() -- Get the front element. empty() -- Return whether the queue is empty. Notes: You

[CareerCup] 3.5 Implement Queue using Two Stacks 使用两个栈来实现队列

3.5 Implement a MyQueue class which implements a queue using two stacks. LeetCode上的原题,请参见我之前的博客Implement Queue using Stacks 用栈来实现队列.