堆栈及队列的实现
来源:互联网 发布:epubbuilder for mac 编辑:程序博客网 时间:2024/04/28 15:17
队列的堆栈的元素移动
import java.awt.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Stack;
public class stackQueue {
public static void main(String[] args) {
System.out.println("--------------------堆栈--------------------");
MyStack<Integer> stack = new MyStack<Integer>();
System.out.println("刚创建堆栈时,stack.isEmpty():" + stack.isEmpty() +",stack.size():" + stack.size());
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println("push 3个元素时,栈内元素个数为" + stack.size() + ",元素转化成字符串后为:" + stack.toString());
stack.pop();
stack.pop();
System.out.println("弹出2个元素后,栈内剩余的元素个数为" + stack.size() + ",元素转化成字符串后为:" + stack.toString());
System.out.println("--------------------队列开始--------------------");
MyQueue<Integer> queue = new MyQueue<Integer>(5);
System.out.println("刚创建堆栈时,queue.isEmpty():" + queue.isEmpty() +",queue.isFull():"+queue.isFull()+ ",queue.size():" + queue.size());
for (int i = 0; i < 3; i++) {
queue.add(i);
}
System.out.println("添加3个元素:");
System.out.println("队列头元素为:"+queue.getHead()+",队尾元素为:"+queue.getTail()+",队列长度为:"+queue.size());
System.out.println(queue);
System.out.println("去掉2个元素:");//去掉元素,元素只是不能访问到了,被去掉的元素可以被添加的覆盖
queue.remove();
queue.remove();
System.out.println("队列头元素为:"+queue.getHead()+",队尾元素为:"+queue.getTail()+",队列长度为:"+queue.size());
queue.add(7);
System.out.println(queue);
for (int i = 3; i < 6; i++) {
queue.add(i);
}
System.out.println("添加4个元素:");//此时尾指又要从开始处添加元素,remove掉的被覆盖
System.out.println("队列头元素为:"+queue.getHead()+",队尾元素为:"+queue.getTail()+",队列长度为:"+queue.size());
System.out.println(queue);
System.out.println("去掉4个元素:");//此时尾指又要从开始处添加元素
queue.remove();queue.remove();queue.remove();queue.remove();
System.out.println("queue.getHead():"+queue.getHead()+",queue.getTail():"+queue.getTail()+",queue.size():"+queue.size());
System.out.println(queue);
}
}
class MyStack<E> {
private ArrayList<E> list;
public MyStack() {
list = new ArrayList<E>();
}
/**
* 栈是否为空
*
* @return
*/
public boolean isEmpty() {
return list.size() == 0;
}
/**
* 栈内容长度
*
* @return
*/
public int size() {
return list.size();
}
/**
* 添加元素
*
* @param e
*/
public void push(E e) {
list.add(e);
}
/**
* 弹出元素
*
* @return
*/
public E pop() {
if (list.size() > 0) {
return list.remove(list.size() - 1);
}
return null;
}
@Override
public String toString() {
return Arrays.toString(list.toArray());
}
}
class MyQueue<E> {
private int maxSize;// 队列容量
private E queue[];// 队列
private int head;// 头指针
private int tail;// 尾指针
private int nItems;// 元素个数
@SuppressWarnings("unchecked")
public MyQueue(int maxSize) {
this.maxSize = maxSize;
this.queue = (E[]) new Object[maxSize];
this.head = 0;// 移除元素一般从下标0开始,头指针指向待移除的元素(也就是移除元素的下标)
this.tail = -1;// 一般设为-1,当添加元素后,尾指针数值为当前已经添加的元素的下标位置
this.nItems = 0;
}
/**
* 队列是否为空
*
* @return
*/
public boolean isEmpty() {
return nItems == 0;
}
/**
* 队列是否已满
*
* @return
*/
public boolean isFull() {
return nItems == queue.length;
}
/**
* 添加从队尾开始
*
* @param e
*/
public void add(E e) {
if (isFull()) {
throw new RuntimeException("队列已满");
}
// 当队尾指针已经到达数组的末尾,但数组却未填满(数组前面有空缺),此时又从起始位置添加元素
if (tail == maxSize - 1) {
tail = -1;
}
queue[++tail] = e;
nItems++;
}
/**
* 删除从对头开始
*
* @return
*/
public E remove() {
if (isEmpty()) {
throw new RuntimeException("队列已空");
}
// 当对头指针到达数组末尾,但数组个数却不为空(说明数组前面还有元素),此时又从起始位置删除元素
if (head == maxSize) {
head = 0;
}
nItems--;
return queue[head++];
}
/**
* 获取对头元素
*
* @return
*/
public E getHead() {
return queue[head];
}
/**
* 获取队尾元素
*
* @return
*/
public E getTail() {
return queue[tail];
}
/**
* 队列元素个数
*
* @return
*/
public int size() {
return nItems;
}
@Override
public String toString() {
return Arrays.toString(queue);
}
}
- 堆栈及队列的实现
- 面向对象堆栈及队列的实现
- 堆栈,队列的实现
- 【数据结构】堆栈、队列的原理及java实现
- 堆栈和队列的实现
- 堆栈和队列的实现
- 用双链表实现的堆栈和队列
- C/C++ 堆栈、队列的链式实现
- 线性表、堆栈、队列的实现总结
- JavaScript队列或者堆栈的实现
- 堆栈和队列的java实现
- 用堆栈的方式实现队列
- 本文介绍线性表、堆栈、队列的特点,及代码实现
- 用堆栈实现队列
- LinkedList实现堆栈、队列
- 关于树的队列实现和堆栈实现的分析
- 常用数据结构 及 队列、链表、堆栈的区别
- 两个堆栈实现队列,两个队列实现堆栈
- FM模型解读
- redis学习笔记-2
- HTML CSS:A Trip to Webville
- 【容斥原理】求1~n有多少个数与k互质
- Error creating bean with name 'userController': Injection of resource dependencies failed;
- 堆栈及队列的实现
- 蚁群算法---matlab代码
- 深度学习之-池化操作
- JDBC连接数据库
- POJ3320 -- Jessica's Reading Problem(尺取法)
- node request 爬取并解析 新浪黄金资讯
- Spring-IoC容器初始化
- Servlet与JSP的区别
- 设计模式之责任链模式