(数据结构与算法分析 三)------栈的实现(包括链栈和数组实现栈 Java语言描述)
来源:互联网 发布:linux 777权限 命令 编辑:程序博客网 时间:2024/05/16 18:09
对于栈,这个数据结构据说现在现代计算机已经作为一个基本的数据结构,而且已经作为指令系统的一部分了,可见栈的重要性,以前我对链栈情有独钟,总觉得他永远不会出现栈满,而且实现起来比链栈复杂,很有成就感,但是今天看完算法分析这本书的栈的这一章才了解到,其实作为平常的使用,数组实现的栈才是最常用的,因为他的查询和入栈与出栈都是一个时间单位就能完成的,而且速度惊人完全可以忽略不计,他的唯一缺点就是需要指定最大的空间,但是一班的程序没必要这个栈做的太大,也就是一个短小的精悍的数据结构,所以这个最大数组长度也就不是什么问题了,我现在对数组实现栈又有了新的看法,他的结构简单通俗易懂,真的还不错,以后实现栈我就首先选择数组实现了。
下面废话少说,上代码,首先还是作为较为复杂的链栈的实现摆在前面
package com.bird.three;/** * @category 该类为链表的节点类,存储指针和数据 * @author Bird * */public class ListNode {//具有包友好访问权限Object element;ListNode next;ListNode(Object theElement){this(theElement,null);}ListNode(Object theElement, ListNode n){element = theElement;next = n;}}
package com.bird.three;/** * @category 栈的链表实现 * @author Bird * */public class StackList {private ListNode topOfStack;public StackList(){topOfStack = null;}public boolean isEmpty(){return topOfStack==null;}public void makeEmpty(){topOfStack = null;}public void push(Object x){//入栈操作topOfStack = new ListNode(x,topOfStack);//先创建X然后x的next指针指向topOfStack,然后返回给topOfStack}public Object peek(){//察看栈顶元素,不弹出if(isEmpty())return null;return topOfStack.element;}public Object pop(){//弹出栈顶元素,并作为对象返回if(isEmpty())return null;Object topItem = topOfStack.element;topOfStack = topOfStack.next;return topItem;}}
下面才是数组的实现,一定好好看看哦
package com.bird.three;/** * @category 栈的数组实现 * @author Bird * */public class StackArray {private Object [] theArray;private int topOfStack;private static final int DEFAULT_CAPACITY = 10;//栈的数组默认大小public StackArray(){this(DEFAULT_CAPACITY);}public StackArray(int capacity){theArray = new Object[capacity];topOfStack = -1;}public boolean isEmpty(){return topOfStack==-1;}public boolean isFull(){return topOfStack==theArray.length-1;}public void push(Object x){//入栈操作if(isFull())throw new RuntimeException("栈满");theArray[topOfStack++] = x;}public Object peek(){//查看栈顶元素if(isEmpty())return null;return theArray[topOfStack];}public Object pop(){//弹出栈的顶元素if(isEmpty())return null;Object topItem = theArray[topOfStack];theArray[topOfStack--]=null;return topItem;}}
- (数据结构与算法分析 三)------栈的实现(包括链栈和数组实现栈 Java语言描述)
- (数据结构与算法分析 四)------数组循环队列的实现( Java语言描述)
- 《数据结构与算法分析》—栈的链表和数组实现(C语言)
- 栈及其应用 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 栈及其应用 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 数据结构与算法分析(Java 语言描述)(35)—— 使用两个栈实现一个队列
- 数据结构与算法分析(Java 语言描述)(36)—— 使用两个队列实现一个栈
- (数据结构与算法分析 五)------二叉查找树的实现( Java语言描述)
- (数据结构与算法分析 六)------散列表的实现( Java语言描述)
- 数据结构与算法分析(Java语言描述)(30)—— 有权图的实现
- 数据结构与算法(Java语言描述)--栈和队列
- 数据结构(java语言描述)-- 表的简单数组实现
- 数据结构(java语言描述)-- 队列的循环数组实现
- 数据结构与算法分析 C语言描述 单链表的实现
- 数据结构与算法分析-用C语言实现栈(数组方式)
- (数据结构与算法分析 七)------优先队列中的二叉堆的实现( Java语言描述)
- (数据结构与算法分析 八)------插入排序,希尔排序,归并排序的实现( Java语言描述)
- 《数据结构与算法分析——java语言描述(第二版)》中树实现的一点思考
- 火狐插件- 显示时区 FoxClocks
- SQL 语句汇总(三)
- 随即数的生成方式
- SQL语句汇总(二)
- jquery地址
- (数据结构与算法分析 三)------栈的实现(包括链栈和数组实现栈 Java语言描述)
- SQL语句汇总(一)
- Oracle 在Dos里 导入导出
- SWF和远程链接交互,本地直接运行SWF格式的文件会出现拦截问题的解决
- PL/SQL基础编程之(五)[自定义复合变量][%TYPE和%ROWTYPE的应用]
- Quartz_cron表达式
- 第三届ATI自动化荣誉
- 目前 Android平板所面临的几个问题
- android UI 之 竖直的seekBar 及 自定义背景和thumb对齐问题(换一种方式思考)