《算法导论》学习心得(九)——栈(JAVA)
来源:互联网 发布:学哪种编程语言好 编辑:程序博客网 时间:2024/05/21 11:14
哎,上周还是没有坚持写博客,也许可能是因为聚会吧和实习的缘故吧,但这些都不是理由,现在到中科院了,时间就很充分了,以后每周坚持至少写3篇。废话少说,今天开始学基本数据结构,第一讲栈!
栈:作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。栈可以用来在函数调用的时候存储断点,做递归时要用到栈!
Java具体实现:
<pre name="code" class="java">package com.tangbo;import java.lang.reflect.Array;public class Stack<T> {private int top;private int length;T [] stack;//声明一个栈@SuppressWarnings("unchecked")public Stack(int length) {this.length = length;this.stack = (T[])Array.newInstance(Object.class,length);//不能用 stack = new T[length]初始化,当实现一个泛型类时,您可能想要构造一个数组T[]。因为泛型是通过擦除(erasure)实现的,所以这是不允许的。//您可以尝试把Object[]强制转换为T[]。但这是不安全的。具体化解决方案按照泛型教程的惯例,解决方案使用的是“类型令牌”,通过向构造函数添加一个Class<T>参数,可以强制客户端为类的类型参数提供正确的类对象。详见:http://www.cnblogs.com/Fskjb/archive/2009/08/23/1552506.htmlthis.top = -1;//初始化栈顶}public boolean stackEmpty() {//判断栈是否满boolean isEmpty = false;if(top==-1){isEmpty = true;}return isEmpty;}public boolean statckFull()//判断栈是否为空{boolean isFull = false;if((top+1)==length){isFull = true;}return isFull;}public void push(T t) {//入栈if(statckFull()){System.err.print("栈满了!");}else{top++;stack[top] = t;}}public T pop() {//出栈T t=null;if(stackEmpty()){System.err.print("栈为空!");}else{t = stack[top];top--;}return t;}public int stackLength() {//返回栈的长度return top+1;}}
测试类:
package com.tangbo;public class Test {public static void main(String[] args) {Stack<Integer> stack = new Stack<Integer>(2);stack.push(2);stack.push(3);int length = stack.stackLength();for(int i=0;i<length;i++){System.out.println("i="+i+":"+stack.pop());}}}
源码下载地址:http://pan.baidu.com/s/1mgqna3m
0 0
- 《算法导论》学习心得(九)——栈(JAVA)
- 《算法导论》学习心得(十)—— 泛型(JAVA)
- 《算法导论》学习心得(十一)—— 队列(JAVA)
- Dijkstra算法——《算法导论》学习心得(十三)
- 算法导论(九)——图
- 《算法导论》学习心得(七)—— 基数排序
- 二叉搜索树——《算法导论》学习心得(十二)
- 红黑树——《算法导论》学习心得(十四)
- 《算法导论》学习心得(三)—— 归并排序(Java)
- 《算法导论》学习心得(四)—— 堆排序(Java)
- 《算法导论》学习心得(五)—— 快排(Java)
- 《算法导论》学习心得(六)—— 计数排序(Java)
- 《算法导论》学习心得(八)—— 桶排序(JAVA)
- 《算法导论》学习心得(二)—— 矩阵乘法之Strassen算法
- 《算法导论》学习心得(一)——分治求最大子数问题
- 算法导论(九)kmp匹配算法
- 算法导论学习笔记(九):红黑树
- VC++学习心得(九)
- Struts+Spring+Hibernate的Web应用执行过程
- 邮件提供的服务解释
- POJ 1185-炮兵阵地(状压DP)
- lua 与 c/c++ 交互(1) 初探
- Cantor数塔问题
- 《算法导论》学习心得(九)——栈(JAVA)
- C语言 给字符数组赋值的方法<转>
- jdbc和hibernate的对比
- 2015秋招笔试题之程序设计题集锦
- steps
- 阶乘拆分成素数指数因子的形式
- Objective-C中的@property和@synthesize用法
- LeetCode[Tree]: Construct Binary Tree from Preorder and Inorder Traversal
- 论文案的重要性