数据结构复习:栈-Java数组实现
2009-11-27 16:38
246 查看
栈是一种"后进先出(LIFO)"的数据结构.最近压入的数据项总是位于栈顶的.
首先我们先定义一个Stack Interface,我们把他定义成泛型的.
然后进行利用Java中的数组实现ArrayStack,下面是代码:
Code
/**
* 一个基于数组的栈实现
*
* @author Chris Wang
* @param <E>
*/
public class ArrayStack<E> implements Stack<E> {
/**
* 表示要存入栈里的元素
*/
private E[] data;
/**
* 表示当前栈的容量
*/
private int size = 0;
public ArrayStack() {
data = (E[]) new Object[10];
//一开始的时候 栈中元素为空
size = 0;
}
public int size() {
return size;
}
public boolean isEmpty() {
return size < 1;
}
/**
* 返回栈顶元素,但是不出栈
*/
public E top() {
if (isEmpty()) {
throw new RuntimeException("链表为空!!");
}
return data[size-1];
}
/**
* 出栈
*/
public E pop() {
if (isEmpty()) {
throw new RuntimeException("链表为空!!");
}
// 先保存那个栈顶元素
E element = data[size - 1];
// 然后清空栈顶元素,
data[size] = null;
//栈中元素减少一个
size--;
return element;
}
/**
* 入栈的时候先判断 栈是否已满,如栈满就扩充
*/
public void push(E target) {
if(target==null)
throw new RuntimeException("插入的元素不可为NULL");
if (isFull()) {
enlarge();
}
size++;
// 往栈顶添加一个元素
data[size - 1] = target;
}
/**
* 扩充数组长度 注意:一般是判断栈满以后 才扩充 扩充为原数组的两倍长度
*/
public void enlarge() {
E[] newData = (E[]) new Object[data.length * 2];
for (int i = 0; i < size; i++) {
newData[i] = data[i];
}
data = newData;
}
/**
* 如果数组的长度 已经等于 放入栈中的元素数量 则表示 栈已经满了
*
* @return
*/
public boolean isFull() {
return data.length == size;
}
}
首先我们先定义一个Stack Interface,我们把他定义成泛型的.
/** * Stack接口 * @author Chris Wang * * @param <E> */ public interface Stack<E> { /** * 判断栈是否为空 * @return */ public boolean isEmpty(); /** * 返回栈中元素个数 * @return */ public int size(); /** * 入栈 * @param target * */ public void push(E target); /** * 出栈 * @return E */ public E pop(); /** * 返回栈顶元素,并不出栈 * @return */ public E top(); }
然后进行利用Java中的数组实现ArrayStack,下面是代码:
Code
/**
* 一个基于数组的栈实现
*
* @author Chris Wang
* @param <E>
*/
public class ArrayStack<E> implements Stack<E> {
/**
* 表示要存入栈里的元素
*/
private E[] data;
/**
* 表示当前栈的容量
*/
private int size = 0;
public ArrayStack() {
data = (E[]) new Object[10];
//一开始的时候 栈中元素为空
size = 0;
}
public int size() {
return size;
}
public boolean isEmpty() {
return size < 1;
}
/**
* 返回栈顶元素,但是不出栈
*/
public E top() {
if (isEmpty()) {
throw new RuntimeException("链表为空!!");
}
return data[size-1];
}
/**
* 出栈
*/
public E pop() {
if (isEmpty()) {
throw new RuntimeException("链表为空!!");
}
// 先保存那个栈顶元素
E element = data[size - 1];
// 然后清空栈顶元素,
data[size] = null;
//栈中元素减少一个
size--;
return element;
}
/**
* 入栈的时候先判断 栈是否已满,如栈满就扩充
*/
public void push(E target) {
if(target==null)
throw new RuntimeException("插入的元素不可为NULL");
if (isFull()) {
enlarge();
}
size++;
// 往栈顶添加一个元素
data[size - 1] = target;
}
/**
* 扩充数组长度 注意:一般是判断栈满以后 才扩充 扩充为原数组的两倍长度
*/
public void enlarge() {
E[] newData = (E[]) new Object[data.length * 2];
for (int i = 0; i < size; i++) {
newData[i] = data[i];
}
data = newData;
}
/**
* 如果数组的长度 已经等于 放入栈中的元素数量 则表示 栈已经满了
*
* @return
*/
public boolean isFull() {
return data.length == size;
}
}
相关文章推荐
- 数据结构复习:队列-Java数组实现
- 数据结构(java语言描述)-- 队列的循环数组实现
- 复习(数据结构:java):线性表(数组):迭代器
- 数据结构复习之–“堆排序”-JAVA实现
- java数据结构:线性表之数组实现
- Java 数据结构之数组的操作三:实现各种排序方法
- java实现数据结构-数组中按次数进行循环右移
- 【JAVA数据结构】栈(数组实现)
- 数据结构(java语言描述)-- 表的简单数组实现
- 数据结构复习之–“2路归并排序”-JAVA实现
- 数据结构笔记--栈的总结及java数组实现简单栈结构
- Java 数据结构数组实现(增删改查)
- 数据结构Java实现——④数组——>稀疏矩阵三元组顺序存储
- java数据结构——Hash的实现(数组) 线性探测的方法解决冲突
- 复习(数据结构:java):线性表(数组):接口的写法
- java数据结构-图的实现 采用数组和邻接矩阵
- 数据结构-线性表的数组实现-Java
- 数据结构Java实现——④数组——>稀疏矩阵十字链表存储法
- Java数组常用排序算法实现复习
- 复习(数据结构:java):线性表(数组):泛型的写法