自定义栈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 ...
随机推荐
- ETCD:etcd网关
原文地址:L4 gateway 什么是etcd网关 etcd网关是一个简单的TCP代理,可将网络数据转发到etcd集群.网关是无状态且透明的: 它既不会检查客户端请求,也不会干扰群集响应. 网关支持多 ...
- ASP.NET MVC Action向视图传值之匿名类型
在使用ASP.NET MVC过程中想必大家都有遇到过一个问题就是我们的Action如何向视图传递匿名类型的值呢,如果不做特殊处理则无法实现. 接下来我们来看一个示例: 在我们的控制中: using S ...
- 简单的PHP上传图片实例
分享一个简单的PHP上传图片实例,本实例主要介绍了上传图片的一些限制判断和上传图片的方法. 首先我们在form表单加上上传附件#file,上传按钮#imgbut,记得给form 表单加上multipa ...
- RabbitMQ的第一次亲密接触
企业应用系统,如果系统之间的通信.集成与整合,尤其当面临异构系统时,那么需要分布式的调用与通信.系统中一般会有很多对实时性要求不高但零零碎碎且耗时的地方,比如发送短信,邮件提醒,记录用户操作日志等,在 ...
- MySQL 事务提交 --不良好的事务习惯。
MySQL 事务提交 --不良好的事务习惯 我们知道"事务"是数据库区别于文件系统的重要特性之一.MySQL的InnoDB引擎中的事务也完全符合ACID(原子性 一致性 隔离性 持 ...
- 中缀表达式转换为后缀表达式(python实现)
中缀表示式转换为后缀表达式 需要一个存放操作符的栈op_stack,输出结果的列表output 步骤: 从左到右遍历表达式: 1. 若是数字,直接加入到output 2. 若是操作符,比较该操作符和o ...
- CodeForces 862B(思维+二分图染色)
题意 https://vjudge.net/problem/CodeForces-862B 给出n个点,n-1条边,求再最多再添加多少边使得二分图的性质成立 思路 因为题目是求的最多添加多少边,所以可 ...
- vue-cil3 运行报错
warnings potentially fixable with the `--fix` option. 将一下部分:"lint": "vue-cli-service ...
- js中新增的Symbol
在ES6之前,js的的基本数据类型有String Number Null Boolean undefined Object6中数据类型,Symbol是一种新增加的基本数据类型 特性 Symbol 不需 ...
- 66000][12505] Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor oracle.n et.ns.NetException: Listener refuse
新装的idea开发工具后连接数据库出现如题所示错误. 1.网上搜了不少的文章,没有解决我的问题.后来细心看了一下url: 一开始url是这样子的. jdbc:oracle:thin:@:s21_pdb ...