《算法导论》学习心得(九)——栈(JAVA)

         哎,上周还是没有坚持写博客,也许可能是因为聚会吧和实习的缘故吧,但这些都不是理由,现在到中科院了,时间就很充分了,以后每周坚持至少写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.html
		this.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

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值