自定义栈

接口

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

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

  1. STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较

    栈stack  .队列queue  和优先级priority_queue 三者比较 默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现 ...

  2. python基本数据结构栈stack和队列queue

    1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...

  3. 利用栈Stack实现队列(Queue)

    实现说明: 入队时,将元素压入s1; 出队时,推断s2是否为空,如不为空,则直接弹出顶元素:如为空.则将s1的元素逐个"倒入"s2.把最后一个元素弹出并出队; 这个思路,避免了重复 ...

  4. C++栈(stack)、队列(queue)、链表(list)的常用函数

    C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构.1.back() 返回一个引用,指向最后一个元素2.empty() 如果队列空则返回真3.front() 返回第一 ...

  5. Java堆(heap)、栈(stack)和队列的区别

    Java里面Stack有两种含义: 一:数据结构 Stack,即java.util.Stack import java.util.Stack; import java.util.Iterator; i ...

  6. C++标准库类模板(stack)和 队列(queue)

    在C++标准库(STL)中有栈和队列的类模板,因此可以直接使用 1.栈(stack):使用栈之前,要先包含头文件 : #include<stack> stack.push(elem); / ...

  7. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  8. Stack栈类与、Queue队列与线性表的区别和联系

    栈和队列都属于特殊的线性表   一.定义   1.线性表(linear list): 是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列.数据元素是一个抽象的符号,其具体含义在不同的情 ...

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

    Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...

随机推荐

  1. 函数式接口 & lambda表达式 & 方法引用

    拉呱: 终于,学习jdk8的新特性了,初体验带给我的感觉真爽,代码精简的不行,可读性也很好,而且,spring5也是把jdk8的融入到血液里,总之一句话吧,说的打趣一点,学的时候自己难受,学完了写出来 ...

  2. linux查看占用端口号的程序及pid

    netstat -tunlp|grep 端口号 圈出来的就是pid

  3. 基于Spring Boot+Spring Security+JWT+Vue前后端分离的开源项目

    一.前言 最近整合Spring Boot+Spring Security+JWT+Vue 完成了一套前后端分离的基础项目,这里把它开源出来分享给有需要的小伙伴们 功能很简单,单点登录,前后端动态权限配 ...

  4. 项目部署到Linux上遇到的坑

    作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1.本地Navicat for MySQL无法连接至服务器(Centos 7 x86_64 bbr) 1045错误: 解决步骤: ​ 1.查看用户名密 ...

  5. JavaScript 语法:松软科技前端教程

    JavaScript 语法是一套规则,它定义了 JavaScript 的语言结构. var x, y; // 如何声明变量 x = 7; y = 8; // 如何赋值 z = x + y; // 如何 ...

  6. React Native之React Navigation踩坑

    自动重装系统之后,已经很长一段时间没有来写React Native了,今天空闲之余,决定重新配置React Native的开发环境,继续踩坑... React Native的开发环境配置狠简单,只要依 ...

  7. iOS常用算法之单链表查找倒数第n个节点(图解)

    拿到题目, 首先要先了解链表数据结构, 如下图: 常规思路: 利用数组, 遍历整个单链表, 将每个节点装入数组中, 最终拿到数组根据索引(数组长度-1-n)就得到了倒数第n个元素, 这里要注意从数组中 ...

  8. 高通平台开机LOGO修改LK(bootloader)下实现【转】

    网络上已经有许多在kernel中修改开机Logo的文章,本文就LK下实现开机logo进行简述 需要用到ffmpeg工具,没有安装ffmpeg请参考这里: http://blog.csdn.net/re ...

  9. Scrapy 下载图片时 ModuleNotFoundError: No module named'PIL'

    使用scrapy的下载模块需要PIL(python图像处理模块)的支持,使用pip安装即可

  10. Druid-类图-属性表

    所属文章:池化技术(一)Druid是如何管理数据库连接的? 本篇为「工具人」文章,建议直接用「ctrl+f」进行查找属性.方法.类名,快速了解其含义和所属类. 主要流程里主要涉及到的类名称.类属性.类 ...