自定义栈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 ...
随机推荐
- apt-get原理
apt-get 而这个步骤全要用户亲力亲为可能又有些麻烦,懒是科技发展的重要推动力.所以软件厂商自己编译好了很多二进制文件,只要系统和环境对应,下载之后就能直接安装. 但是如果下载了很多软件我想要管理 ...
- ASP.NET MVC5基础-控制器(Controller)详解
在上文ASP.NET MVC5基础 – MVC文件架构中我们简单了解了下控制器Controller的作用,本文我将详细介绍控制器Controller的使用方法. Controller的运行过程 上文我 ...
- 清新简约风格毕业论文答辩PPT模板推荐
不管是学生还是老师,应该经常会需要学生答辩的PPT模板,今天给大家推荐织梦58的学生答辩ppt模板. 模版来源:http://ppt.dede58.com/gongzuohuibao/26494.ht ...
- CSS 从大图中选取部分区域作为目标图标
从大图中选取部分区域作为目标图标 by:授客 QQ:1033553122 1.图片素材 图片素材如下(大小:137px * 264px),图中从上到下,连续存放了两张100px * 100px的图 ...
- leaflet 实现克里金插值功能(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- MySQL基础之数据管理【5】
子查询的使用 select 字段名称 from tbl_name where col_name=(select col_name from tbl_name); --内层语句查询的结果可以作为外层语句 ...
- [Linux] 获取出日志中的邮箱shell
需求是把所有的日志中邮箱获取出来,根据指定关键字过滤,邮箱的格式是\txxx@xxx\t的格式,日志的存放是按照日期作为目录 #!/bin/bash logBasePath="/data1/ ...
- PAT甲级|1151 LCA in a Binary Tree 先序中序遍历建树 lca
给定先序中序遍历的序列,可以确定一颗唯一的树 先序遍历第一个遍历到的是根,中序遍历确定左右子树 查结点a和结点b的最近公共祖先,简单lca思路: 1.如果a和b分别在当前根的左右子树,当前的根就是最近 ...
- Codeforces Round #603 (Div. 2) A. Sweet Problem 水题
A. Sweet Problem the first pile contains only red candies and there are r candies in it, the second ...
- DirectShow 进行视频预览和录制
这一篇讲怎么采集摄像头图像并预览,以及录制视频到本地. 程序实现流程 这里通过使用 CaptureGraphBuilder 来简化 Graph 的创建流程. 具体流程如下: 初始化 COM 库 创建各 ...