《算法导论》学习心得(九)——栈(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
原创粉丝点击