package datastruct;
import java.util.Arrays;
/**
* 用数组模拟栈的结构:后进先出(LIFO) 线性表结构
* @author stone
* 2014-07-29 06:34:49
*/
public class SimulateStack<E> {
public static void main(String[] args) {
SimulateStack<String> ss = new SimulateStack<String>(6);
// SimulateStack<String> ss = new SimulateStack<String>();
System.out.println("isEmpty:"+ss.isEmpty());
ss.push("abc");
ss.push("edf");
ss.push("ghi");
ss.push("kkk");
System.out.println("isFull:"+ss.isFull());
ss.push("aaa");
ss.push("eee");
ss.push("777");
System.out.println("isFull:"+ss.isFull());
System.out.println("peek:" + ss.peek());
System.out.println("search:" + ss.search(new String("eee")));
System.out.println("pop:" + ss.pop());
System.out.println("search:" + ss.search(new String("eee")));
System.out.println("isEmpty:"+ss.isEmpty());
System.out.println("isFull:"+ss.isFull());
}
private Object[] mArray; //内部数组
private int mSize = 6; //内部数组的大小
private int mCount; //栈中数据量
private int mTop; //指示栈顶位置
public SimulateStack() {
mArray = new Object[mSize];
}
public SimulateStack(int size) {
this.mSize = size;
mArray = new Object[mSize];
}
/**
* 入栈
* @param item
*/
public void push(E item) {
if (!isFull()) {//如果未满
mArray[mTop++] = item; //栈顶为1, 数组0位置上放置.. mTop比当前放置的位置大1
mCount = mTop;
System.out.println(Arrays.toString(mArray));
System.out.println("mtop=mcount=" + mTop);
} else {
System.out.println("栈里已经满了,不能再入栈了:" + item);
}
}
/**
* 查看栈顶元素,不出栈
* @return
*/
public E peek() {
return (E) mArray[mTop - 1];
}
/**
* 出栈
*/
public E pop() {
if (!isEmpty()) {//如果未空
Object object = mArray[--mTop];
mCount--;
mArray[mTop] = null;
return (E) object;
}
return null;
}
/**
* 栈中是否为空
*/
public boolean isEmpty() {
if (mCount == 0) {
return true;
}
return false;
}
/**
* 判断栈是否已满 (在java 的Stack中没有这个函数,它使用了vector,vector中在维护内部数组时使用了容量变量和增长因子,
* 若当前容量不足时,有增长因子则加上它,没有则让旧容量*2,来确定最终的容量,再使用Arrays.copy(array, newLength) )
* @return
*/
public boolean isFull() {
if (mCount == mSize) {
return true;
}
return false;
}
/**
* 查找元素在栈中的位置
* @param obj
* @return
*/
public int search(E obj) {
if (!isEmpty()) {
for (int i = 0; i < mArray.length; i++) {
if (obj.equals(mArray[i])) {
return i + 1;
}
}
}
return -1;
}
/**
* @return 栈内元素数
*/
public int size() {
return mCount;
}
}
输出结果
isEmpty:true
[abc, null, null, null, null, null]
mtop=mcount=1
[abc, edf, null, null, null, null]
mtop=mcount=2
[abc, edf, ghi, null, null, null]
mtop=mcount=3
[abc, edf, ghi, kkk, null, null]
mtop=mcount=4
isFull:false
[abc, edf, ghi, kkk, aaa, null]
mtop=mcount=5
[abc, edf, ghi, kkk, aaa, eee]
mtop=mcount=6
栈里已经满了,不能再入栈了:777
isFull:true
peek:eee
search:6
pop:eee
search:-1
isEmpty:false
isFull:false
分享到:
相关推荐
数组模拟栈.rar 里有数据结构数组模拟栈操作的代码。欢迎大家下载!
数组模拟栈.rar 里有用数组模拟栈的基本操作。推荐下载,欢迎大家下载!
那么,我们该如何用代码人工模拟栈呢? 首先,设置栈的最大深度(因为这里的栈是由数组实现的,在函数引用传递的过程中必须设置大小)。 第二步,初始化栈,就是只要把栈顶指针设置为-1(为什么设置为-1在注意事项...
\数据结构flash演示\版本1\3-4-2离散事件模拟.swf \数据结构flash演示\版本1\4-1-1串的定位操作.swf \数据结构flash演示\版本1\4-1-2串的替换.swf \数据结构flash演示\版本1\4-3-1串的简单匹配.swf \数据结构...
1、go里面没有栈这个数据结构,可以用数组模拟 2、既然是用栈模拟队列,就不能有按索引直接访问数组元素的操作,直接访问数组模拟的栈最后一个元素,也就是栈顶元素
JavaScript实现栈结构(Stack) 一、前言 1.1. 什么是数据结构? 数据结构就是在计算机中,存储和组织数据的方式。 例如:图书管理,怎样摆放图书才能既能放很多书,也方便取? 主要需要考虑两个问题: 操作一:新书...
数据结构课件。内部还有一套模拟试卷。有用的下载
有些语言不提供指针与对象数据类型,以下代码通过...用一个数组空间模拟分配堆。用一个头指针为free的链表来管理自由空间。用栈得push和pop操作来实现释放和分配空间。 三个数组next,key和prev分别存储关键字以及指针
它可适应读者对算法的输入数据和过程执行的控制方式的不同需求, 在计算机的屏幕上显示算法执行过程中数据的逻辑结构或存储结构的变化状况或递归算法执行过程中栈的变化状况。整个系统使用菜单驱动方式, 每个菜单...
简单实用,易学易懂,紧贴考试,是备考学子不可缺少的!
文章目录栈的应用场景与介绍栈的介绍出入栈的概念(如图所示)栈的应用场景数组模拟栈的思路分析图代码实现栈实现综合计算器要求思路分析代码实现 栈的应用场景与介绍 计算式:7*2*2-5+1-5*3-3=? 计算机底层是如何...
数组模拟栈 数组模拟队列 9、单调栈 单调栈 10、单调队列 滑动窗口 11、KMP 12、Trie树 Trie字符串统计(1) Trie字符串统计(2) Trie字符串统计(3) 13、并查集 合并集合 连通块中点的数量 labuladong专题 二叉树 ...
此类型在很多方面做了优化,因此可以把它当成真正的数组(真正的数组在前面的课程javascript已经学过了,这里只介绍与以前数组之间的区别)来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列...
对基本数据结构的模拟,实现arrayList,hashMap,树,队列,栈的基本方法,对于学习数据结构有一定的帮助 LinkedList[] arr = new LinkedList[999]; // 键值对集合! Map底层结构是:数组 + 链表 int size = 0; // ...
需求分析 (1)以堆栈Lift模拟电梯,以队Qup[],Qdnow[]两个数组模拟等候电梯的人排的队。进 入系统的人进入队列,进入电梯的人从队列中删除并且进入栈中,离开系统的人也从队 列中删除。 (2)用户输入楼的的层数,...
习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题习题
为了实现上述操作,以栈为存储结构。 本程序包含三个模块: (1) 主程序模块:实现人机交互。 (2) 迷宫生产模块:随机产生一个12×12的迷宫。 (3) 路径查找模块:实现通路的查找。 (4) 求解迷宫中一条通路的伪...
10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main 函数的参数 166...
Java程序设计基础\ 线性表 栈和队列 串 数组和广义表 树和二叉树 图 查找 排序
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。 ...