自定义栈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));
}
}
}

自定义栈Stack 和 队列Queue的更多相关文章
- STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较
栈stack .队列queue 和优先级priority_queue 三者比较 默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现 ...
- python基本数据结构栈stack和队列queue
1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...
- 利用栈Stack实现队列(Queue)
实现说明: 入队时,将元素压入s1; 出队时,推断s2是否为空,如不为空,则直接弹出顶元素:如为空.则将s1的元素逐个"倒入"s2.把最后一个元素弹出并出队; 这个思路,避免了重复 ...
- C++栈(stack)、队列(queue)、链表(list)的常用函数
C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构.1.back() 返回一个引用,指向最后一个元素2.empty() 如果队列空则返回真3.front() 返回第一 ...
- Java堆(heap)、栈(stack)和队列的区别
Java里面Stack有两种含义: 一:数据结构 Stack,即java.util.Stack import java.util.Stack; import java.util.Iterator; i ...
- C++标准库类模板(stack)和 队列(queue)
在C++标准库(STL)中有栈和队列的类模板,因此可以直接使用 1.栈(stack):使用栈之前,要先包含头文件 : #include<stack> stack.push(elem); / ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- Stack栈类与、Queue队列与线性表的区别和联系
栈和队列都属于特殊的线性表 一.定义 1.线性表(linear list): 是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列.数据元素是一个抽象的符号,其具体含义在不同的情 ...
- [LeetCode] Implement Queue using Stacks 用栈来实现队列
Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...
随机推荐
- PalletOne调色板Token PTN跨链转网的技术原理
之前一直在忙于通用跨链公链PalletOne的研发,没有怎么做技术分享的博客,最近PalletOne主网上线也有几个月的时间了,即将进行PTN(PalletOne上面的主Token)从ERC20到主网 ...
- 多线程十 Timer
定时/计算在java中主要使用的是Timer对象,他的内部依然是采用多线程方式进行处理 它有四个构造方法 方法名 作用 Timer() 空参 Timer(String name) 指定名字 Timer ...
- 【LeetCode】11. 盛最多水的容器
题目 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两 ...
- .net core 中间件使用
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; usi ...
- web渗透测试
信息收集 网络搜索 目录遍历:site:域名 intitle:index.of 配置文件泄露:site:域名 ext:xml | ext:conf | ext:cnf | ext:reg | ext: ...
- 别不信!servlet获取到的参数值,也许完全出乎你的意料!
先贴出来简单得不能再简单的demo页面效果: 如下是spring mvc的Controller: @RequestMapping("mytest") @Controller pub ...
- Linux—chattr 命令详解
chattr命令的用法:chattr [ -RV ] [ -v version ] [ mode ] files…最关键的是[mode]部分,[mode]部分是由+-=和[ASacDdIijsTtu] ...
- Python语法速查: 5. 运算符、math模块、表达式
返回目录 (1)一些较容易搞错的运算符 一般简单的如加减乘除之类的运算符就不写了,这里主要列些一些容易搞错或忘记的运算符.运算符不仅仅只有号,有一些英文单词如 in, and 之类,也是运算符,并不是 ...
- Tcp连接和断开
三次握手:客户端为a,服务端为b:开始都是closed状态:a主动打开进入到syn_sent状态,b被动打开进入listen状态:第一次握手,a向b发送SYN=1,seq为x的包,b收到以后进入syn ...
- 「MacOS」将网站转换为应用程序,只需一个Unite
unite mac有着非常强大的功能,能够轻松的将网站转换为macOS上的应用程序,除了现代化的网页浏览功能以外,Unite for Mac下载还包括特定于macOS的功能,通知,TouchBar支持 ...