栈01:实现栈的3中方式: 数组,链表和容器
来源:互联网 发布:怎么快速成为淘宝达人 编辑:程序博客网 时间:2024/06/10 02:17
1 利用数组实现栈
package com.stack;
/**
* 栈是线性表的特例
* 利用数组实现
* 如何保证倒序取:数组倒着取
* 栈底和栈顶
* Created by weideliang on 2016/10/14.
*/
public class Stack01<T> {
private Object[] array;
private int defaultCapacity = 20;
private int capacity;
private int size;
public Stack01(){
this.init(defaultCapacity);
}
public Stack01(int capacity){
this.init(capacity);
}
private void init(int capacity){
this.array = new Object[capacity];
this.capacity = capacity;
this.size = 0;
}
/**
* 入栈
*/
public void push(T element){
if(size >= capacity){
throw new RuntimeException("栈已满");
}
array[size++] = element;
}
public void pushAll(T[] elements){
for (T element : elements) {
this.push(element);
}
}
/**
* 出栈
*/
public T pop(){
if(0 == size){
throw new RuntimeException("栈中没有数据");
}
return (T)array[--size];
}
public T peek(){
if(0 == size){
throw new RuntimeException("栈中没有数据");
}
return (T)array[size - 1];
}
/**
* 判断是否为空
* @return
*/
public boolean isEmpty(){
return size == 0;
}
public static void main(String[] args) {
Stack01<String> stack01 = new Stack01<>();
stack01.push("aa");
stack01.push("bb");
System.out.println(stack01.isEmpty());
System.out.println(stack01.pop());
System.out.println(stack01.pop());
System.out.println(stack01.isEmpty());
}
}
2 使用链表实现栈
package com.stack;
import com.linearlist.Node;
import com.sun.xml.internal.ws.model.RuntimeModelerException;
/**
* 利用链表实现栈
* 插入和删除的一段叫栈顶
* Created by weideliang on 2016/10/14.
*/
public class Stack02<T> {
private Node top;
private int size;
public Stack02(){
this.size = 0;
}
public Stack02(T element){
top = new Node(element, null);
this.size++;
}
/**
* 新结点就是top,旧结点跟在新节点的后面
* @param element
*/
public void push(T element){
top = new Node(element, top);
size++;
}
/**
* 出栈:取出并删除
* @return
*/
public T pop(){
if(this.size == 0){
throw new RuntimeModelerException("队列已空");
}
T newTop = (T)top.data();
this.size--;
top = top.next();
return newTop;
}
/**
* 只取出,不删除
* @return
*/
public String peep(){
return (String) top.data();
}
/**
* 判断是否为空
* @return
*/
public boolean isEmpty(){
return this.size == 0;
}
public static void main(String[] args) {
Stack02 stack02 = new Stack02();
stack02.push("str1");
stack02.push("str2");
stack02.push("str3");
// System.out.println(stack02.isEmpty());
System.out.println(stack02.peep());
// System.out.println(stack02.pop());
// System.out.println(stack02.pop());
// System.out.println(stack02.pop());
// System.out.println(stack02.isEmpty());
}
}
3 利用容器实现栈
0 0
- 栈01:实现栈的3中方式: 数组,链表和容器
- 栈的两种实现方式:数组和链表
- 使用数组和底层容器实现栈
- java中数组和容器的转换
- JAVA中容器和数组的比较
- 基于数组和链表两种方式实现栈
- 用数组和链表两种方式实现栈
- 栈的数组和链表实现
- 栈的数组和链表实现
- C++中数组、链表和vector等容器之间的区别
- C++中数组、链表和vector等容器之间的区别
- 栈的实现(数组方式)
- 使用动态数组的方式实现栈
- Java的栈实现(数组、链表两种方式)
- java实现栈(数组和链表两种实现方式)
- 求数组中最大子数组和(容器实现输入动态数组)
- C++中vector容器的使用方式和函数调用
- 多媒体中常见的编解码方式和容器格式
- H264解析开源库H264Bitstream
- leetcode---Fraction to Recurring Decimal
- 第九周--建立稀疏矩阵三元组表示算法库
- MFC 用afxbeginthread创建线程 线程函数直接 return 0 返回。任务管理器显示线程数与理论值不符
- nginx原理
- 栈01:实现栈的3中方式: 数组,链表和容器
- Java虚拟机基础
- 如何卸载 sdlx
- Spring之搭建环境
- java 之前的一些配置及简单运行
- 安全框架之shrio-简介
- 遗传算法入门简单实例
- uva12105 Bigger is Better
- 奔三奶爸初学php心得记录(第三天)